Netty是一個基于事件驅(qū)動的異步高吞吐量服務(wù)器客戶端框架。它的架構(gòu)具有高性能、高擴展性及可靠性。
架構(gòu)

架構(gòu)圖片.png
- Channel 直接負責(zé)I/O的操作的管理,比如: read, write, connect, bind等,這里所有的I/O操作都是異步的
- EventLoop 處理所有I/O事件
- Pipeline 負責(zé)事件在鏈中的傳播,且可以動態(tài)的調(diào)整鏈的功能。比如:http server的協(xié)議部分,可以由協(xié)議的handler來進行處理;完成協(xié)議處理后,觸發(fā)業(yè)務(wù)邏輯handler,來完成業(yè)務(wù)操作。
高性能
- Netty基于nio, 利用Reactor模式,解決基于傳統(tǒng)I/O模式下客戶端線性增長帶來的線程問題
- 發(fā)送和接收數(shù)據(jù)基于堆外內(nèi)存,實現(xiàn)零拷貝
- 通過內(nèi)存池來利于ByteBuf, 避免GC帶來的性能消耗
- 使用原子類,環(huán)形數(shù)組緩沖等提高系統(tǒng)的并發(fā)能力
無論是Netty官方還是在業(yè)界使用中,Netty框架的性能都是佼佼者, 達到了高吞吐量低延時的目標(biāo)。
高擴展性
Netty本身實現(xiàn)了常用的協(xié)議:

Protocol.png
如果是自定義的協(xié)議,使用Netty來實現(xiàn)很容易。Netty已經(jīng)考慮到了該場景,只需要定制私有的handler,來處理私有協(xié)議的握手、加密、解密,然后動態(tài)的放到到Pipeline中即可。
可靠性
Netty的可靠性體現(xiàn)在幾個方面:
- 內(nèi)存保護機制
- 優(yōu)雅停機
- 通信鏈路檢測