Netty源碼剖析與實戰(一):初識Netty

Netty的起源

     Netty項目起源於2004年,Java社區第一個基於事件驅動的網絡應用開發框架。Hadoop、Cassandra、Spark、Dubbo、gRPC、RocketMQ、Zookeeper、Spring5等都在使用Netty,是開發高性能Java服務器的必學框架。

學習Netty的基礎知識

  1. 協議知識:TCP的keeplive、粘包/半包現象、封幀等;
  2. 網絡編程知識:三種IO、三種Reactor模式;
  3. Java高階編程知識:對象池、堆外內存、鎖等知識

Netty是什麼

  1. 本質:網絡應用程序框架
  2. 實現:異步、事件驅動
  3. 特性:高性能、可維護、快速開發
  4. 用途:開發服務器和客戶端

Netty的架構

JDK NIO與Netty

  • Netty支持常用應用層協議;解決傳輸問題:粘包、半包現象;支持流量整形;完善的鍛鍊、Idle等異常處理;
  • 規避JDK NIO bug:經典的epoll bug:異常喚醒空轉導致CPU 100%;IP_TOS參數(IP包的優先級和QoS選項)使用時拋出異常;
  • API更友好更強大:JDK的NIO一些API不友好,功能薄弱,例如ByteBuffer > Netty's ByteBuf;其他的增強:ThreadLocal > Netty's FastThreadLocal;
  • 隔離變化、屏蔽細節:JDK NIO的實現變化:NIO > NIO2(AIO) > .....;屏蔽JDK NIO的實現細節;

爲什麼只選擇Netty

  • Apache Mina:Netty作者本人解答:Netty是Mina的重新打造版本,提高了擴展性並解決了一些已知的問題,Netty使用起來也比Mina簡單的更多;
  • Sun Grizzly:三少:用的少、文檔少、更新少;
  • Apple SwiftNIO或者ACE:其他語言,Java領域不會考慮;
  • Cindy:生命週期不長;
  • Tomcat、Jetty:與Netty不屬於同一個層次,有自己的通信層實現,且專門與Servlet容器實現的,通用性不高。

Netty的前塵往事

  • 4.0之前署於JBOSS,4.0之後獨立;
  • 2004年6月發佈,第一個基於事件驅動的應用網絡框架;2008年10月Netty3發佈;2013年7月Netty4發佈;2013年12月Netty5.Alpha1發佈;2015年11月廢棄Netty5(廢棄原因:複雜、沒有明顯的性能優勢、維護不過來)

Netty與Mina

  • 同一作者開發,處於維護階段
  • Alex爲Apache Directory開發網絡框架,看到Netty2後邀請作者合作開發,結合Netty便有了Mina
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章