2013-12-09 66 views
1

我們構建用於分佈式處理的系統,並希望爲網絡I/O堆棧使用netty(4.0)。分佈式處理中的最大吞吐量(使用netty 4.0)

以下情況:我們得到了一個生產者任務A和一個消費者任務B.任務A以64K塊生成數據並將其發送給任務B.任務B可能在某些情況下計算密集型並消耗64K塊由任務A產生。任務A和B通過tcp通道連接。

我們考慮這種方法:任務A生成塊並將其放入本地隊列中。當tcp通道空閒並且下一個64K可以寫入通道(netty是否給我們提供這樣的信號/事件?)時,會自動從隊列中取出一個塊。如果任務A上的隊列超過了存儲塊的固定限制,我們將阻塞任務A直到任務B消耗塊。實質上,我們需要一個「接收器觸發寫入」來完成任務A充分利用tcp通道而不使其擁塞。這種設計的目標應該是最大的數據吞吐量。

有幾個問題現在:)

那是一個很好的設計,使最大吞吐量?什麼是更好的設計來充分利用TCP通道?

netty是這些場景的正確框架嗎? (我對netty相當陌生,但我非常喜歡這個框架的乾淨抽象/設計!)

這樣的設計可以用netty來實現嗎? =>(它是否給我們從接收者站點發出這樣的信號/事件?)

什麼是使用netty來實現最大吞吐量的最佳設計?

有沒有其他的框架更合適?

任何想法和說明是值得歡迎的!

非常感謝提前! 託比

回答

1

這裏是一個幾句話:

  • 一般設計:你提的「分佈式」處理,但不指定您是否有任務A和任務B處理器的多個實例。如果您只有一個Task A處理器和一個Task B處理器,則數據吞吐量將由較慢的處理器決定。我明白,平均來說,B是較慢的,但它可以更快,所以在A和B之間引入緩衝區看起來是個好主意。所以我認爲如果你想要/需要堅持單個A和單個B實例,那麼設計沒問題,但是如果B確實比較慢,你可能會考慮有多個實例(那麼你會有比B更多的B實例)

  • netty或其他框架:是的,你可以在Netty中做到這一點。不過,我認爲你必須寫出「TCP通道是免費的」信號。我沒有太多的經驗,但我認爲像http://akka.io/這樣的框架,實現消息傳遞和演員模型將會很有趣。