Netty是什麼

本文基於Netty4.1展開介紹相關理論模型,使用場景,基本組件、整體架構

Netty簡介

Netty是 一個異步事件驅動的網絡應用程序框架,用於快速開發可維護的高性能協議服務器和客戶端。

JDK原生NIO程序的問題

JDK原生也有一套網絡應用程序API,但是存在一系列問題,主要如下:

  • NIO的類庫和API繁雜,使用麻煩,你需要熟練掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等
  • 需要具備其它的額外技能做鋪墊,例如熟悉Java多線程編程,因爲NIO編程涉及到Reactor模式,你必須對多線程和網路編程非常熟悉,才能編寫出高質量的NIO程序
  • 可靠性能力補齊,開發工作量和難度都非常大。例如客戶端面臨斷連重連、網絡閃斷、半包讀寫、失敗緩存、網絡擁塞和異常碼流的處理等等,NIO編程的特點是功能開發相對容易,但是可靠性能力補齊工作量和難度都非常大
  • JDK NIO的BUG,例如臭名昭著的epoll bug,它會導致Selector空輪詢,最終導致CPU 100%。官方聲稱在JDK1.6版本的update18修復了該問題,但是直到JDK1.7版本該問題仍舊存在,只不過該bug發生概率降低了一些而已,它並沒有被根本解決

Netty的特點

Netty的對JDK自帶的NIO的API進行封裝,解決上述問題,主要特點有:

  • 設計優雅
    適用於各種傳輸類型的統一API - 阻塞和非阻塞Socket
    基於靈活且可擴展的事件模型,可以清晰地分離關注點
    高度可定製的線程模型 - 單線程,一個或多個線程池
    真正的無連接數據報套接字支持(自3.1起)
  • 使用方便
    詳細記錄的Javadoc,用戶指南和示例
    沒有其他依賴項,JDK 5(Netty 3.x)或6(Netty 4.x)就足夠了
  • 高性能
    吞吐量更高,延遲更低
    減少資源消耗
    最小化不必要的內存複製
  • 安全
    完整的SSL / TLS和StartTLS支持
  • 社區活躍,不斷更新
    社區活躍,版本迭代週期短,發現的BUG可以被及時修復,同時,更多的新功能會被加入

Netty常見使用場景

  • 互聯網行業
    在分佈式系統中,各個節點之間需要遠程服務調用,高性能的RPC框架必不可少,Netty作爲異步高新能的通信框架,往往作爲基礎通信組件被這些RPC框架使用。
    典型的應用有:阿里分佈式服務框架Dubbo的RPC框架使用Dubbo協議進行節點間通信,Dubbo協議默認使用Netty作爲基礎通信組件,用於實現各進程節點之間的內部通信。
  • 遊戲行業
    無論是手遊服務端還是大型的網絡遊戲,Java語言得到了越來越廣泛的應用。Netty作爲高性能的基礎通信組件,它本身提供了TCP/UDP和HTTP協議棧。
    非常方便定製和開發私有協議棧,賬號登錄服務器,地圖服務器之間可以方便的通過Netty進行高性能的通信
  • 大數據領域
    經典的Hadoop的高性能通信和序列化組件Avro的RPC框架,默認採用Netty進行跨界點通信,它的Netty Service基於Netty框架二次封裝實現

技術討論 & 疑問建議 & 個人博客

版權聲明: 本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 許可協議,轉載請註明出處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章