2008-09-05 73 views
1

我有1個進程接收來自端口1000的傳入連接,其中服務器是1 linux服務器。但是,1個進程不足以處理所有傳入的請求。1服務器中進程的負載平衡

我想在服務器上運行多個進程,但有1個端點。這樣,客戶端只會看到1個端點/進程不是多個。

我檢查過LVS和其他負載均衡解決方案。這些解決方案似乎適用於多個服務器負載平衡。

任何其他解決方案,以幫助我的情況?


我看起來更像nginx,我需要運行我的應用程序的多個副本。

讓我試試看。

感謝您的幫助。

回答

2

您也可能想要使用像nginx這樣的網絡服務器。它可以將應用程序與同一應用程序的多個端口進行負載平衡,並且通常用於平衡Ruby on Rails應用程序(它們是單線程的)。缺點是您需要運行應用程序的多個副本(每個端口上有一個副本)才能使此負載平衡正常工作。

2

這個問題對我來說有點不清楚,但我懷疑你正在尋找的答案是讓一個進程接受來自網絡的任務,然後分離出「工作進程」來實際執行工作(在返回之前結果給用戶)。

這樣,正在完成的工作並不會阻止接受更多的請求。

正如您指出的那樣,術語負載平衡帶有多個服務器的含義 - 您想要查找的是有關如何編寫Linux網絡守護程序的信息。

您想要查看的兩個kes系統調用稱爲fork and exec

2

這聽起來像你只需要將您的服務器與xinetd集成。

這是一個偵聽預定義端口(通過配置控制的端口)並分離進程以處理該端口上的實際通信的服務器。

1

您需要多處理或多線程。您對服務器的詳細信息沒有具體說明,因此我無法給您提供有關如何執行的建議。正如Matt建議的fork和exec可以是一個解決方案,但是真的:我們在談論什麼類型的協議/服務器?

0

我想運行多個應用程序類似於ypops

0

nginx的是偉大的,但如果你不喜歡一個全新的Web服務器,與國防部代理平衡器Apache 2.2的會做同樣的工作

0

也許你可以修改你的客戶爲round-robin端口(說)1000 -1009並運行10個進程的副本?

或者,必須有一些內部重構它的方式。

幾個進程可能在調用fork()之前立即偵聽同一個套接字,但是(如果它是TCP套接字)一旦調用accept(),結果套接字就成功地屬於哪個進程接受了這個連接。

所以基本上你可以使用:

  • prefork的,在那裏你打開插座,叉兒指定數量,然後進行負載分擔
  • 後叉,那就是你有一個主進程,它接受所有的連接和分叉兒童處理單獨的套接字
  • 線程 - 你可以用任何你喜歡的方式共享套接字,因爲文件描述符沒有被克隆,它們只能用於任何線程。