架構探險:從零開始寫分布式服務框架
  • 推薦3
  • 收藏18
  • 瀏覽6.0K

架構探險:從零開始寫分布式服務框架

李業兵 , 李業兵 (作者)  董英 (責任編輯)

  • 書  號:978-7-121-31959-4
  • 出版日期:2017-07-31
  • 頁  數:400
  • 開  本:16(185*235)
  • 出版狀態:圖書立項
  • 維護人:董英
分布式服務框架目前已經是互聯網公司實現SOA服務化架構的必備基礎設施,對于一般的開發而言,自己要獨立實現一個分布式服務框架,還是有相當的難度的。本書圍繞如何從零開始實現一個可用的分布式服務框架,介紹了實現分布式服務框架所需技術的方方面面。對于從事開發行業的程序員有很大的現實價值。能夠從中學習到很多的實用技術,了解并掌握實現分布式服務框架所需的思想以及技術。
一線技術專家全方位解析分布式服務框架底層技術細節,
手把手教你搭建一個完整的符合自身需求的分布式服務框架
李業兵

先后在支付寶運營支撐事業部、去哪兒網酒店事業部任職高級開發工程師。于2015年加入貓眼電影(原美團網旗下電影事業部),負責交易業務線架構與開發工作。

擅長電商交易領域系統設計與架構,在電商交易領域系統架構設計方面積累了較為豐富的實踐經驗。

對高并發系統設計、服務化架構、互聯網中間件開發保持著濃厚的興趣。
緣起
隨著互聯網浪潮風起云涌,互聯網行業發展非常迅猛。此時將所有業務集中實現在一個應用上的做法已經滿足不了公司及業務發展的需要了?;诿嫦蚍阵w系架構來構建系統成了互聯網架構師構建系統的不二選擇,而面向服務體系架構能夠落地的基礎技術之一就是分布式服務框架。
要完全掌握分布式服務框架存在一定的技術門檻,市面上不乏一些非常出色的開源分布式服務框架。但對于新手而言,直接通過閱讀源碼來掌握分布式服務框架原理也并不是一件特別容易的事。
現在市面上也有專門的書籍來介紹分布式服務框架,但大都是從理論和方法論的角度來描述其原理的。有句俗語:“有些事,難不難,做了才知道;有些山,陡不陡,爬了才知道?!睂τ诔绦騿T來說,總是想通過具體的代碼來了解一個分布式服務框架的實現細節,這樣更為直觀和深刻。為了幫助部分想了解分布式服務框架內部實現原理,甚至想自己實現一個分布式服務框架的讀者,我寫了這樣一本介紹如何從零開始寫一個分布式服務框架的書,希望能夠對想了解分布式服務框架實現細節的讀者有所幫助。
內容大綱
全書一共8章。按照分布式服務框架的各個組成部分及各個組成部分所需的知識點或者這些知識點適當的延伸來組織每一章節的內容。建議讀者按照全書章節的組織順序來閱讀。
第1章主要介紹日常開發常用的RPC框架,包括RMI、CXF、Axis2、Thrift、gRPC、HttpClient,并就每一種RPC框架給出了實際可運行的代碼示例,以及自己實現的一個簡易版的RPC框架。
第2章對于基于服務體系架構做了介紹,對分布式服務框架總體架構及實現分布式服務框架所需的技術做了概要性介紹。
第3章介紹9種序列化/反序列化方案,每一種序列化/反序列化方案均給出了相應的代碼示例,并給出了具體的選型建議。同時,將這9種序列化/反序列化實現集成在一起,實現了可配置化的序列化/反序列化工具引擎,最終整合在分布式服務框架實現內部。
第4章對Spring做了概要性介紹。有針對性地對FactoryBean周邊知識及如何使用FactoryBean實現分布式服務的發布和引入做了詳細介紹并給出代碼實現。
第5章介紹ZooKeeper常用知識及如何使用ZooKeeper實現服務的注冊與發現,并給出了具體的代碼實現。
第6章圍繞系統之間底層通信相關的知識點來組織,從Java I/O 體系(阻塞I/O、NIO、NIO2)到Netty相關知識均做了詳細介紹。最后就使用Netty實現分布式服務框架底層通信給出了代碼實現。
第7章介紹常用的軟負載算法,并針對每一種算法給出了代碼實現。同時將實現的多種軟負載算法集成可配置的軟負載工具引擎,最終整合在分布式服務框架實現內部。
第8章介紹分布式服務框架服務治理相關的概念及方法論,并就部分服務治理功能給出了具體實現。
全書完整地實現了一個可以實際運行的分布式服務框架,全書所有代碼均提供下載。
致謝
首先感謝我的妻子,在寫書這段時間,寶寶的出生給了我人生中最好的禮物,寶寶的咿呀學語、一個不經意的笑容都能給我莫大的支持和鼓勵。
同時,感謝貓眼電影公司的同事和領導,給了我寬松的學習與工作氛圍,學到了很多知識,也得到了很多成長的機會。
最后,感謝辛苦勞作的編輯,本書能夠出版有你們很大的一份功勞。
寫在最后
這本書偏向實戰,會有很多代碼實現細節的描述,全書完整的代碼實現會另給下載鏈接。本書所實現的分布式服務框架并未經歷嚴苛生產環境的考驗,定有很多不足之處,希望日后有機會再繼續完善。寫書對我來說是一個比較大的挑戰,因為一個技術點,自己能理解和會用文字表達出來讓別人也能理解是完全不同的層次。心中特別忐忑,擔心因為自己對知識理解不夠深入,以及文字表達水平不夠,導致對讀者有所誤導。書中難免有錯誤和疏漏之處,在此懇請讀者批評指正。

