Spring Cloud 微服務架構進階

aoho發表於2018-10-01

前面的話

我今年年初的時候,籌劃了一本技術書籍,即為這篇文章的標題《Spring Cloud 微服務架構進階》。今天正式開始預售了,年初到現在正好十個月,實在不易。寫這篇文章胡亂談談技術之外的一些關於寫書的瑣事吧。

緣由

寫這本書有一些機緣巧合,去年有幾個出版社的編輯通過我部落格上的郵箱,發郵件和我聯絡。可能是因為微服務這幾年確實很火吧,編輯們建議我寫一本關於微服務的書。當時一聽而過,並沒有在意(編輯們也是廣撒網,不能當真認為自己的水平達到了),更主要是感覺自己的文筆很菜,技術就那樣,根本沒什麼興趣。不過堅持寫部落格確實是一個好的習慣,特別是原創的內容更有價值。筆者的部落格知名度很低,但是通過公眾號的方式傳播,也能收穫一些反饋,逐漸增強了我的信心(可能是已經膨脹了吧)。一直到去年年底的時候,覺得自己可以在技術方面更加深入,所以選擇了微服務架構的流行組合框架Spring Cloud作為本書的內容,打算試試寫本書。

封面

關於內容

接觸Spring Cloud還是挺早的了,算是早期關注者吧,之後一直在專案中有實踐和應用。相比於剛出來之前,Spring Cloud已經完善了太多,通過整合現有的開源框架和Spring社群自己開發的一部分元件,使得Spring Cloud功能越來越強大。Spring Cloud使用和整合單個元件還比較簡單,但是在微服務的實踐中,要求我們對這些基礎的元件有更深的瞭解才行。在平時的應用中,我會去了解和學習各個元件的實現原理,雖然沒有特別細緻,但是也對其中的主要部分比較熟悉。

關於這方面的書籍,其實已經有DIDI(翟永超)的Spring Cloud微服務實戰和周立Spring Cloud與Docker微服務架構實戰等書籍,寫得時間比較早,內容質量也挺高了。筆者實在不敢談超越,然而技術的發展和迭代很快,Spring Cloud版本迭到了Finchley,基於的Spring Boot版本已經是2.x了(2.x已經基於Spring 5),相對來說,好多元件的實現和用法方面變化還是很大。這本《Spring Cloud 微服務架構進階》基於最新的Finchley,詳細介紹了微服務架構中涉及到的主要Spring Cloud元件,配合基礎應用的案例介紹實現原理。本書適合所有的Java開發者,特別希望能為從事微服務開發和架構的讀者提供一些幫助。

合作

本書是由三位作者共同完成的,另外兩位:@Randy@CANGWU都是非常優秀的大佬,具體的介紹可以通過購買本書(硬廣,hh)。

寫書是一件比較耗費時間和精力的事情,決定做這件事的時候,深知以一人之力很難寫完和寫好,因素還挺多(能力、時間等)。團隊合作的力量是強大的,於是約上另外了兩位厲害的同學,我們開始了分工合作完成書稿,相互之間取長補短。技術書的書寫整體上不是很難,每個功能元件按照基礎應用案例引出實現原理的講解。在這個過程中,有些細節還是值得深入瞭解的,加深了自己的一些理解,也學習到了不少。

其實書稿的初稿在五月底就完成了,後來作者之間互相審閱,並邀請了幾位業界大佬幫忙審閱,編輯也提出了很多修改的建議,來來回回修改花了一個多月。其間也在等待Finchley的release版本釋出,剛開始寫的時候還是里程碑(Milestone不太穩定)版本,這當中比較痛苦的就是Milestone到release版本會有不少變化,如Spring Cloud Gateway中的過濾器、路由斷言在不斷增加和部分重構。所以當正式版出來之後,三位作者還花了不少時間去對比之前的實現差異,及時修正了一些問題。到了七月底才正式定稿,吳怡編輯在定稿之後也是加緊進行了修訂排版等後續工作,深表感謝。

目錄

