-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:李林鋒類別:1. -> 程式設計 -> JAVA
譯者:
出版社:電子工業出版社Netty進階之路:跟著案例學Netty 3dWoo書號: 50201
詢問書籍請說出此書號!

缺書
NT售價: 395

出版日:11/1/2018
頁數:340
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121352621
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

序1


隨著近幾年的快速發展,移動互聯網系統的復雜度快速上升。為了滿足業務快速迭代的需求,同時提高系統的可靠性和可維護性,越來越多的大型系統后臺開始采用微服務架構。以華為應用市場為例,目前后臺微服務數量達上百個,服務器多達數千臺。服務器數量的快速增加,必然導致后臺系統復雜度的快速增加,從而推動后臺技術架構的持續演進。
在單體系統中,一個請求通常只涉及一個部件。但微服務化后,一個請求可能涉及數個微服務的配合。傳統的后臺服務通常采用同步阻塞調用方式,一個請求獨占一個線程,只有在請求處理完成后,線程才能被釋放。如果一個請求涉及多個微服務之間的調用,那么每個微服務都需要一個專門的連接和線程來處理這個請求。而系統的線程數和連接數都是有限的。當系統調用關系越來越復雜,一個很小的問題(如網絡抖動、突發請求或GC引起的延時增加),都可能導致線程阻塞,引發雪崩,導致整個系統不可用。另一方面,同步阻塞的方式很容易導致系統的資源利用率降低。因此,業界領先的互聯網公司,都已經或者正在切換到全棧異步方式。
相比同步I/O簡單直接的編程模型,異步I/O在編程模型上有較大的差異,對開發人員也有更高的要求,同時問題的定位也更為復雜。Netty是當前業界應用最廣泛的Java開源異步框架。Netty框架能顯著降低異步開發的門檻,使開發人員聚焦業務邏輯,免于處理復雜的底層通信機制和線程模型,從而能夠簡單和快速地開發異步應用。時至今日,越來越多的國內公司開始使用Netty來構建應用,使用Netty的開發者也日益增加。
隨著Netty應用的不斷深入,大家在使用過程中也會遇到各種各樣的問題。相比Netty的火熱,市場上Netty相關的書籍卻很少。作者幾年前出版的著作《Netty權威指南》是國內第一本系統化講解Netty原理和架構的書籍,在市場上取得了良好的反響。《Netty進階之路:跟著案例學Netty》是作者在Netty方面的又一力作。該書從一個個典型的問題出發,讓讀者能夠帶著問題來展開學習,并通過代碼解讀、原理分析和問題總結,對每個問題抽絲剝繭地深入解析;同時,能夠通過一個問題,將相關領域的知識理解透徹,達到舉一反三的效果,進而實現對Netty的系統性學習與理解。
李林鋒在電信軟件行業有著近十年的異步和服務化方面的開發和架構設計經驗,是華為公司該領域的專家。他從2017年開始負責華為應用市場在異步和微服務化方面的工作,主導了華為應用市場后臺的異步化和微服務化演進,將電信軟件嚴謹、穩定、高性能的優勢,與移動互聯網海量用戶、高并發場景結合起來,顯著提升了華為應用市場的可用性和性能。本書凝結了作者多年來在異步化工作方面的經驗,將成為希望精通Netty開發的讀者的重要參考書。

華為應用市場總架構師 劉連喜

序2


隨著互聯網對各行各業的滲透,“連接”便成了我們看到的所有美好應用背后的基石。人、系統、物三者之間無所不在的連接讓我們甚至感覺這世界已經成為了一個整體。細數一些計算機領域的熱門技術,例如云計算、微服務、物聯網等,其背后的核心還是連接。在這樣一個背景下,掌握Netty可以算得上是一個開發人員最重要的技能。
就像碼農的學名其實是計算機工程師一樣,計算機其實是一個工程學科,是一個天生看重實踐的學科。在現在的環境里,各種技術文檔在網上一抓一大把,但是仍然有一些東西很難得到,那就是你需要填的那些坑。
李林鋒長期工作在技術一線,構建的是壓力最大的系統,保證的是要求最高的服務,解決的是詭異難解的問題。而難能可貴的是,他把他自己填過的那些坑都詳盡地記錄了下來,不僅提供思路,還分析原理,讓所有問題都無所遁形。
《Netty進階之路:跟著案例學Netty》就是能夠助人出坑的干貨。
佛教的修行次第是“信,解,行,證”。李林鋒一直以來對技術的熱情、“知行合一”的行事方式和對問題刨根問底的工作態度非常難得,相信通過這本書也可以讓你由“解”入“行”,他趟過那些大坑的經驗也一定會助你早日在Netty學習的路上實現“自證”。

