推薦序一
我和Java很有緣,2003年在富士通南大實習的時候,就開始用Struts/JSP/Hibernate/MySQL做第一個Java項目——SPIF(http://www.fujitsu.com/cn/products/software/applications/ spif/)。
工作之后,主要做J2EE的開發,并開始慢慢接觸和使用Spring。加入EMC之后,很有幸和Spring成為一個大家庭(EMC收購了VMware,VMware收購了Spring)。2012年,我和Spring Data/XD的負責人Mark Pollack在中國開過一次小會,和他探討了一些關于Data Pipeline的想法。后來我也看了很多Josh Long(龍應春)的演講視頻,并在2016年終于有幸能夠與他在一個技術大會上同場演講,并在會議之后做了很多深入溝通。
2015年上半年,我讀了兩本書:The Phoenix Project和Migrating to Cloud-Native Application Architectures,讓我對DevOps、微服務和云原生架構有了初步的認識,也讓我對Netflix的那套OSS套件有了一個初步印象。
我是在2015年9月加入麻袋理財之后開始接觸Spring Boot的,試用之后感覺它很神奇,再也沒有被Spring之前那些煩瑣配置所束縛。當時正好和一個架構師討論要做一個項目的升級改造,決定采用Spring Boot和微服務架構。開始的時候,服務治理還是用了Dubbo。之后因為對Spring Cloud有了比較深刻的認識,在之后一個全新項目上,我們完全按照微服務架構,使用Spring Boot和Cloud進行開發,并采用CI/CD自動化流程和容器化部署。
因為使用了Spring Cloud,讓我對Spring Cloud的相關信息特別關注。一個偶然的機會,我認識了Spring Cloud中國社區的負責人許進、翟永超(本書作者)和周立,探討了很多使用Spring Cloud的經驗,感覺與他們和Spring Cloud相見恨晚。
翟永超本人寫了很多關于Spring Cloud使用的博客,不同于一般作者,他寫的內容更加貼近實際,是自己工作經驗的深刻總結,可以拿來直接用于生產。
有一次我們聊到關于配置中心(Spring Cloud Config)如何在生產中使用,他解答了我很多問題,并告訴我他寫了一本書,書中就會包含這些內容。這讓我對這本書充滿期待。后面也有幸見到了本人,一個瘦瘦高高的書生,一看就是一個很有內涵的技術人。暢聊之后,翟永超就把書發給了我,讓我先睹為快。
我把翟永超的書仔細拜讀了一遍,最大的收獲就是讓我對Spring Cloud的認識又上升了一個層次。我之前對Spring Cloud的理解更多的是知其然,但是卻不知道其所以然,對Spring Cloud里面的邏輯知之甚少。而讀了翟永超的《Spring Cloud微服務實戰》一書后,讓我對Spring Cloud各個組件的認識提升了一個層次,同時也讓我對Spring Cloud各個組件的實現原理有了初步的認識,因此我建議所有打算將Spring Cloud用于生產的朋友一定要好好讀一下這本書。
王天青
DaoCloud 首席架構師
2017年3月
推薦序二
2016年10月開始,我在冰鑒科技負責微服務架構遷移相關的調研和籌建工作。我比較了Dubbo、Dubbox、Motan、Spring Cloud等框架后,最終鎖定在Spring Cloud上。這是一個非常年輕的框架,關于它的中文文檔少之又少,更不用說有深度的技術干貨了。
當我的團隊在利用搜索引擎進行相關檢索時,永超的技術博客十分顯眼地排在了前列,我非常感激他貢獻的這個系列的文章,這在我們團隊做微服務架構遷移的工作中,起到了關鍵作用。后來有一天,我倆在一個架構群中相識,一番討論后發現是博主本人并且他有寫書計劃時,我告訴了我的團隊,我們不謀而合地決定要在該書出版時迅速收入囊中,做到人手一本。而今天對于我來說更是非常榮幸,能夠給永超的新書寫推薦序。
Spring Cloud是一個微服務架構實施的綜合性解決框架,而在如何構建微服務的選擇上,由于我們團隊是從SSM(Spring + Spring MVC + MyBatis)框架開始演進的,基于讓演進中改動最小的初衷,我們決定使用Spring Boot做微服務構建。我們從對Spring Boot的調研開始就一直關注著永超的技術博客,在第一次接觸 Spring Boot 的時候就被它“習慣優于配置”的設計概念深深吸引,這無疑簡化了做業務邏輯開發同事的工作量,也使得他們可以不用關注配置細節。本書中也有關于Spring Boot基礎知識的詳細講解以及一個案例工程帶你快速構建屬于你的第一個微服務。
如開頭所述,為了將系統微服務化,我們也一直在對 Spring Cloud 進行相關調研。這本書也是國內市場上為數不多的、全面講解 Spring Cloud 微服務的中文圖書。詳細講解了 Spring Cloud 生態的各類組件,涵蓋了服務治理組件 Eureka、客戶端負載均衡組件 Ribbon、服務容錯保護組件Hystrix、聲明式服務調用組件 Feign、API 網關治理組件Zuul、分布式配置中心組件 Config、消息總線組件 Bus、消息驅動組件 Stream、分布式服務跟蹤組件 Sleuth。這包含了我們在實施微服務中需要深入了解的各個輪子,是一本需要仔細研讀,反復閱讀的精品之作。
最后,預祝永超在Spring Cloud的學習和工作中再創佳績,也希望讀者朋友能夠在閱讀完本書后快速地搭建好實施微服務過程中的基礎腳手架,并在未來工作中能夠將團隊的一些實踐通過Spring Cloud中國社區進行交流,為開源貢獻自己的一份力量。
朱清
冰鑒科技信息技術部總監
Spring Cloud中國社區聯合創始人
2017.03.27
推薦序三
收到本書作者翟永超的邀請為這本書寫推薦序,其實我是很謹慎的。抱著對讀者負責、對技術嚴謹的態度,不能在完全不懂Spring Cloud的基礎上妄加評論。就像2009年的云計算和現在的大數據,“Big data is like teenage sex: everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it.”所以概讀了書中的內容,的確是一本好書,特別是在基于技術實踐的闡述中又不失對“微服務化”理論層面的講解以及發展演進過程的說明。
結合在云計算行業中為大量企業級客戶做的服務案例,“集中化”的系統架構確實在企業級客戶中受到越來越多的挑戰,隨著業務變化對IT需求的不斷增加,處于逐漸失控的狀態。CIO們受到越來越大的挑戰,希望做到數據驅動業務,那第一個階段就要做去中心化的改造。如書中所闡述,“微服務化”其實并不是簡單的技術革新,而是對團隊組織,系統架構,系統研發,自動化測試、發布、運維都提出了一系列的變革要求。所以我覺得,不管是架構師、運維經理、研發主管還是CIO都可以從本書中有所收獲。
同樣,阿里云的企業級中間件EDAS(基于阿里系的Dubbo開源項目)配合強大的飛天云平臺與Docker服務的支持,在大中型企業客戶中得到更多的驗證,如森馬服飾、來伊份、正佳廣場、中石化的易派客電商平臺等。與這些商業化的中間件產品相比,Spring Cloud得到了更多熱衷開源項目的人的支持,相信在有足夠團隊技術能力的保障下,也會取得越來越多成功案例。書如其人,值得認真拜讀,我會推薦給更多的人,為翟永超點贊。
李俊濤
上海駐云科技執行總監
第1章 基礎知識 1
什么是微服務架構 1
-- 與單體系統的區別 1
-- 如何實施微服務 2
為什么選擇Spring Cloud 6
Spring Cloud簡介 7
版本說明 8
第2章 微服務構建:Spring Boot 11
框架簡介 12
快速入門 13
-- 項目構建與解析 13
-- 實現RESTful API 17
配置詳解 20
-- 配置文件 20
-- 自定義參數 22
-- 參數引用 22
-- 使用隨機數 23
-- 命令行參數 23
-- 多環境配置 24
-- 加載順序 25
監控與管理 26
-- 初識actuator 27
-- 原生端點 28
小結 38
第3章 服務治理:Spring Cloud Eureka 39
服務治理 39
-- Netflix Eureka 40
--搭建服務注冊中心 41
--注冊服務提供者 43
--高可用注冊中心 46
--服務發現與消費 48
Eureka詳解 51
--基礎架構 52
--服務治理機制 52
--源碼分析 56
配置詳解 65
--服務注冊類配置 65
--服務實例類配置 67
跨平臺支持 71
第4章 客戶端負載均衡:Spring Cloud Ribbon 73
客戶端負載均衡 73
RestTemplate詳解 75
-- GET請求 75
-- POST請求 77
-- PUT請求 79
-- DELETE請求 79
源碼分析 80
-- 負載均衡器 91
-- 負載均衡策略 109
配置詳解 123
--自動化配置 124
-- Camden版本對RibbonClient配置的優化 125
-- 參數配置 127
-- 與Eureka結合 127
重試機制 128
第5章 服務容錯保護:Spring Cloud Hystrix 130
快速入門 131
原理分析 135
-- 工作流程 135
-- 斷路器原理 144
-- 依賴隔離 148
使用詳解 151
-- 創建請求命令 151
-- 定義服務降級 154
-- 異常處理 157
-- 命令名稱、分組以及線程池劃分 158
-- 請求緩存 159
-- 請求合并 166
屬性詳解 172
-- Command屬性 174
-- collapser屬性 184
-- threadPool屬性 185
Hystrix儀表盤 187
Turbine集群監控 192
-- 構建監控聚合服務 192
-- 與消息代理結合 196
第6章 聲明式服務調用:Spring Cloud Feign 199
快速入門 200
參數綁定 202
繼承特性 205
Ribbon配置 209
全局配置 209
指定服務配置 209
重試機制 210
Hystrix配置 211
全局配置 211
禁用Hystrix 211
指定命令配置 212
服務降級配置 212
其他配置 214
第7章 API網關服務:Spring Cloud Zuul 217
快速入門 219
-- 構建網關 220
-- 請求路由 221
-- 請求過濾 223
路由詳解 226
-- 傳統路由配置 226
-- 服務路由配置 228
-- 服務路由的默認規則 229
-- 自定義路由映射規則 229
-- 路徑匹配 230
-- 路由前綴 233
-- 本地跳轉 234
-- Cookie與頭信息 235
-- Hystrix和Ribbon支持 236
過濾器詳解 238
-- 過濾器 238
-- 請求生命周期 239
-- 核心過濾器 240
-- 異常處理 244
-- 禁用過濾器 256
動態加載 257
-- 動態路由 257
-- 動態過濾器 261
第8章 分布式配置中心:Spring Cloud Config 267
快速入門 267
-- 構建配置中心 268
-- 配置規則詳解 269
-- 客戶端配置映射 272
服務端詳解 274
-- 基礎架構 274
-- Git配置倉庫 276
-- SVN配置倉庫 279
-- 本地倉庫 279
-- 本地文件系統 279
-- 健康監測 280
-- 屬性覆蓋 281
-- 安全保護 281
-- 加密解密 282
-- 高可用配置 286
客戶端詳解 286
-- URI指定配置中心 287
-- 服務化配置中心 287
-- 失敗快速響應與重試 290
-- 獲取遠程配置 292
-- 動態刷新配置 293
第9章 消息總線:Spring Cloud Bus 295
消息代理 295
RabbitMQ實現消息總線 296
-- 基本概念 297
-- 安裝與使用 298
-- 快速入門 302
-- 整合Spring Cloud Bus 306
-- 原理分析 307
-- 指定刷新范圍 308
-- 架構優化 309
-- RabbitMQ配置 310
Kafka實現消息總線 312
-- Kafka簡介 312
-- 快速入門 313
--整合Spring Cloud Bus 315
-- Kafka配置 318
深入理解 318
-- 源碼分析 320
-- 其他消息代理的支持 342
第10章 消息驅動的微服務:Spring Cloud Stream 344
快速入門 344
核心概念 349
-- 綁定器 350
-- 發布-訂閱模式 351
-- 消費組 353
-- 消息分區 354
使用詳解 355
-- 開啟綁定功能 355
-- 綁定消息通道 356
-- 消息生產與消費 360
-- 響應式編程 366
-- 消費組與消息分區 368
-- 消息類型 370
綁定器詳解 373
-- 綁定器SPI 373
-- 自動化配置 374
-- 多綁定器配置 374
-- RabbitMQ與Kafka綁定器 376
配置詳解 376
-- 基礎配置 377
-- 綁定通道配置 377
-- 綁定器配置 379
第11章 分布式服務跟蹤:Spring Cloud Sleuth 386
快速入門 386
-- 準備工作 386
-- 實現跟蹤 389
跟蹤原理 390
抽樣收集 392
與Logstash整合 394
與Zipkin整合 397
-- HTTP收集 398
-- 消息中間件收集 402
-- 收集原理 404
-- 數據存儲 414
-- API接口 417
附錄A Starter POMs 419
后記 421