全書共十三章,紙質版428頁。介紹一下本書的目錄:

  • 第 1 章 微服務架構介紹
    • 1.1 微服務的出現
      • 1.1.1 單體應用
      • 1.1.2 SOA 架構 1.1.3 微服務架構
    • 1.2 微服務架構的流派
      • 1.2.1 ZeroC IceGrid
      • 1.2.2 基於訊息佇列
      • 1.2.3 Docker Swarm
      • 1.2.4 Spring Cloud
    • 1.3 雲原生與微服務
      • 1.3.1 雲原生
      • 1.3.2 The Twelve Factors
      • 1.3.3 容器化
      • 1.3.4 DevOps
      • 1.3.5 面向微服務
    • 1.4 本章小結
  • 第 2 章 Spring Cloud 介紹
    • 2.1 Spring Cloud 總覽
      • 2.1.1 版本說明
      • 2.1.2 Spring Cloud 組成
    • 2.2 Spring Cloud 特性
      • 2.2.1 Spring Cloud 上下文
      • 2.2.2 Spring Cloud Commons: 公共抽象
    • 2.3 本章小結
  • 第 3 章 Spring Cloud 的基礎:Spring Boot
    • 3.1 Spring Boot 簡介
      • 3.1.1 Spring Boot 2.0
      • 3.1.2 Spring Boot 與 Spring Cloud
    • 3.2 Spring Boot 核心特性
    • 3.3 構建一個微服務
      • 3.3.1 IDEA 生成
      • 3.3.2 initial 生成
    • 3.4 Spring Boot 配置檔案
      • 3.4.1 預設配置檔案
      • 3.4.2 外部化配置
      • 3.4.3 YAML
      • 3.4.4 自動載入外部屬性到 Bean
      • 3.4.5 多 profile
      • 3.4.6 Starters
      • 3.4.7 自制一個 Starter
      • 3.4.8 Actuator
    • 3.5 本章小結
  • 第 4 章 服務註冊與發現:Eureka
    • 4.1 基礎應用
      • 4.1.1 Eureka 簡介
      • 4.1.2 搭建 Eureka 服務註冊中心
      • 4.1.3 搭建 Eureka 服務提供者
      • 4.1.4 搭建 Eureka 服務呼叫者
      • 4.1.5 Eureka 服務註冊和發現
      • 4.1.6 Consul 的簡單應用
    • 4.2 服務發現原理
      • 4.2.1 核心架構圖
    • 4.3 Eureka Client 原始碼解析
      • 4.3.1 讀取應用自身配置資訊
      • 4.3.2 服務發現客戶端
      • 4.3.3 拉取登錄檔資訊
      • 4.3.4 服務註冊
      • 4.3.5 初始化定時任務
      • 4.3.6 服務下線
    • 4.4 Eureka Server 原始碼解析
      • 4.4.1 服務例項登錄檔
      • 4.4.2 服務註冊
      • 4.4.3 接受服務心跳
      • 4.4.4 服務剔除
      • 4.4.5 服務下線
      • 4.4.6 叢集同步
      • 4.4.7 登錄檔拉取
      • 4.5.8 自我保護
    • 4.5 進階應用
      • 4.5.1 Eureka Instance 和 Client 的後設資料
      • 4.5.2 狀態頁和健康檢查頁埠設定
      • 4.5.3 Region 與 Zone
      • 4.5.4 高可用性服務註冊中心
    • 4.6 本章小結
  • 第 5 章 宣告式 Restful 網路客戶端:Spring Cloud OpenFeign
    • 5.1 基礎應用
      • 5.1.1 微服務之間的互動
      • 5.1.2 OpenFeign 簡介
      • 5.1.3 程式碼示例
    • 5.2 原始碼分析
      • 5.2.1 核心元件與概念
      • 5.2.2 動態註冊 BeanDefinition
      • 5.2.3 例項初始化
      • 5.2.4 函式呼叫和網路請求
    • 5.3 進階應用
      • 5.3.1 Decoder 與 Encoder 的自定製化
      • 5.3.2 請求/響應壓縮
    • 5.4 本章小結
  • 第 6 章 斷路器:Hystrix
    • 6.1 基礎應用
      • 6.1.1 RestTemplate 與 Hystrix
      • 6.1.2 Feign 與 Hystrix
    • 6.2 Hystrix 原理
      • 6.2.1 服務雪崩
      • 6.2.2 斷路器
      • 6.2.3 服務降級操作
      • 6.2.4 資源隔離
      • 6.2.5 Hystrix 實現思路
    • 6.3 原始碼解析
      • 6.3.1 封裝 HystrixCommand
      • 6.3.2 HystrixCommand 類結構
      • 6.3.3 非同步回撥執行命令
      • 6.3.4 非同步執行命令和同步執行命令
      • 6.3.5 斷路器邏輯
      • 6.3.6 資源隔離
      • 6.3.7 請求超時監控
      • 6.3.8 失敗回滾邏輯
    • 6.4 進階應用
      • 6.4.1 核心配置講解
      • 6.4.2 非同步與非同步回撥執行命令
      • 6.4.3 繼承 HystrixCommand
      • 6.4.4 請求合併
      • 6.4.5 Hystrix 儀表盤
    • 6.5 本章小結
  • 第 7 章 客戶端負載均衡器:Spring Cloud Netflix Ribbon
    • 7.1 負載均衡
    • 7.2 基礎應用
    • 7.3 原始碼分析
      • 7.3.1 配置和例項初始化
      • 7.3.2 與 OpenFeign 的整合
      • 7.3.3 負載均衡器 LoadBalancerClient
      • 7.3.4 ILoadBalancer
      • 7.3.5 負載均衡策略實現
    • 7.4 進階應用
      • 7.4.1 Ribbon API
      • 7.4.2 使用 Netty 傳送網路請求
      • 7.4.3 只讀資料庫的負載均衡實現
    • 7.5 本章小結
  • 第 8 章 API 閘道器:Spring Cloud Gateway
    • 8.1 Spring Cloud Gateway 介紹
    • 8.2 基礎應用
      • 8.2.1 使用者服務
      • 8.2.2 閘道器服務
      • 8.2.3 客戶端的訪問
    • 8.3 原始碼解析
      • 8.3.1 初始化配置
      • 8.3.2 閘道器處理器
      • 8.3.3 路由定義定位器
      • 8.3.4 路由定位器
      • 8.3.5 路由斷言
      • 8.3.6 閘道器過濾器
      • 8.3.7 全域性過濾器
      • 8.3.8 API 端點
    • 8.4 應用進階
      • 8.4.1 限流機制
      • 8.4.2 熔斷降級
      • 8.4.3 閘道器重試過濾器
    • 8.5 本章小結
  • 第 9 章 配置中心:Spring Cloud Config
    • 9.1 基礎應用
      • 9.1.1 配置客戶端
      • 9.1.2 配置倉庫
      • 9.1.3 服務端
      • 9.1.4 配置驗證
      • 9.1.5 配置動態更新
    • 9.2 原始碼解析
      • 9.2.1 配置伺服器
      • 9.2.2 配置客戶端
    • 9.3 應用進階
      • 9.3.1 為 config Server 配置多個 repo
      • 9.3.2 客戶端覆寫遠端的配置屬性
      • 9.3.3 屬性覆蓋
      • 9.3.4 安全保護
      • 9.3.5 加密解密
      • 9.3.6 快速響應失敗與重試機制
    • 9.4 本章小結
  • 第 10 章 訊息驅動:Spring Cloud Stream
    • 10.1 訊息佇列
      • 10.1.1 訊息佇列常用元件
    • 10.2 基礎應用
      • 10.2.1 宣告和繫結 Channels
      • 10.2.2 自定義通道
      • 10.2.3 接收訊息
      • 10.2.4 配置
    • 10.3 原始碼分析
      • 10.3.1 動態註冊 BeanDefinition
      • 10.3.2 繫結服務
      • 10.3.3 獲取繫結器
      • 10.3.4 繫結 Producer
      • 10.3.5 訊息傳送的流程
      • 10.3.6 StreamListener 註解的處理
      • 10.3.7 繫結 Consumer
      • 10.3.8 訊息的接收
    • 10.4 進階應用
      • 10.4.1 Binder For RocketMQ
      • 10.4.2 多例項
      • 10.4.3 分割槽
    • 10.5 本章小結
  • 第 11 章 訊息匯流排:Spring Cloud Bus
    • 11.1 基礎應用
      • 11.1.1 配置伺服器 Config-Server
      • 11.1.2 配置客戶端 Config-Client
      • 11.1.3 結果驗證
    • 11.2 原始碼解析
      • 11.2.1 事件的定義與事件監聽器
      • 11.2.2 訊息的訂閱與釋出
      • 11.2.3 控制端點
    • 11.3 應用進階
      • 11.3.1 在自定義的包中註冊事件
      • 11.3.2 自定義監聽器
      • 11.3.3 事件的發起者
    • 11.4 本章小結
  • 第 12 章 認證與授權:Spring Cloud Security
    • 12.1 基礎應用
      • 12.1.1 OAuth2 簡介 12.1.2 JWT
      • 12.1.3 搭建授權伺服器
      • 12.1.4 配置資源伺服器
      • 12.1.5 訪問受限資源
    • 12.2 整體架構
      • 12.2.1 Spring Security 架構概述
      • 12.2.2 Spring Security OAuth2 架構概述
      • 12.2.3 Spring Cloud Security 中的 Security 和 OAuth2
    • 12.3 原始碼解析
      • 12.3.1 SecurityContext 安全上下文
      • 12.3.2 Authentication 認證
      • 12.3.3 Authorization 授權
      • 12.3.4 Spring Security 中的過濾器與攔截器
      • 12.3.5 授權伺服器
      • 12.3.6 資源伺服器
      • 12.3.7 Token 中繼機制
    • 12.4 進階應用
      • 12.4.1 Spring Sercurity 自定製化
      • 12.4.2 OAuth2 自定製化
      • 12.4.3 SSO 單點登入
    • 12.5 本章小結
  • 第 13 章 服務鏈路追蹤:Spring Cloud Sleuth
    • 13.1 鏈路監控元件介紹
      • 13.1.1 常用的監控元件
      • 13.1.2 基礎概念
    • 13.2 基礎應用
      • 13.2.1 特性
      • 13.2.2 專案準備
      • 13.2.3 Spring Cloud Sleuth 獨立實現
      • 13.2.4 整合 Zipkin
    • 13.3 本章小結

最後

最後想說的是,寫書不易,請大家支援正版。作者水平有限,如有問題和疑惑歡迎指正。

本書配套的原始碼地址github.com/Advanced-Sp…

《Spring Cloud 微服務架構進階》預售地址:item.jd.com/12453340.ht…

訂閱最新文章,歡迎關注我的公眾號

微信公眾號

相關文章