TOP
0
0
【簡體曬書區】 單本79折,5本7折,活動好評延長至5/31,趕緊把握這一波!
Netty進階之路:跟著案例學Netty(簡體書)
滿額折
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)
Netty進階之路:跟著案例學Netty(簡體書)

Netty進階之路:跟著案例學Netty(簡體書)

人民幣定價:79 元
定  價:NT$ 474 元
優惠價:87412
領券後再享88折
海外經銷商無庫存,到貨日平均30天至45天
可得紅利積點:12 點
相關商品
商品簡介
作者簡介
目次

商品簡介

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

作者簡介

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

序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年國慶節于南京

目次

第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 Protob

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 412
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區