李業兵

目錄

第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

讀者評論

  • 思路差不多清晰了,但只支持單個服務發布了引入。服務提供者列表本地緩存不能動態感知(新增服務提供者不會刷新服務提供者列表)。請問這些問題是否存在?

    夜盡天明1發表于 2019/6/5 16:22:35
  • 用thrief聲場j**a報錯,

    kinve發表于 2018/11/24 14:02:25
  • 為什么第一張自己寫的簡單的那個RPC框架不能運行顯示
    Exception in thread “main” j**a.lang.reflect.UndeclaredThrowableException
    at com.sun.proxy.$Proxy0.sayHello(Unknown Source)
    at invoke.RpcProviderMain.main(RpcProviderMain.j**a:10)
    Caused by: j**a.net.ConnectException: Connection refused: connect
    at j**a.net.DualStackPlainSocketImpl.connect0(Native Method)

    Mr.Luo發表于 2018/8/3 0:09:13
  • 壓縮包里面是亂碼

    xuebusi發表于 2018/5/22 10:38:39
    • 作者用idea寫的demo,用eclipse打開可能存在亂碼問題

      mmd發表于 2018/6/2 20:56:17
  • 其實這本書基本上是做了一個非常簡化版的dubbo,雖然書本上的代碼和demo里的代碼不太一樣,書本上的代碼也有錯誤的地方,但是總的來說,這本書幫助我理解了dubbo的源碼,其實還是挺有用的。

    wuyuan發表于 2018/4/11 15:26:05

下載資源

圖書類別

相關博文

相關圖書

深入理解Apache Dubbo與實戰

詣極 林琳 (作者)

本書首先介紹Dubbo的簡史、后續的規劃和整體架構大圖;接著介紹Dubbo環境配置,并基于Dubbo開發第一款應用程序;然后介紹Dubbo內置的常用注冊中心的實...

¥79.00

RabbitMQ實戰指南

朱忠華 (作者)

本書從消息中間件的概念和RabbitMQ的歷史切入,主要闡述RabbitMQ的安裝、使用、配置、管理、運維、原理、擴展等方面的細節。本書大致可以分為基礎篇、進階...

¥79.00

Spring Boot 2精髓:從構建小系統到架構分布式大系統

李家智 (作者)

Spring Boot是目前Spring技術體系中炙手可熱的框架之一,既可用于構建業務復雜的企業應用系統,也可以開發高性能和高吞吐量的互聯網應用。Spring ...

¥79.00

Apache Kafka源碼剖析

徐郡明 (作者)

本書以 Kafka 0.10.0 版本源碼為基礎,針對 Kafka的架構設計到實現細節進行詳細闡述。本書共5 章,從 Kafka 的應用場景、源碼環境搭建開始逐...

¥89.00

人人都是架構師:分布式系統架構落地與瓶頸突破

高翔龍 (作者)

本書注重大型網站技術架構方案的落地,以及實戰實施。本書不僅會從宏觀的角度去闡述大型電商網站系統的架構設計,更重要的是,會結合筆者實際的工作經驗,深入剖析大型電商...

¥69.00

重構網絡:SDN架構與實現

李呈 (作者)

身處SDN發展浪潮,筆者真切地感受到了這場技術革命的到來。為了自我總結,也為了幫助他人,因此決定寫這本書。 <br>本書首先介紹了SDN的定義、SDN出現的原因...

¥45.00
澳洲幸运10现场开奖