標籤:軟體 log actor通訊 啟用 線程 連網 傳輸 主從 無法
Netty是一個高效能、非同步事件驅動的NIO架構,它提供了對TCP、UDP和檔案傳輸的支援,Netty的所有IO操作都是非同步非阻塞的,通過Future-Listener機制,使用者可以方便的主動擷取或者通過通知機制獲得IO操作結果。
Netty的優點有:
a、功能豐富,內建了多種資料編解碼功能、支援多種網路通訊協定。
b、高效能,通過與其它主流NIO網路架構對比,它的綜合效能最佳。
c、可擴充性好,可通過它提供的ChannelHandler組件對網路通訊方面進行靈活擴充。
d、易用性,API使用簡單。
e、經過了許多商業應用的考驗,在互連網、網路遊戲、大資料、電信軟體等眾多行業得到成功商用。
Netty採用了典型的三層網路架構進行設計,邏輯架構圖如下:
第一層:Reactor通訊調度層。該層的主要職責就是監聽網路的串連和讀寫操作,負責將網路層的資料讀取到記憶體緩衝區中,然後觸發各種網路事件,例如串連建立、串連啟用、讀事件、寫事件等,將這些事件觸發到Pipeline中,再由Pipeline充當的職責鏈來進行後續的處理。
第二層:職責鏈Pipeline層。負責事件在職責鏈中有序的向前(後)傳播,同時負責動態編排職責鏈。Pipeline可以選擇監聽和處理自己關心的事件。
第三層:商務邏輯處理層,一般可分為兩類:a. 純粹的商務邏輯處理,例如日誌、訂單處理。b. 應用程式層協議管理,例如HTTP(S)協議、FTP協議等。
我們都知道影響網路服務通訊效能的主要因素有:網路I/O模型、線程(進程)調度模型和資料序列化方式。
在網路I/O模型方面,Netty採用基於非阻塞I/O的實現,底層依賴的是JDKNIO架構的Selector。
線上程調度模型方面,Netty採用Reactor執行緒模式。常用的Reactor執行緒模式有三種,分別是:
a、Reactor單執行緒模式:Reactor單執行緒模式,指的是所有的I/O操作都在同一個NIO線程上面完成。對於一些小容量應用情境,可以使用單執行緒模式。
b、Reactor多執行緒模式:Rector多執行緒模式與單執行緒模式最大的區別就是有一組NIO線程處理I/O操作。主要用於高並發、大業務量情境。
c、主從Reactor多執行緒模式:主從Reactor執行緒模式的特點是服務端用於接收用戶端串連的不再是一個單獨的NIO線程,而是一個獨立的NIO線程池。利用主從NIO執行緒模式,可以解決一個服務端監聽線程無法有效處理所有用戶端串連的效能不足問題。Netty執行緒模式並非固定不變的,它可以支援三種Reactor執行緒模式。
在資料序列化方面,影響序列化效能的主要因素有:
a、序列化後的碼流大小(網路頻寬佔用)。
b、序列化和還原序列化操作的效能(CPU資源佔用)。
c、並發調用時的效能表現:穩定性、線性增長等。
Netty預設提供了對GoogleProtobuf二進位序列化架構的支援,但通過擴充Netty的編解碼介面,可以實現其它的高效能序列化架構,例如Avro、Thrift的壓縮二進位編解碼架構。
基於NIO的Netty網路架構