Netty是一個高效能、非同步事件驅動的NIO框架,它提供了對TCP、UDP和檔案傳輸的支持,Netty的所有IO操作都是非同步非阻塞的,透過Future-Listener機制,使用者可以方便的主動獲取或透過通知機制獲得IO操作結果。
儘管JDK提供了豐富的NIO類別庫,網路上也有很多NIO學習例程,但是直接使用Java NIO類別庫想要開發出穩定可靠的通訊框架卻並非易事,原因如下:
1)NIO的類別庫和API繁雜,使用麻煩,你需要熟練 Selector、Server Socket Channel
SocketChannel、ByteBuffer等。
2) 需要具備其他的額外技能做鋪墊,例如熟悉Java多執行緒程式設計。這是因為NIO程式設計涉及 Reactor模式,你必須對多執行緒和網路程式設計非常熟悉,才能寫出高品質的NIO程式。
3)可靠度能力補齊,工作量和難度都非常大。例如客戶端面臨斷連重連、網路閃斷、半包讀寫、失敗快取、網路擁塞和異常碼流的處理等問題,NIO程式設計的特點是功能開發相對容易,但是可靠性能力補齊的工作量和難度都非常大。
4) JDK NIO的BUG,例如臭名昭著的epoll bug,它會導致Selector空輪詢,最終導致CPU100% 。官方聲稱在JDK16版本的 updateI8修復了該問題,但是直到JDK1.7版本該問題仍舊存在,只不過該BUG發生概率降低了一些而已,它並沒有被根本解決。該BUG以及與該BUG相關的問題單可以參考以下連結內容:
#http://bugsjava.com/bugdatabase/viewbug.do?bugid=6403933
http:/bugs.javacom/bugdatabase /viewbugdo?bugid=2147719
隨著開源NO框架的發展,目前越來越多的商用系統採取直接整合開源NO框架的方式取代先前的自研方案。以最成熟的NIO框架Netty為例,它已經得到成百上千的商用專案驗證。例如 Hadoop的RPC架構avro使用Netty作為底層通訊架構、即時串流運算架構Sum底層通訊架構也採用的是Netty,還有 Twitter內部使用的RPC架構 Finagle,其底層通訊架構也基於Netty建置。
◎API使用簡單,開發門檻低。
◎功能強大,預置了多種編解碼功能,支援多種主流協定。
◎客製化能力強,可以透過 ChannelHandler對通訊框架進行靈活地擴充。
◎性能高,透過與其他業界主流的NO框架對比,Netty的綜合性能最優。
◎成熟、穩定,Nety修復了已經發現的所有 JDK NIO BUG,業務開發人員不需要再為N1O的BUG而煩惱。
◎社群活躍,版本迭代週期短,發現的BUG可以被及時修復。同時,更多的新功能會加入。
◎經歷了大規模的商業應用考驗,品質得到驗證。在互聯網、大數據、網路遊戲、企業應用、電信軟體等眾多行業中得到成功商用,證明了它已經完全能夠滿足不同行業的商業應用了。
Netty的表現如此優秀,因此我們的通訊框架是基於Netty進行設計和開發。
本文參考李林鋒《分散式服務框架原理與實踐》,上海尚學堂Java培訓整理,閱讀更多Java技術文章請返回本欄目,獲取java技術資料或學習視頻,請聯繫客服小姐姐。
以下文章值得一讀:《分散式服務架構原理與功能特性_上海java訓練》、《什麼是微服務架構?微服務架構與SOA架構區別》、《RPC架構與原理,以及業界主流的RPC框架簡介》、《經典的垂直應用框架-MVC框架介紹》
相關推薦:
以上是最成熟的開源NIO框架Netty的詳細內容。更多資訊請關注PHP中文網其他相關文章!