華為云高級架構師 張琦


前  言


自2014年《Netty權威指南》出版后,我在技術網站上相繼寫了一些Netty專題文章,涵蓋性能、線程模型、安全性等知識點,受到很多讀者的喜愛。在4年多里,很多讀者及Netty學習者向我咨詢Netty相關的問題,這些問題加起來多達上千個,通過對問題做匯總和分析,可以歸納為如下幾類:
(1)Netty初學者,想了解學習Netty需要儲備哪些技能,掌握哪些知識點,有什么學習技巧可以更快地掌握Netty。
(2)《Netty權威指南》的讀者,學習完理論知識后,想在實際項目中使用,但是真正跟具體項目結合在一起解決實際問題時,又感覺比較棘手,不知道自己使用的方式是否是最優的,希望能夠多學一些案例實踐方面的知識,以便更好地在業務中使用Netty。
(3)在實際項目中遇到了問題的工程師,由于對Netty底層細節掌握得不扎實,無法有效地定位并解決問題。
Netty的一個特點就是入門相對容易,但是真正掌握并精通是非常困難的,原因有如下幾個:
(1)涉及的知識面比較廣。Netty作為一個高性能的NIO通信框架,涉及的知識點包括網絡通信、多線程編程、序列化和反序列化、異步和同步、SSL/TLS安全、內存池、HTTP等各種協議棧,這些知識點在Java語言中本身就是難點和重點,如果對這些基礎知識掌握不扎實,是很難真正掌握好Netty的。
(2)調試比較困難。因為大量使用異步編程接口,以及消息處理過程中的各種線程切換,相比傳統同步代碼,Netty代碼調試難度比較大。
(3)類繼承層次比較深,有些代碼很晦澀(例如內存池)。對于初學者而言,通過閱讀代碼來掌握Netty的難度還是很大的。
(4)代碼規模龐大。目前,Netty的代碼規模已經非常龐大,特別是協議棧部分,提供了對HTTP/2、MQTT、WebSocket等各種協議的支持,相關代碼非常多。如果學習方式不當,抓不住重點,則全量閱讀Netty源碼,既耗時又很難吃透,很容易半途而廢。
(5)資料零散,缺乏與實踐相關的案例。網上Netty的各種資料非常多,但是都以理論講解為主,Netty在各行業中的應用、問題定位技巧及案例實踐方面的資料很少,缺乏系統性的實踐總結,是Netty學習的一大痛點。
在過去的幾年中,我利用業余時間盡量幫大家答疑解惑,但實際上一個人很難回答所有讀者的問題,有些問題需要業務描述、故障場景、日志,甚至要看源碼,而且需要反復多次溝通來弄清楚問題,對于個人而言,時間和精力都很難得到保證。另外,一些比較常見的問題,例如服務端接收不到客戶端的消息,定位手段是可以固化下來的。很多讀者也希望我能寫一本Netty實踐和案例方面的書,通過案例講解讓大家更好地在項目中使用Netty,解決遇到的實際問題。
于是我對手頭大家咨詢的問題做了歸類分析,結合我們自己的業務和平臺多年來在Netty實踐中積累的經驗,寫作了本書。本書以問題案例做牽引,通過對案例進行剖析,講解問題背后的原理,并結合Netty源碼分析,讓讀者能夠真正掌握Netty,在實際工作中少犯錯。在案例的分析過程中,還穿插講解了Netty的問題定位思路、方法、技巧,以及解決問題使用的相關工具,“授人以魚不如授人以漁”,只有掌握了這些才能在項目中更放心地使用Netty。
本書的內容分類主要包括:
(1)Netty的啟動和停止
(2)Netty的內存
(3)Netty的并發多線程
(4)Netty的性能
(5)Netty的可靠性
(6)Netty的安全
(7)Netty的實踐
(8)Netty的學習
書中的案例涵蓋了Netty絕大多數常用的功能,以及容易犯錯的地方,具有通用性和普遍性。學習這些案例,對于在實際業務工作中用好Netty具有很大的幫助和啟發作用。另外,在講解Netty框架本身的同時,也會穿插一些背景知識介紹,例如Java信號量和優雅停機機制、Java的NIO類庫、HTTP協議棧等。知識都是相互關聯的,很難在基礎知識不扎實的情況下掌握更高階的知識。
通過本書的學習,希望廣大Netty初學者和愛好者能夠更快、更好地進入高級階段,在項目中用好Netty,為業務創造更多的價值。
盡管我也有技術潔癖,希望諸事完美,但是由于Netty代碼的龐雜和涉及的知識點太多,以及受限于我個人的經歷和水平,很難在一本書里同時滿足所有讀者的訴求。本書如有遺漏或者錯誤,懇請大家及時批評和指正,如果大家有好的建議或者想法,也可以聯系我。聯系方式如下:
微信:Nettying
新浪微博:Nettying
能夠完成本書要感謝很多人,首先感謝華為公司給我提供了足夠大的舞臺,感謝華為消費者云服務應用市場團隊領導張凡、葉文武、劉連喜等,以及這些年與我在平臺和業務團隊一起戰斗過的架構師、設計師、開發工程師、測試工程師和資料員等同事。
其次感謝我的家人,你們一直在背后默默地支持我。感謝參與本書編輯的英姐、美工及其他人員,你們的辛苦換來了本書的如期上市。
最后感謝所有《Netty權威指南》和《分布式服務框架原理與實踐》的讀者,你們的支持和鼓勵是我寫作本書的動力源泉。

