從http://www.erlang.org/doc/man/gen_tcp.html#accept-1:Erlang中的接受器池和負載均衡?
值得一提的是,接受呼叫不必發出從插座所有者過程 。使用版本5.5.3及更高版本的 仿真器,可以從不同的進程發出多個同時接受調用,這允許處理傳入連接的接受器進程池 。
(Q1)這是否意味着我們可以有Unicorn風格的負載均衡在二郎山?
(Q2)如果是這樣,是否有任何現有的服務器或庫使用此功能?
(Q3)獨角獸的工作假設請求處理是快速。在相同的假設下,Erlang中的接受者和工作者結合起來可以獲得更好的表現嗎?
對於那些不熟悉Unicorn的人來說,它是一個傳統的UNIX prefork web服務器。工作進程之間的負載平衡由OS內核完成。所有工作人員共享一組通用的偵聽套接字,並對其進行非阻塞accept()。內核將決定哪個工作進程給套接字,並且如果沒有任何東西可以接受,工作人員將會休眠()。 對於單個偵聽器套接字,我相信當工作進程阻塞accept()並且OS內核決定「比賽」的結果時是相同的。
一個猜測可能是牧場方法和羣體方法在實踐中一樣。舉個例子:牛仔使用牧場和牛仔的速度非常快。 –
@IGIVECRAPANSWERS同意。順便說一下,有沒有關於牛仔等的最新基準? –
我不知道。我的猜測是你需要測量你自己的工作量。對於我所擁有的工作量來說,問題在牛仔甚至讓它進入甚至是一個瓶頸之前就已經在環節的其他地方了。 –