Netty是什麼?
1)本質:JBoss做的一個Jar包
2)目的:快速開發高性能、高可靠性的網絡伺服器和用戶端程式
3)優點:提供異步的、事件驅動的網絡應用程式架構和工具
通俗的說:一個好使的處理Socket的東東
如果沒有Netty?
遠古:
java.net + java.io
近代:
java.nio
其他:
Mina,Grizzly
與Mina相比有什麼優勢?
1、都是Trustin Lee的作品,Netty更晚;
2、Mina将核心和一些特性的聯系過于緊密,使得使用者在不需要這些特性的時候無法脫離,相比下性能會有所下降,Netty解決了這個設計問題;
3、Netty的文檔更清晰,很多Mina的特性在Netty裡都有;
4、Netty更新周期更短,新版本的釋出比較快;
5、它們的架構差别不大,Mina靠apache生存,而Netty靠jboss,和jboss的結合度非常高,Netty有對google protocal buf的支援,有更完整的ioc容器支援(spring,guice,jbossmc和osgi);
6、Netty比Mina使用起來更簡單,Netty裡你可以自定義的處理upstream events 或/和 downstream events,可以使用decoder和encoder來解碼和編碼發送内容;
7、Netty和Mina在處理UDP時有一些不同,Netty将UDP無連接配接的特性暴露出來;而Mina對UDP進行了進階層次的抽象,可以把UDP當成"面向連接配接"的協定,而要Netty做到這一點比較困難。
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 作為基礎通信元件,用于實作各程序節點之間的内部通信。
其中,服務提供者和服務消費者之間,服務提供者、服務消費者和性能統計節點之間使用 Netty 進行異步/同步通信。
除了 Dubbo 之外,淘寶的消息中間件 RocketMQ 的消息生産者和消息消費者之間,也采用 Netty 進行高性能、異步通信。
除了阿裡系和淘寶系之外,很多其它的大型網際網路公司或者電商内部也已經大量使用 Netty 建構高性能、分布式的網絡伺服器。
- 遊戲行業:無論是手遊服務端、還是大型的網絡遊戲,Java 語言得到了越來越廣泛的應用。Netty 作為高性能的基礎通信元件,它本身提供了 TCP/UDP 和 HTTP 協定棧,非常友善定制和開發私有協定棧。賬号登陸伺服器、地圖伺服器之間可以友善的通過 Netty 進行高性能的通信.
- 大資料領域:
- 經典的 Hadoop 的高性能通信和序列化元件 Avro 的 RPC 架構,預設采用 Netty 進行跨節點通信,它的 Netty Service 基于 Netty 架構二次封裝實作。
大資料計算往往采用多個計算節點和一個/N個彙總節點進行分布式部署,各節點之間存在海量的資料交換。由于 Netty 的綜合性能是目前各個成熟 NIO 架構中最高的,是以,往往會被選中用作大資料各節點間的通信。
- 企業軟體:企業和 IT 內建需要 ESB,Netty 對多協定支援、私有協定定制的簡潔性和高性能是 ESB RPC 架構的首選通信元件。事實上,很多企業總線廠商會選擇 Netty 作為基礎通信元件,用于企業的 IT 內建。
- 通信行業:Netty 的異步高性能、高可靠性和高成熟度的優點,使它在通信行業得到了大量的應用。
作者:郭無心
連結:https://www.zhihu.com/question/24322387/answer/78947405
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。