NO IMAGE
作者:郭無心
連結:https://www.zhihu.com/question/24322387/answer/78947405
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

Netty的特性

1)設計

統一的API,適用於不同的協議(阻塞和非阻塞)

基於靈活、可擴充套件的事件驅動模型

高度可定製的執行緒模型

可靠的無連線資料Socket支援(UDP)

2)效能

更好的吞吐量,低延遲

更省資源

儘量減少不必要的記憶體拷貝

3)安全

完整的SSL/TLS和STARTTLS的支援

能在Applet與Android的限制環境執行良好

4)健壯性

不再因過快、過慢或超負載連線導致OutOfMemoryError

不再有在高速網路環境下NIO讀寫頻率不一致的問題

5)易用

完善的JavaDoc,使用者指南和樣例

簡潔簡單

僅信賴於JDK1.5

——————————————————————————————————————————————-

Netty 在哪些行業得到了應用?

  • 網際網路行業:隨著網站規模的不斷擴大,系統併發訪問量也越來越高,傳統基於 Tomcat 等 Web 容器的垂直架構已經無法滿足需求,需要拆分應用進行服務化,以提高開發和維護效率。從組網情況看,垂直的架構拆分之後,系統採用分散式部署,各個節點之間需要遠端服務呼叫,高效能的 RPC 框架必不可少,Netty 作為非同步高效能的通訊框架,往往作為基礎通訊元件被這些 RPC 框架使用。

  典型的應用有:阿里分散式服務框架 Dubbo 的 RPC 框架使用 Dubbo 協議進行節點間通訊,Dubbo 協議預設使用 Netty 作為基礎通訊元件,用於實現各程序節點之間的內部通訊。它的架構圖如下:

<img src="https://pic4.zhimg.com/50/0033448fdced8b3c3897e1a41b4dfa10_hd.jpg" data-rawwidth="533" data-rawheight="356" class="origin_image zh-lightbox-thumb" width="533" data-original="https://pic4.zhimg.com/0033448fdced8b3c3897e1a41b4dfa10_r.jpg">

其中,服務提供者和服務消費者之間,服務提供者、服務消費者和效能統計節點之間使用 Netty 進行非同步/同步通訊。

  除了 Dubbo 之外,淘寶的訊息中介軟體 RocketMQ 的訊息生產者和訊息消費者之間,也採用 Netty 進行高效能、非同步通訊。

  除了阿里系和淘寶系之外,很多其它的大型網際網路公司或者電商內部也已經大量使用 Netty 構建高效能、分散式的網路伺服器。

  • 遊戲行業:無論是手遊服務端、還是大型的網路遊戲,Java 語言得到了越來越廣泛的應用。Netty 作為高效能的基礎通訊元件,它本身提供了 TCP/UDP 和 HTTP 協議棧,非常方便定製和開發私有協議棧。賬號登陸伺服器、地圖伺服器之間可以方便的通過 Netty 進行高效能的通訊,架構示意圖如下:

<img src="https://pic2.zhimg.com/50/9adabad98edc4b4e9001e2fc63d6da87_hd.jpg" data-rawwidth="494" data-rawheight="196" class="origin_image zh-lightbox-thumb" width="494" data-original="https://pic2.zhimg.com/9adabad98edc4b4e9001e2fc63d6da87_r.jpg">

  圖1-2 Netty 在遊戲伺服器架構中的應用

  • 大資料領域:經典的 Hadoop 的高效能通訊和序列化元件 Avro 的 RPC 框架,預設採用 Netty 進行跨節點通訊,它的 Netty Service 基於 Netty 框架二次封裝實現。

  大資料計算往往採用多個計算節點和一個/N個彙總節點進行分散式部署,各節點之間存在海量的資料交換。由於 Netty 的綜合效能是目前各個成熟 NIO 框架中最高的,因此,往往會被選中用作大資料各節點間的通訊。

  • 企業軟體:企業和 IT 整合需要 ESB,Netty 對多協議支援、私有協議定製的簡潔性和高效能是 ESB RPC 框架的首選通訊元件。事實上,很多企業匯流排廠商會選擇 Netty 作為基礎通訊元件,用於企業的 IT 整合。

  • 通訊行業:Netty 的非同步高效能、高可靠性和高成熟度的優點,使它在通訊行業得到了大量的應用。