Netty 進階之路 : 跟著案例學 Netty

Netty 進階之路 : 跟著案例學 Netty

作者: 李林鋒
出版社: 電子工業
出版在: 2018-11-01
ISBN-13: 9787121352621
ISBN-10: 7121352621
裝訂格式: 其他
總頁數: 340 頁





內容描述


Netty將Java NIO接口封裝,提供了全異步編程方式,是各大Java項目的網絡應用開發必備神器。本書作者是國內Netty技術的先行者和佈道者,本書是他繼《Netty權威指南》之後的又一力作。在本書中,作者將在過去幾年實踐中遇到的問題,以及Netty學習者咨詢的相關問題,進行了歸納和總結,以問題案例做牽引,通過對案例進行剖析,講解問題背後的原理,並結合Netty源碼分析,讓讀者能夠真正掌握Netty,在實際工作中少犯錯。本書中的案例涵蓋了Netty的啟動和停止、內存、並發多線程、性能、可靠性、安全等方面,囊括了Netty絕大多數常用的功能及容易讓人犯錯的地方。在案例的分析過程中,還穿插講解了Netty的問題定位思路、方法、技巧,以及解決問題使用的相關工具,對讀者在實際工作中用好Netty具有很大的幫助和啟發作用。本書適合架構師、設計師、開發工程師、測試工程師,以及對Java NIO框架、Netty感興趣的其他相關人士閱讀。


目錄大綱