李林鋒
2018年國慶節于南京
內容簡介:

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.2.4 Netty多線程最佳實踐 137
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 Protobuf簡介 243
14.4.2 消息的序列化原理和源碼分析 244
14.4.3 消息的反序列化原理和源碼分析 245
14.5 gRPC線程模型 246
14.5.1 服務端線程模型 246
14.5.2 客戶端線程模型 247
14.5.3 線程模型總結 248
14.6 總結 249
第15章 Netty事件觸發策略使用不當案例 250
15.1 channelReadComplete方法被調用多次問題 250
15.1.1 ChannelHandler調用問題 250
15.1.2 生產環境問題模擬重現 252
15.2 ChannelHandler使用的一些誤區總結 255
15.2.1 channelReadComplete方法調用 255
15.2.2 ChannelHandler職責鏈調用 257
15.3 總結 258
第16章 Netty流量整形應用案例 259
16.1 Netty流量整形功能 259
16.1.1 通用的流量整形功能簡介 260
16.1.2 Netty流量整形功能簡介 260
16.2 Netty流量整形應用 261
16.2.1 流量整形示例代碼 261
16.2.2 流量整形功能測試 263
16.3 Netty流量整形工作機制 264
16.3.1 流量整形工作原理和源碼分析 264
16.3.2 并發編程在流量整形中的應用 271
16.3.3 使用流量整形的一些注意事項總結 274
16.4 總結 278
第17章 Netty SSL應用案例 279
17.1 Netty SSL功能簡介 279
17.1.1 SSL安全特性 280
17.1.2 Netty SSL實現機制 281
17.2 Netty客戶端SSL握手超時問題 282
17.2.1 握手超時原因定位 282
17.2.2 Netty SSL握手問題定位技巧 283
17.3 SSL握手性能問題 284
17.3.1 SSL握手性能熱點分析 284
17.3.2 緩存和對象池 285
17.4 SSL事件監聽機制 286
17.4.1 握手成功事件 286
17.4.2 SSL連接關閉事件 286
17.5 總結 287
第18章 Netty HTTPS服務端高并發宕機案例 288
18.1 Netty HTTPS服務端宕機問題 288
18.1.1 客戶端大量超時 288
18.1.2 服務端內存泄漏原因分析 289
18.1.3 NioSocketChannel泄漏原因探究 290
18.1.4 高并發場景下缺失的可靠性保護 292
18.2 功能層面的可靠性優化 294
18.2.1 Netty HTTPS服務端可靠性優化 295
18.2.2 HTTPS客戶端優化 296
18.3 架構層面的可靠性優化 297
18.3.1 端到端架構問題剖析 297
18.3.2 HTTP Client切換到NIO 298
18.3.3 同步RPC調用切換到異步調用 299
18.3.4 協議升級到HTTP/2 303
18.4 總結 307
第19章 MQTT服務接入超時案例 308
19.1 MQTT服務接入超時問題 308
19.1.1 生產環境問題現象 308
19.1.2 連接數膨脹原因分析 309
19.1.3 無效連接的關閉策略 309
19.1.4 問題總結 310
19.2 基于Netty的可靠性設計 311
19.2.1 業務定制I/O異常 311
19.2.2 鏈路的有效性檢測 312
19.2.3 內存保護 313
19.3 總結 315
第20章 Netty實踐總結 316
20.1 Netty學習策略 316
20.1.1 入門知識準備 316
20.1.2 Netty入門學習 319
20.1.3 項目實踐 319
20.1.4 Netty源碼閱讀策略 319
20.2 Netty故障定位技巧 320
20.2.1 接收不到消息 320
20.2.2 內存泄漏 321
20.2.3 性能問題 322
20.3 總結 322
序: