我想用某種服務服務器處理來自javascript客戶端的大量(> 100k/sec)POST請求。這些數據並不會存儲很多,但我必須處理所有這些數據,因此我無法將整個服務器的功耗用於僅處理請求。所有的處理都需要在同一個服務器實例中完成,否則我將需要使用數據庫進行服務器之間的同步,這將會在數量級上變慢。如果我不需要發回任何數據,那麼服務器是否可以處理更多請求?
但是,我不需要將任何數據發送回客戶端,他們甚至不期望他們。 到目前爲止,我的計劃是創建幾個代理服務器實例,這些代理服務器實例將能夠緩衝請求並將它們發送到更大包中的主服務器。
例如,假設我需要處理200k個請求/秒,每個服務器可以處理40k個請求。我可以分解他們中的5個。然後每個緩衝請求將其發送回主服務器,數量爲100包。這將導致主服務器上的每秒2k個請求(但是,每個消息將會大100倍 - 這可能意味着大約100-200kB) 。我甚至可以使用UDP將它們發送回服務器以減少所需資源的數量(然後我只需要在主服務器上使用一個套接字,對吧?)。
我只是想,如果沒有其他的方式來加快事情。特別是,當我說我不需要發回任何東西時。我也完全控制javascript客戶端,但不幸的JavaScript無法使用UDP發送數據,這可能是我的解決方案(我甚至不關心是否會丟失0.1%的數據)。
任何想法?
編輯迴應給我的答案到目前爲止。
問題不在於服務器在處理隊列中的事件或將事件放入隊列本身時變慢。事實上,我打算使用干擾模式(http://code.google.com/p/disruptor/),經證實,該模式每秒可處理多達600萬個請求。
我可能會遇到的唯一問題是需要同時打開100,200或300k套接字,這是任何主流服務器無法處理的。我知道一些定製的解決方案是可能的(http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-3),但我想知道是否沒有辦法更好地利用事實,我不必重播客戶端。
(例如某種方式嵌入在最初的TCP數據包中的部分數據和處理TCP數據包,他們將UDP或者其他類型的魔法;))