前言
讀者評價:
實際上,本書更像是以 netty 作為參考,闡述了構建一個高性能通信框架的主要考量(當然,也講了 netty 的一些坑);
第一,是線程模型,兩方面:
Netty 採用了傳統的 reactor 模式,利用 boss event loop group(acceptor) & worker event loop group(io worker)還處理 連接建立和 io 處理,之所以分開,是因為 io 協議的解析往往較為耗時,二者分開不僅實現業務隔離,更方便調優;同時,減少鎖競爭;採用了 event loop 模式,單個線程,異步化地處理各種事件和動作(網絡事件、讀寫事件、業務動作等等);一來減少競爭(串行化設計),二來,控制線程數,來防止因為線程過多造成系統過早進入【零界點】;第二,是減少鎖競爭,也是兩個方面:
netty 通過 channelid 來實現 io event loop 和業務線程池的綁定,減少了隊列層面的鎖競爭;串行化一個 eventloop 處理所有相關事件和動作,減少跨線程同步的必要;第三,內存優化,還是兩個方面
netty 的核心,是池化技術,基於 jemalloc(二叉樹 + 鍊表)的方式,管理內存池;利用 byte[] 的復用,來減少 gc 的壓力;netty 還是用了動態統計內存字節數(上一次收取,作為下一次分配的 hint)來減少因為緩衝區分配不足導致的 copy;第四,功能豐富度:
包括了空閒連接監測(ping-ping & ping-pong 模式的支持)、流量塑形等等;
最後,是編程模型,三個要素:
EventLoop、ChannelPipeline、ChannelHandler、三者共同實現了 Netty 的異步化和基於回調的編程模型;
作者如是說:
在4年多裡,很多讀者及Netty學習者向我諮詢Netty相關的問題,這些問題加起來多達上千個,通過對問題做匯總和分析,可以歸納為如下幾類:
Netty初學者,想了解學習Netty需要儲備哪些技能,掌握哪些知識點,有什麼學習技巧可以更快地掌握Netty。《Netty 權威指南》的讀者,學習完理論知識後,想在實際項目中使用,但是真正跟具體項目結合在一起解決實際問題時,又感覺比較棘手,不知道自己使用的方式是否是最優的,希望能夠多學一些案例實踐方面的知識,以便更好地在業務中使用Netty。在實際項目中遇到了問題的工程師,由於對Netty底層細節掌握得不紮實,無法有效地定位並解決問題。Netty的一個特點就是入門相對容易,但是真正掌握並精通是非常困難的,原因有如下幾個:
涉及的知識面比較廣。Netty作為一個高性能的NIO通信框架,涉及的知識點包括網絡通信、多線程編程、序列化和反序列化、異步和同步、SSL/TLS安全、內存池、HTTP等各種協議棧,這些知識點在Java 語言中本身就是難點和重點,如果對這些基礎知識掌握不紮實,是很難真正掌握好Netty的。調試比較困難。因為大量使用異步編程接口,以及消息處理過程中的各種線程切換,相比傳統同步代碼,Netty 代碼調試難度比較大。類繼承層次比較深,有些代碼很晦澀(例如內存池)。對於初學者而言,通過閱讀代碼來掌握Netty的難度還是很大的。代碼規模龐大。目前,Netty 的代碼規模已經非常龐大,特別是協議棧部分,提供了對HTTP/2、MQTT. WebSocket等各種協議的支持,相關代碼非常多。如果學習方式不當,抓不住重點,則全量閱讀Netty源碼,既耗時又很難吃透,很容易半途而廢。資料零散,缺乏與實踐相關的案例。網上Netty的各種資料非常多,但是都以理論講解為主,Netty 在各行業中的應用、問題定位技巧及案例實踐方面的資料很少,缺乏系統性的實踐總結,是Netty學習的一大痛點。寫作初衷:
在過去的幾年中,我利用業餘時間儘量幫大家答疑解惑,但實際上一個人很難回答所有讀者的問題,有些問題需要業務描述、故障場景、日誌,甚至要看源碼,而且需要反覆多次溝通來弄清楚問題,對於個人而言,時間和精力都很難得到保證。
於是我對手頭大家諮詢的問題做了歸類分析,結合我們自己的業務和平臺多年來在Netty實踐中積累的經驗,寫作了本書。本書以問題案例做牽引,通過對案例進行剖析,講解問題背後的原理,並結合Netty源碼分析,讓讀者能夠真正掌握Netty,在實際工作中少犯錯。在案例的分析過程中,還穿插講解了Netty 的問題定位思路、方法、技巧,以及解決問題使用的相關工具,「授人以魚不如授人以漁」,只有掌握了這些才能在項目中更放心地使用Netty。
內容特點:
書中的案例涵蓋了Netty 絕大多數常用的功能,以及容易犯錯的地方,具有通用性和普遍性。學習這些案例,對於在實際業務工作中用好Netty具有很大的幫助和啟發作用。另外,在講解Netty 框架本身的同時,也會穿插一些背景知識介紹,例如Java信號量和優雅停機機制、Java的NIO類庫、HTTP協議棧等。知識都是相互關聯的,很難在基礎知識不紮實的情況下掌握更高階的知識。
書籍目錄:
需要完整PDF版的朋友關注小編後私信「666」免費獲取
這份完整PDF版小編已經整理好了,需要的的朋友關注小編後私信「666」免費獲取