java開發Netty框架使用與Netty的理論分析

Java 編程語言 軟件 大數據 圖靈學院 圖靈學院 2017-09-18

引言

Netty是一個高性能、異步事件驅動的NIO框架,它提供了對TCP、UDP和文件傳輸的支持,作為一個異步NIO框架,Netty的所有IO操作都是異步非阻塞的,通過Future-Listener機制,用戶可以方便的主動獲取或者通過通知機制獲得IO操作結果。Netty也是 是一個基於 JAVA NIO 類庫的異步通信框架,它的架構特點是:異步非阻塞、基於事件驅動、高性能、高可靠性和高可定製性。

一丶使用 Netty 能夠做什麼?

1丶開發異步、非阻塞的 TCP 網絡應用程序;

2丶開發異步、非阻塞的 UDP 網絡應用程序;

3丶開發異步文件傳輸應用程序;

4丶開發異步 HTTP 服務端和客戶端應用程序;

5丶提供對多種編解碼框架的集成,包括谷歌的 Protobuf、Jbossmarshalling、Java 序列化、壓縮編解碼、XML 解碼、字符串編解碼等,這些編解碼框架可以被用戶直接使用;

6丶提供形式多樣的編解碼基礎類庫,可以非常方便的實現私有協議棧編解碼框架的二次定製和開發;

7丶基於職責鏈模式的 Pipeline-Handler 機制,用戶可以非常方便的對網絡事件進行攔截和定製;

8丶所有的 IO 操作都是異步的,用戶可以通過 Future-Listener 機制主動 Get 結果或者由 IO 線程操作完成之後主動 Notify 結果,用戶的業務線程不需要同步等待;

9丶IP 黑白名單控制;

10丶打印消息碼流;

11丶流量控制和整形;

12丶性能統計;

13丶基於鏈路空閒事件檢測的心跳檢測

二丶Netty 的優點

1丶API 使用簡單,開發門檻低;

2丶功能強大,預置了多種編解碼功能,支持多種主流協議;

3丶定製能力強,可以通過 ChannelHandler 對通信框架進行靈活的擴展;

4丶性能高,通過與其它業界主流的 NIO 框架對比,Netty 的綜合性能最優;

5丶社區活躍,版本迭代週期短,發現的 BUG 可以被及時修復,同時,更多的新功能會被加入;

6丶經歷了大規模的商業應用考驗,質量得到驗證。在互聯網、大數據、網絡遊戲、企業應用、電信軟件等眾多行業得到成功商用,證明了它完全滿足不同行業的商用標準。

7丶 正是因為這些優點,Netty 逐漸成為 Java NIO 編程的首選框架。

Netty也要注意幾個關鍵點。

1.Handler裡面不要做費時的IO/計算操作,最好是自己添加線程池處理比較費時的IO/計算

2.ChannelOption一定要注意設置ChannelOption.WRITE_BUFFER_LOW_WATER_MARK和ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK

3丶注意以上兩點服務器的性能和內存都會得到比較好的控制。

三丶Netty的特性

1丶設計

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

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

高度可定製的線程模型

可靠的無連接數據Socket支持(UDP)

2丶性能

更好的吞吐量,低延遲

更省資源

儘量減少不必要的內存拷貝

3丶安全

完整的SSL/TLS和STARTTLS的支持

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

4丶健壯性

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

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

5丶易用

完善的JavaDoc,用戶指南和樣例

簡潔簡單

僅信賴於JDK1.

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

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

2丶典型的應用有:阿里分佈式服務框架 Dubbo 的 RPC 框架使用 Dubbo 協議進行節點間通信,Dubbo 協議默認使用 Netty 作為基礎通信組件,用於實現各進程節點之間的內部通信。

3丶 其中,服務提供者和服務消費者之間,服務提供者、服務消費者和性能統計節點之間使用 Netty 進行異步/同步通信。

4丶除了 Dubbo 之外,淘寶的消息中間件 RocketMQ 的消息生產者和消息消費者之間,也採用 Netty 進行高性能、異步通信。

5丶除了阿里系和淘寶系之外,很多其它的大型互聯網公司或者電商內部也已經大量使用 Netty 構建高性能、分佈式的網絡服務器。

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

7丶大數據領域:

8丶經典的 Hadoop 的高性能通信和序列化組件 Avro 的 RPC 框架,默認採用 Netty 進行跨節點通信,它的 Netty Service 基於 Netty 框架二次封裝實現。

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

9丶企業軟件:企業和 IT 集成需要 ESB,Netty 對多協議支持、私有協議定製的簡潔性和高性能是 ESB RPC 框架的首選通信組件。事實上,很多企業總線廠商會選擇 Netty 作為基礎通信組件,用於企業的 IT 集成。

10丶通信行業:Netty 的異步高性能、高可靠性和高成熟度的優點,使它在通信行業得到了大量的應用。

五丶Netty線程開發最佳實踐

1丶 時間可控的簡單業務直接在IO線程上處理

如果業務非常簡單,執行時間非常短,不需要與外部網元交互、訪問數據庫和磁盤,不需要等待其它資源,則建議直接在業務ChannelHandler中執行,不需要再啟業務的線程或者線程池。避免線程上下文切換,也不存在線程併發問題。

複雜和時間不可控業務建議投遞到後端業務線程池統一處理

2丶對於此類業務,不建議直接在業務ChannelHandler中啟動線程或者線程池處理,建議將不同的業務統一封裝成Task,統一投遞到後端的業務線程池中進行處理。

過多的業務ChannelHandler會帶來開發效率和可維護性問題,不要把Netty當作業務容器,對於大多數複雜的業務產品,仍然需要集成或者開發自己的業務容器,做好和Netty的架構分層。

3丶業務線程避免直接操作ChannelHandler

4丶對於ChannelHandler,IO線程和業務線程都可能會操作,因為業務通常是多線程模型,這樣就會存在多線程操作ChannelHandler。為了儘量避免多線程併發問題,建議按照Netty自身的做法,通過將操作封裝成獨立的Task由NioEventLoop統一執行,而不是業務線程直接操作.如果你確認併發訪問的數據或者併發操作是安全的,則無需多此一舉,這個需要根據具體的業務場景進行判斷,靈活處理。

總結

以 上就是我推薦以上是對java開發Netty框架使用與Netty的理論分析 問題及其優化總結,分享給大家,希望大家可以瞭解什麼是java開發Netty框架使用與Netty的理論分析 問題及其優化。覺得收穫的話可以點個關注收藏轉發一波喔,謝謝大佬們支持

1、多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的

2、可以去百度搜索騰訊課堂圖靈學院的視頻來學習一下java架構實戰案例,還挺不錯的。

最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步。

3丶想了解學習以上課程內容可加群:658706010 驗證碼(06 必過)

帥的人都已經點讚了~.~

親要記得點贊喲~.~

java開發Netty框架使用與Netty的理論分析

相關推薦

推薦中...