√ 微服務(wù)旨在化大而復(fù)雜為小而簡(jiǎn)單,用快速交付支撐持續(xù)創(chuàng)新
√ 被谷歌等一線IT企業(yè)采用,與容器|云計(jì)算|持續(xù)交付等熱點(diǎn)實(shí)踐密不可分
√ 從架構(gòu)演進(jìn)到原理剖析,覆蓋開發(fā)、測(cè)試、部署、運(yùn)維、組織變化等微服務(wù)各方面
√ 代碼靜態(tài)檢查、云基礎(chǔ)設(shè)施構(gòu)建、 Docker映像構(gòu)建及部署、持續(xù)交付流水線、服務(wù)日志全程實(shí)戰(zhàn)
隨著RESTful、云計(jì)算、DevOps、持續(xù)交付等概念的深入人心,微服務(wù)架構(gòu)逐漸成為系統(tǒng)架構(gòu)的一個(gè)代名詞。本書首先從理論出發(fā),介紹了微服務(wù)架構(gòu)的概念、誕生背景、本質(zhì)特征以及優(yōu)缺點(diǎn);然后基于實(shí)踐,探討了如何從零開始構(gòu)建微服務(wù),包括Hello World API、Docker 映像構(gòu)建與部署、日志聚合、監(jiān)控告警、持續(xù)交付流水線等;最后,在進(jìn)階部分討論了微服務(wù)的輕量級(jí)通信、消費(fèi)者驅(qū)動(dòng)的契約測(cè)試,并通過(guò)一個(gè)真實(shí)的案例描述了如何使用微服務(wù)架構(gòu)改造遺留系統(tǒng)。全書內(nèi)容豐富,條理清晰,通俗易懂,是一本理論結(jié)合實(shí)踐的微服務(wù)架構(gòu)的實(shí)用書籍。
本書不僅適合架構(gòu)師、開發(fā)人員、測(cè)試人員以及運(yùn)維人員閱讀,也適合正在嘗試使用微服務(wù)架構(gòu)解耦歷史遺留系統(tǒng)的團(tuán)隊(duì)或者個(gè)人參考,希望本書能在實(shí)際工作中對(duì)讀者有所幫助。
請(qǐng)關(guān)注重磅升級(jí)的《微服務(wù)架構(gòu)與實(shí)踐(第2版)》
ThoughtWorks的首席咨詢師王磊是國(guó)內(nèi)較早倡導(dǎo)和實(shí)踐微服務(wù)的先行者。王磊是開源軟件的愛(ài)好者和貢獻(xiàn)者,社區(qū)活動(dòng)的參與者,《Ruby Gems開發(fā)實(shí)戰(zhàn)》(Practical RubyGems)一書的譯者,GDCR西安的組織者。他于2012年加入ThoughtWorks,為國(guó)內(nèi)外諸多客戶提供項(xiàng)目交付和咨詢服務(wù);在加入ThoughtWorks之前,曾就職過(guò)多家知名外企,具有豐富的敏捷項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)。目前致力于微服務(wù)架構(gòu)、高可用的Web應(yīng)用以及DevOps的研究與實(shí)踐。
第 1部分 基礎(chǔ)篇
第 1章 單塊架構(gòu)及其面臨的挑戰(zhàn) . 3
1.1三層應(yīng)用架構(gòu) . 4
1.1.1三層應(yīng)用架構(gòu)的發(fā)展 4
1.1.2什么是三層架構(gòu) . 5
1.1.3三層架構(gòu)的優(yōu)勢(shì) . 6
1.2單塊架構(gòu) . 6
1.2.1什么是單塊架構(gòu) . 6
1.2.2單塊架構(gòu)的優(yōu)勢(shì) . 7
1.2.3單塊架構(gòu)面臨的挑戰(zhàn) 8
1.3 小結(jié) . 12
第 2章 微服務(wù)架構(gòu)綜述 13
2.1什么是微服務(wù)架構(gòu) . 13
2.1.1多微才夠微 . 14
2.1.2 單一職責(zé) . 17
2.1.3 輕量級(jí)通信 . 17
2.1.4 獨(dú)立性 . 19
2.1.5 進(jìn)程隔離 . 20
2.2 微服務(wù)的誕生背景 . 22
2.2.1 互聯(lián)網(wǎng)行業(yè)的快速發(fā)展 23
2.2.2 敏捷、精益方法論的深入人心 23
2.2.3 單塊架構(gòu)系統(tǒng)面臨的挑戰(zhàn) 23
2.2.4 容器虛擬化技術(shù) . 23
2.3 微服務(wù)架構(gòu)與 SOA 24
2.3.1 SOA概述 24
2.3.2 微服務(wù)與 SOA 25
2.4 微服務(wù)的本質(zhì) . 26
2.4.1服務(wù)作為組件 . 27
2.4.2 圍繞業(yè)務(wù)組織團(tuán)隊(duì) . 28
2.4.3 關(guān)注產(chǎn)品而非項(xiàng)目 . 29
2.4.4 技術(shù)多樣性 . 31
2.4.5 業(yè)務(wù)數(shù)據(jù)獨(dú)立 . 32
2.4.6 基礎(chǔ)設(shè)施自動(dòng)化 . 33
2.4.7 演進(jìn)式架構(gòu) . 33
2.5 微服務(wù)不是銀彈 . 34
2.5.1 分布式系統(tǒng)的復(fù)雜度 35
2.5.2 運(yùn)維成本 . 36
2.5.3 部署自動(dòng)化 . 36
2.5.4 DevOps與組織架構(gòu) . 37
2.5.5 服務(wù)間的依賴測(cè)試 . 37
2.5.6 服務(wù)間的依賴管理 . 37
2.6 小結(jié) . 38
第 2部分 實(shí)踐篇
第 3章 構(gòu)建第一個(gè)服務(wù) 41
3.1場(chǎng)景分析 . 41
3.2任務(wù)拆分 . 43
第 4章 Hello World API 45
4.1 API實(shí)現(xiàn) 45
4.1.1 開發(fā)語(yǔ)言 ――Ruby . 45
4.1.2 Web框架――Grape . 46
4.1.3 API的具體實(shí)現(xiàn) 47
4.2代碼測(cè)試與靜態(tài)檢查 . 50
4.2.1代碼測(cè)試 . 50
4.2.2測(cè)試覆蓋率統(tǒng)計(jì) . 53
4.2.3靜態(tài)檢查 . 54
4.2.4代碼復(fù)雜度檢查 . 57
第 5章 構(gòu)建 Docker映像 . 61
5.1 定義 Dockerfile . 61
5.2 配置 Docker主機(jī) 63
5.3 構(gòu)建 Docker映像 64
5.4 運(yùn)行 Docker容器 64
5.5 發(fā)布 Docker映像 65
5.6 小結(jié) . 69
第 6章 部署 Docker映像 . 71
6.1基礎(chǔ)設(shè)施 AWS 71
6.2基礎(chǔ)設(shè)施自動(dòng)化 . 73
6.3 部署 Docker映像 80
6.4自動(dòng)化部署 . 81
6.5 小結(jié) . 84
第 7章 持續(xù)交付流水線 85
7.1持續(xù)集成環(huán)境 . 85
7.2提交階段 . 87
7.3驗(yàn)證階段 . 91
7.4構(gòu)建階段 . 91
7.5發(fā)布階段 . 94
7.6 小結(jié) . 96
第 8章 日志聚合 97
8.1 日志聚合工具簡(jiǎn)介 . 97
8.2 Splunk的核心 . 99
8.3 安裝 Splunk索引器 100
8.4 安裝 Splunk轉(zhuǎn)發(fā)器 101
8.5日志查找 . 102
8.6告警設(shè)置 . 103
8.7 小結(jié) . 104
第 9章 監(jiān)控與告警 . 105
9.1 Nagios簡(jiǎn)介. 105
9.2 Nagios的工作原理 . 107
9.3 Nagios安裝. 108
9.4 Nagios的配置 . 109
9.5 監(jiān)控 products-service 111
9.6 告警 . 113
9.7 小結(jié) . 114
第 10章 功能迭代 115
10.1定義模型 . 116
10.2持久化模型 . 117
10.3定義表現(xiàn)形式 . 119
10.4 實(shí)現(xiàn) API 122
10.5服務(wù)描述文件 . 125
10.6 小結(jié) . 127
第 3部分 進(jìn)階篇
第 11章 微服務(wù)與持續(xù)交付 131
11.1持續(xù)交付的核心 132
11.2微服務(wù)架構(gòu)與持續(xù)交付 133
11.2.1 開發(fā) . 133
11.2.2 測(cè)試 . 137
11.2.3持續(xù)集成 139
11.2.4 構(gòu)建 . 139
11.2.5 部署 . 140
11.2.6 運(yùn)維 . 143
11.3 小結(jié) . 144
第 12章 微服務(wù)與輕量級(jí)通信機(jī)制 . 145
12.1同步通信與異步通信 . 145
12.1.1 概述 . 145
12.1.2同步通信與異步通信的選擇 146
12.2遠(yuǎn)程調(diào)用 RPC . 147
12.2.1遠(yuǎn)程過(guò)程調(diào)用的核心 147
12.2.2遠(yuǎn)程方法調(diào)用 . 148
12.2.3遠(yuǎn)程過(guò)程調(diào)用的弊端 148
12.3 REST . 149
12.3.1 概述 . 149
12.3.2 REST的核心 . 150
12.3.3 REST的優(yōu)勢(shì) . 152
12.3.4 REST的不足 . 152
12.3.5 本節(jié)小結(jié) . 155
12.4 HAL . 155
12.4.1 概述 . 155
12.4.2 HAL的核心 156
12.4.3 HAL瀏覽器 160
12.5消息隊(duì)列 . 161
12.5.1 核心部分 . 162
12.5.2 訪問(wèn)方式 . 163
12.5.3消息隊(duì)列的優(yōu)缺點(diǎn) . 164
12.6后臺(tái)任務(wù)處理系統(tǒng) . 165
12.6.1 核心部分 . 165
12.6.2 服務(wù)回調(diào) . 166
12.6.3 一個(gè)例子 . 167
12.6.4后臺(tái)任務(wù)與微服務(wù) . 169
12.7 小結(jié) . 170
第 13章 微服務(wù)與測(cè)試 . 171
13.1微服務(wù)的結(jié)構(gòu) . 171
13.2微服務(wù)的測(cè)試策略 . 173
13.3微服務(wù)的單元測(cè)試 . 175
13.3.1單元測(cè)試綜述 . 175
13.3.2單元測(cè)試的內(nèi)容 . 176
13.4微服務(wù)的集成測(cè)試 . 179
13.4.1集成測(cè)試綜述 . 179
13.4.2集成測(cè)試的實(shí)施方法 179
13.4.3集成測(cè)試的內(nèi)容 . 180
13.5基于消費(fèi)者驅(qū)動(dòng)的契約測(cè)試 181
13.5.1集成測(cè)試存在的弊端 181
13.5.2什么是契約 . 183
13.5.3什么是契約測(cè)試 . 184
13.5.4契約測(cè)試的方法 . 185
13.5.5 Pact實(shí)現(xiàn)契約測(cè)試 187
13.5.6 一個(gè)例子 . 192
13.5.7 本節(jié)小結(jié) . 205
13.6微服務(wù)的組件測(cè)試 . 205
13.6.1組件測(cè)試概述 . 205
13.6.2組件測(cè)試的方法 . 206
13.6.3 本節(jié)小結(jié) . 207
13.7微服務(wù)的端到端測(cè)試 . 208
13.7.1端到端測(cè)試概述 . 208
13.7.2端到端測(cè)試的內(nèi)容 . 208
13.7.3 本節(jié)小結(jié) . 209
13.8 小結(jié) . 210
第 14章 使用微服務(wù)架構(gòu)改造遺留系統(tǒng) 211
14.1背景與挑戰(zhàn) . 211
14.2改造策略 . 212
14.2.1 昀小修改 . 212
14.2.2 功能剝離 . 212
14.2.3 數(shù)據(jù)解耦 . 213
14.2.4 數(shù)據(jù)同步 . 213
14.2.5 迭代替換 . 214
14.3快速開發(fā)實(shí)踐 . 215
14.3.1快速開發(fā)模板 . 215
14.3.2代碼生成工具 . 217
14.3.3持續(xù)集成模板 . 217
14.3.4一鍵部署工具 . 217
14.4微服務(wù)架構(gòu)下的新系統(tǒng) . 218
14.5 小結(jié) . 220