發表於2024-12-21
★一個長期戰鬥在一綫的美團-大眾點評技術專傢
★詳細講述瞭分布式服務框架的底層實現細節
★清楚梳理瞭分布式服務框架周邊的知識點
★從零開始構建瞭一個分布式服務框架
★實戰操練的代碼透漏齣作者身經百戰的深厚功力
★技術原理和內部實現分析提升技術理解和洞察力
★目前企業真正使用微服務非常少,而使用分布式服務框架比較多,實現相對簡單,作者所在公司美團在分布式服務框架實現方麵具有豐富的經驗。
★《架構探險:從零開始寫分布式服務框架》能順利地帶領你走齣架構險境,讓你對分布式服務框架所涉及的技術瞭然於胸,並能閤理地利用這些技術,搭建符閤自身需求的分布式服務框架。
《架構探險:從零開始寫分布式服務框架》的初衷是希望把分布式服務框架的實現細節及分布式服務框架周邊的知識點梳理清楚,為那些對分布式服務框架感興趣的人打開一扇窗戶,降低獲取相關知識的門檻。所以《架構探險:從零開始寫分布式服務框架》圍繞實現分布式服務框架所需的知識點,進行瞭比較詳盡細緻的介紹。包括常見的RPC框架、常見的序列化/反序列化方案及選型、分布式服務框架服務的發布引入實現細節、軟負載實現、底層通信方案實現、服務注冊與發現實現、服務治理常見的功能等。通過對這些知識點的逐步講解,層層深入,最終完成一個可運行的分布式服務框架。
通過《架構探險:從零開始寫分布式服務框架》,讀者可以完整地瞭解實現一個分布式服務框架的所有技術細節和實現原理,希望對想瞭解分布式服務框架實現細節的讀者有所啓發和幫助。
李業兵
先後在支付寶運營支撐事業部、去哪兒網酒店事業部任職高級開發工程師。於2015年加入貓眼電影(原美團網旗下電影事業部),負責交易業務綫架構與開發工作。
擅長電商交易領域係統設計與架構,在電商交易領域係統架構設計方麵積纍瞭較為豐富的實踐經驗。
對高並發係統設計、服務化架構、互聯網中間件開發保持著濃厚的興趣。
隨著微服務的流行,支撐微服務的分布式服務框架成為大傢優先發展的重點。服務化的基本原理掌握起來相對比較容易,但是要從零構建一個分布式服務框架卻比較睏難,涉及通信、綫程並發、服務調度等。本書詳細講解瞭構建服務框架所需的各種技術及框架選型,手把手教初學者搭建一套完整的分布式服務框架,如果你想掌握分布式服務框架底層的技術細節,自己開發一套適閤本公司和領域的服務框架,本書是一個非常不錯的選擇!
——華為架構師,《分布式服務框架原理與實踐》《Netty木又威指南》作者李林鋒
簡潔明瞭的文字把技術介紹得深入淺齣,實戰操練的代碼透漏齣作者身經百戰的深厚功力,通過本書不僅可以快速全麵地瞭解和上手分布式服務框架開發技術,還能通過技術原理和內部實現的分析介紹,提升我們對技術的理解和洞察力。
——貓眼電影技術負責人陳清陽
基於服務調用相關知識,業界已産齣瞭不少技術書籍。本書汲取各傢之精華,不同技術層級的人通過不同的章節都能獲得極大的收獲。更為難能可貴的是,作者是一個長期戰鬥在工程一綫,一步一步成長起來的美團-大眾點評技術專傢,設計過大量的工程框架並主導開發實現,經受住瞭多種復雜業務形態的考驗。憑藉著作者本人多年的積纍,凝聚齣瞭書中豐富的示例和經驗總結。通過這些示例和經驗總結,內容逐漸深入,全方位揭示瞭服務間通信的各項技術關鍵點,能有效地幫助讀者從新手成長為專傢。
——美團點評高級技術專傢(原美團點評技術委員會委員)黃波
本書比較全麵地介紹瞭分布式係統開發的各方麵知識,循序漸進,實例代碼比較多,非常適閤初入分布式開發並且有Java開發經驗的人員參考學習。
——香格裏拉酒店集團副總裁(原去哪兒網高級係統架構師)孫立
其實我們都在架構中探險,或許自己目前正身陷險境,我們希望得到一本“寶典”,教會自己如何找到架構的成功捷徑。李業兵老師寫的這本《架構探險:從零開始寫分布式服務框架》就能順利地帶領我們走齣險境,讓我們對分布式服務框架所涉及的技術瞭然於胸,並能閤理地利用這些技術,搭建符閤自身需求的分布式服務框架。
——特贊科技CTO黃勇·
第1章 常用的RPC框架 1
1.1 RPC框架原理 1
1.2 RMI介紹 2
1.2.1 原生RMI代碼示例 3
1.2.2 RMI穿透防火牆 5
1.3 CXF/Axis2介紹 7
1.3.1 CXF介紹 7
1.3.2 Axis2介紹 14
1.4 Thrift介紹 21
1.4.1 Thrift工作原理介紹 23
1.4.2 Thrift IDL語法說明 26
1.4.3 基於Apache Thrift的Java版完整案例 28
1.4.4 基於Java注解的簡化實現 36
1.5 gRPC介紹 42
1.5.1 protobuf3語法介紹 43
1.5.2 gRPC使用示例 45
1.6 HTTP Client介紹 53
1.6.1 構建HttpClient對象 54
1.6.2 構建URI對象 55
1.6.3 構建請求對象(HttpGet、HttpPost) 56
1.6.4 HttpClient發起調用及獲取調用返迴結果 56
1.7 實現自己的RPC框架 61
1.8 RPC框架與分布式服務框架的區彆 68
1.9 本章小結 68
第2章 分布式服務框架總體架構與功能 69
2.1 麵嚮服務的體係架構(SOA) 69
2.1.1 麵嚮服務架構範式 69
2.1.2 服務拆分原則 71
2.2 分布式服務框架現實需求 72
2.3 分布式服務框架總體架構及所需的技術概述 72
2.4 本章小結 74
第3章 分布式服務框架序列化與反序列化實現 75
3.1 序列化原理及常用的序列化介紹 75
3.2 Java默認的序列化 77
3.3 XML序列化框架介紹 80
3.4 JSON序列化框架介紹 82
3.5 Hessian序列化框架介紹 87
3.6 protobuf序列化框架介紹 88
3.7 protostuff序列化框架介紹 93
3.8 Thrift序列化框架介紹 98
3.9 Avro序列化框架介紹 100
3.9.1 Avro介紹 100
3.9.2 Avro IDL語言介紹 101
3.9.3 Schema定義介紹 103
3.9.4 Maven配置及使用IDL與Schema自動生成代碼 103
3.9.5 Avro序列化/反序列化實現 105
3.10 JBoss Marshalling序列化框架介紹 110
3.11 序列化框架的選型 112
3.12 實現自己的序列化工具引擎 113
3.13 本章小結 118
第4章 實現分布式服務框架服務的發布與引入 119
4.1 Spring Framework框架概述 119
4.1.1 Spring Framework介紹 119
4.1.2 Spring Framework周邊生態項目介紹 121
4.2 FactoryBean的秘密 122
4.2.1 FactoryBean的作用及使用場景 123
4.2.2 FactoryBean實現原理及示例說明 124
4.3 Spring框架對於已有RPC框架集成的支持 127
4.3.1 Spring支持集成RPC框架介紹 127
4.3.2 基於RmiProxyFactoryBean 實現RMI與Spring的集成 128
4.3.3 基於HttpInvokerProxyFactoryBean實現HTTP Invoker與Spring的集成 131
4.3.4 基於HessianProxyFactoryBean實現Hessian與Spring的集成 133
4.4 實現自定義服務框架與Spring的集成 136
4.4.1 實現遠程服務的發布 136
4.4.2 實現遠程服務的引入 144
4.5 在Spring中定製自己的XML標簽 150
4.6 本章小結 158
第5章 分布式服務框架注冊中心 159
5.1 服務注冊中心介紹 159
5.2 ZooKeeper實現服務的注冊中心原理 161
5.2.1 ZooKeeper介紹 161
5.2.2 部署ZooKeeper 161
5.2.3 ZkClient使用介紹 164
5.2.4 ZooKeeper實現服務注冊中心 173
5.3 集成ZooKeeper實現自己的服務注冊與發現 175
5.3.1 服務注冊中心服務提供方 175
5.3.2 服務注冊中心服務消費方 176
5.3.3 服務注冊中心實現 178
5.4 本章小結 189
第6章 分布式服務框架底層通信實現 190
6.1 Java I/O模型及I/O類庫的進化 190
6.1.1 Linux下實現的I/O模型 190
6.1.2 Java語言實現的I/O模型 194
6.1.3 Java Classic I/O(Blocking I/O)介紹 194
6.1.4 Java Non-blocking I/O(NIO)介紹 211
6.1.5 NIO2及Asynchronous I/O介紹 233
6.2 Netty使用介紹 255
6.2.1 Netty開發入門 256
6.2.2 Netty粘包/半包問題解決 265
6.3 使用Netty構建服務框架底層通信 320
6.3.1 構建分布式服務框架Netty服務端 320
6.3.2 構建分布式服務框架服務調用端Netty客戶端 330
6.4 本章小結 347
第7章 分布式服務框架軟負載實現 348
7.1 軟負載的實現原理 348
7.2 負載均衡常用算法 349
7.2.1 軟負載隨機算法實現 349
7.2.2 軟負載加權隨機算法實現 350
7.2.3 軟負載輪詢算法實現 351
7.2.4 軟負載加權輪詢算法實現 352
7.2.5 軟負載源地址hash算法實現 354
7.3 實現自己的軟負載機製 355
7.4 軟負載在分布式服務框架中的應用 357
7.5 本章小結 361
第8章 分布式服務框架服務治理 362
8.1 服務治理介紹 362
8.2 服務治理的簡單實現 364
8.2.1 服務分組路由實現 364
8.2.2 簡單服務依賴關係分析實現 374
8.2.3 服務調用鏈路跟蹤實現原理 380
8.3 本章小結 380
附錄A 如何配置運行本書完成的分布式服務框架 381
7.2負載均衡常用算法
負載均衡常用算法主要有隨機、加權隨機、輪詢、加權輪詢、源地址hash等。
7.2.1軟負載隨機算法實現
隨機算法原理為:獲取服務列錶大小範圍內的隨機數,將該隨機數作為列錶索引,從服務提供列錶中獲取服務提供者。
為負載均衡策略算法定義接口如下:
publicinterfaceClusterStrategy{
publicProviderServiceselect(List
}
其中接口方法入參providerServices為服務提供者列錶。
軟負載隨機算法的實現過程如下。
importares.remoting.framework.cluster.ClusterStrategy;
importares.remoting.framework.model.ProviderService;
importorg.apache.commons.lang3.RandomUtils;
importjava.util.List;
publicclassRandomClusterStrategyImplimplementsClusterStrategy{
@Override
publicProviderServiceselect(List
intMAX_LEN=providerServices.size();
intindex=RandomUtils.nextInt(0,MAX_LEN-1);
returnproviderServices.get(index);
}
}
實現原理:獲得服務提供者列錶大小區間之間的隨機數,作為服務提供者列錶的索引來獲取服務。
7.2.2軟負載加權隨機算法實現
加權隨機算法在隨機算法的基礎上針對權重做瞭處理。軟負載加權隨機算法實現代碼如下。
importares.remoting.framework.cluster.ClusterStrategy;
importares.remoting.framework.model.ProviderService;
importcom.google.common.collect.Lists;
importorg.apache.commons.lang3.RandomUtils;
importjava.util.List;
publicclassWeightRandomClusterStrategyImplimplementsClusterStrategy{
@Override
publicProviderServiceselect(List
//存放加權後的服務提供者列錶
List
for(ProviderServiceprovider:providerServices){
intweight=provider.getWeight();
for(inti=0;i providerList.add(provider.copy()); } } intMAX_LEN=providerList.size(); intindex=RandomUtils.nextInt(0,MAX_LEN-1); returnproviderList.get(index); } } 實現原理:首先根據加權數放大服務提供者列錶,比如服務提供者A加權數為3,放大之後變為A,A,A,存放在新的服務提供者列錶,然後對新的服務提供者列錶應用隨機算法。 7.2.3軟負載輪詢算法實現 輪詢算法,將服務調用請求按順序輪流分配到服務提供者後端服務器上,均衡對待每一颱服務提供者機器。軟負載輪詢算法實現代碼如下。 importares.remoting.framework.cluster.ClusterStrategy; importares.remoting.framework.model.ProviderService; importjava.util.List; importjava.util.concurrent.TimeUnit; importjava.util.concurrent.locks.Lock; importjava.util.concurrent.locks.ReentrantLock; publicclassPollingClusterStrategyImplimplementsClusterStrategy{ //計數器 privateintindex=0; privateLocklock=newReentrantLock(); @Override publicProviderServiceselect(List ProviderServiceservice=null; try{ lock.tryLock(10,TimeUnit.MILLISECONDS); //若計數大於服務提供者個數,將計數器歸0 if(index>=providerServices.size()){ index=0; } service=providerServices.get(index); index++; }catch(InterruptedExceptione){ e.printStackTrace(); }finally{ lock.unlock(); } //兜底,保證程序健壯性,若未取到服務,則直接取第1個 if(service==null){ service=providerServices.get(0); } returnservice; } } 實現原理:依次按順序獲取服務提供者列錶中的數據,並使用計數器記錄使用過的數據索引,若數據索引到最後一個數據,則計數器歸零,重新開始新的循環。 ……
推薦序
2015年,我寫瞭自己 架構探險:從零開始寫分布式服務框架 下載 mobi epub pdf txt 電子書 格式
架構探險:從零開始寫分布式服務框架 下載 mobi pdf epub txt 電子書 格式 2024
架構探險:從零開始寫分布式服務框架 下載 mobi epub pdf 電子書好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好
評分幫彆個買的,自個看書就乏
評分好久沒搞活動瞭,等瞭好久,一下子買瞭23本。雖然沒看,但是看著包著塑料膜,還是很精緻的。應該挺厲害的。
評分自動化測試修煉寶典不錯哦推薦
評分書的內容很不錯,期待自己能掌握。
評分買瞭很多書、京東618很給力~
評分書不錯,贊一個!書不錯,贊一個!書不錯,贊一個!
評分基本沒有認真評論過,不知道浪費瞭多少積分,這個福利真的很不錯,妥妥每次都寫100多字,這是第N次在網上買東西瞭,棒棒棒,好厲害好厲害,東西便宜質量好,物美價廉,買的放心,用的放心,開心,感覺都買上癮瞭,買買買根本停不下來,東西多而且又全,劃算,方便,實惠,包裝也好,沒有任何損壞,會一直支持下去的。足不齣戶就可以買到所有日常生活需要的食物、E 用品及生鮮水果,簡直是太閤適瞭來基本沒有認真評論過,不知道浪費瞭多少積分,這個福利真的很不錯,值得購買,特意分享給大傢。
評分這是彆人推薦的嗯還沒看,希望啊,還不錯。
架構探險:從零開始寫分布式服務框架 mobi epub pdf txt 電子書 格式下載 2024