第1章Netty服務端意外退出案例1 
1.1 Netty服務端意外退出問題1 
1.1.1 Java Daemon線程簡介2 
1.1.2 Netty服務端啟動原理4 
1.1.3如何防止Netty服務端意外退出6 
1.1.4實際項目中的優化策略8 
1.2 Netty優雅退出機制9 
1.2.1 Java優雅退出機制10 
1.2.2 Java優雅退出的注意點12 
1.2.3 Netty優雅退出機制14 
1.2.4 Netty優雅退出原理和源碼分析15 
1.2 .5 Netty優雅退出的一些誤區20 
1.3總結21 
第2章Netty客戶端連接池資源洩漏案例22 
2.1 Netty連接池資源洩漏問題22 
2.1.1連接池創建代碼23 
2.1.2內存溢出和線程膨脹23 
2.1 .3錯用NIO編程模式25 
2.1.4正確的連接池創建方式26 
2.1.5並發安全和資源釋放28 
2.2 Netty客戶端創建機制29 
2.2.1 Java NIO客戶端創建原理分析29 
2.2.2 Netty客戶端創建原理分析32 
2.2.3 Bootstrap工具類源碼分析34 
2.3總結36
第3章Netty內存池洩漏疑雲案例37 
3.1 Netty內存池洩漏問題37 
3.1.1路由轉發服務代碼38 
3.1.2響應消息內存釋放玄機39 
3.1.3採集堆內存快照分析42 
3.1.4 ByteBuf申請和釋放的理解誤區45 
3.2 Netty內存池工作機制48 
3.2.1內存池的性能優勢48 
3.2.2內存池工作原理分析51 
3.2.3內存池核心代碼分析54 
3.3總結58 
第4章ByteBuf故障排查案例59 
4.1 HTTP協議棧ByteBuf使用問題59 
4.1.1 HTTP響應Body獲取異常59 
4.1.2 ByteBuf非法引用問題63 
4.1.3 ByteBuf使用注意事項66 
4.2 Netty ByteBuf實現機制67 
4.2.1 Java原生ByteBuffer的局限性67 
4.2. 2 Netty ByteBuf工作原理分析67 
4.2.3 ByteBuf引用計數器工作原理和源碼分析70 
4.3總結73 
第5章Netty發送隊列積壓導致內存洩漏案例74 
5.1 Netty發送隊列積壓案例74 
5.1.1高並發故障場景74 
5.1 .2內存洩漏原因分析76
5.1.3如何防止發送隊列積壓78 
5.1.4其他可能導致發送隊列積壓的因素80 
5.2 Netty消息發送工作機制82 
5.2.1 WriteAndFlushTask原理和源碼分析83 
5.2.2 ChannelOutboundBuffer原理和源碼分析86 
5.2.3消息發送源碼分析88 
5.2.4消息發送高低水位控制94 
5.3總結95 
第6章API網關高並發壓測性能波動案例96 
6.1高並發壓測性能波動問題96 
6.1.1故障場景模擬96 
6.1.2性能波動原因定位98 
6.1.3主動內存洩漏定位法101 
6.1.4網關類產品的優化建議102 
6.2 Netty消息接入內存申請機制102 
6.2.1消息接入的內存分配原理和源碼分析102 
6.2.2 Netty ByteBuf的動態擴容原理和源碼分析107 
6.3總結108 
第7章Netty ChannelHandler並發安全案例109 
7.1 Netty ChannelHandler並發安全問題109 
7.1.1串行執行的ChannelHandler 110 
7.1.2跨鏈路共享的ChannelHandler 114 
7.1.3 ChannelHandler的並發陷阱116
7.2 Netty ChannelHandler工作機制118 
7.2.1職責鏈ChannelPipeline原理和源碼分析118 
7.2.2用戶自定義Event原理和源碼分析122 
7.3總結123 
第8章車聯網服務端接收不到車載終端消息案例124 
8.1車聯網服務端接收不到車載終端消息問題124 
8.1.1故障現象125 
8.1.2故障期線程堆棧快照分析126 
8.1.3 NioEventLoop線程防掛死策略128 
8.2 NioEventLoop線程工作機制129 
8.2.1 I/O讀寫操作原理和源碼分析130 
8.2.2異步任務執行原理和源碼分析133 
8.2.3定時任務執行原理和源碼分析135 
…… 
8.3總結137 
第9章Netty 3.X版本升級案例139 
9.1 Netty 3.X的版本升級背景139 
9.1.1被迫升級場景140 
9.1.2升級不當遭遇各種問題140 
9.2版本升級後數據被篡改問題141 
9.2.1數據篡改原因分析142 
9.2.2問題總結143 
9.3升級後上下文丟失問題143 
9.3.1上下文丟失原因分析144 
9.3.2依賴第三方線程模型的思考144
9.4升級後應用遭遇性能下降問題145 
9.4.1性能下降原因分析145 
9.4.2性能優化建議146 
9.5 Netty線程模型變更分析147 
9.5.1 Netty 3.X版本線程模型147 
9.5.2 Netty 4.X版本線程模型149 
9.5.3線程模型變化點源碼分析150 
9.5.4線程模型變化總結152 
9.6總結154 
第10章Netty並發失效導致性能下降案例155 
10.1業務ChannelHandler無法並發執行問題155 
10.1.1服務端並發設計相關代碼分析155 
10.1.2無法並行執行的EventExecutorGroup 159 
10.1.3並行執行優化策略和結果161 
10.2 Netty DefaultEventExecutor工作機制163 
10.2.1 DefaultEventExecutor原理和源碼分析164 
10.2.2業務線程池優化策略165 
10.2.3 Netty線程綁定機制原理和源碼分析168 
10.3總結170 
第11章IoT百萬長連接性能調優案例171 
11.1海量長連接接入面臨的挑戰171 
11.1.1 IoT設備接入特點172 
11.1.2 IoT服務端性能優化場景172
11.1.3服務端面臨的性能挑戰172 
11.2智能家居內存洩漏問題173 
11.2.1服務端內存洩漏原因定位173 
11.2.2問題背後的一些思考174 
11.3操作系統參數調優174 
11.3.1文件描述符175 
11.3.2 TCP/IP相關參數175 
11.3.3多網卡隊列和軟中斷177 
11.4 Netty性能調優177 
11.4.1設置合理的線程數177 
11.4.2心跳優化180 
11.4.3接收和發送緩衝區調優183 
11.4.4合理使用內存池184 
11.4.5防止I/O線程被意外阻塞185 
11.4.6 I/O線程和業務線程分離187 
11.4.7針對端側並發連接數的流控187 
11.5 JVM相關性能優化189 
11.5.1 GC調優189 
11.5.2其他優化手段193 
11.6總結193 
第12章靜態檢查修改不當引起性能下降案例195 
12.1 Edge Service性能嚴重下降問題195 
12.1.1 Edge Service熱點代碼分析195 
12.1. 2靜態檢查問題不是簡單的一改了之197 
12.1.3問題反思和改進200 
12.2克隆和淺拷貝201
12.2.1淺拷貝存在的問題201 
12.2.2 Netty的對象拷貝實現策略203 
12.3總結204 
第13章Netty性能統計誤區案例205 
13.1時延毛刺排查相關問題205 
13.1.1時延毛刺問題初步分析205 
13.1 .2服務調用鏈改進207 
13.1.3都是同步思維惹的禍208 
13.1.4正確的消息發送速度性能統計策略209 
13.1.5常見的消息發送性能統計誤區212 
13.2 Netty關鍵性能指標採集策略212 
13.2 .1 Netty I/O線程池性能指標213 
13.2.2 Netty發送隊列積壓消息數214 
13.2.3 Netty消息讀取速度性能統計215 
13.3總結215 
第14章gRPC的Netty HTTP/2實踐案例216 
14.1 gRPC基礎入門216 
14.1.1 RPC框架簡介216 
14.1.2當前主流的RPC框架218 
14.1.3 gRPC框架特點218 
14.1.4為什麼選擇HTTP/2 219 
14.2 gRPC Netty HTTP/2服務端工作機制220 
14.2.1 Netty HTTP /2服務端創建原理和源碼分析220 
14.2.2服務端接收HTTP/2請求消息原理和源碼分析224
14.2.3服務端發送HTTP/2響應消息原理和源碼分析231 
14.3 gRPC Netty HTTP/2客戶端工作機制234 
14.3.1 Netty HTTP/2客戶端創建原理和源碼分析235 
14.3.2客戶端發送HTTP/ 2請求消息原理和源碼分析238 
14.3.3客戶端接收HTTP/2響應消息原理和源碼分析242 
14.4 gRPC消息序列化機制243 
14.4.1 Google Protob


作者介紹


李林鋒
10年Java NIO通信框架、平台中間件架構設計和開發經驗。
目前在華為終端應用市場負責業務微服務化、雲化、全球化等相關設計和開發工作。
《Netty權威指南》和《分佈式服務框架原理與實踐》作者。




相關書籍

Spring Boot 從入門到實戰

作者 解承凱

2018-11-01

Learning Akka (Paperback)

作者 Jason Goodwin

2018-11-01

Java Software Solutions: Foundations of Program Design, 7/e (Paperback)

作者 John Lewis William Loftus

2018-11-01