Neta 網絡框架技術內幕 - 工作模型

Neta 是一個幫助用戶輕鬆開發高性能和高可擴展網絡應用程序的網絡應用框架。它提供了一個抽象的異步雙工編程模型,並工作在Java AIO之上。

工作模型

Neta 完全基於異步事件驅動進行工作:

  • 當 Channel 上發生 I/O 事件後會先進入隊列等待 Worker 線程處理。
  • 應用程序空閒時 Worker 線程會處於休眠狀態,在 I/O 事件進入隊列後 Worker 線程會被喚醒並進行事件處理。 當事件隊列爲空後 Worker 線程會再次進入睡眠狀態。
  • 同一個 Channel 的不同 I/O 事件可能可能會由不同的線程負責執行。

一個網絡應用程序中通常會有一個或多個環節來處理協議數據,這些環節最終會形成一個 Pipeline,整個數據處理過程遵循:

  • 在遇到上行數據時,首先會在 Java AIO 線程中得到接收的上行數據。 這個數據會被放入事件隊列並等待 Worker 線程進行處理。
  • Worker 在拿到上行數據後在將其交給 Pipeline 進行處理,處理後會產生下行數據並再次交還給事件隊列。
  • 所有下游(即出站)事件可以從任何線程觸發,包括 Worker 線程 和非 Worker 線程。

  • 壞習慣:在 Worker 線程中直接處理業務邏輯會拖慢事件隊列消費速度最終會影響整體應用性能,好的做法是使用新的線程專門處理業務邏輯。
  • 壞習慣:在 Pipeline 中使用 NetChannel 發送下行數據會完整的執行整個 Pipeline 這在多環節協作中會遭遇事件類型轉換和傳遞問題。 這種方式有損於性能並且編程難度也會加大。正確做法是通過 PipeSndQueue 發送下行數據,或者通過 PipeContext 發送下行數據。此時 Pipeline 工作方式看起來應該是這個樣子:

結尾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章