![](/c3/47387503225.jpg)
出版社:機械工業出版社 ISBN:9787111624127 商品編碼:47387503225 品牌:文軒 出版時間:2019-04-01 代碼:139 作者:克裡斯·理查森(ChrisRichardso
"![](http://img14.360buyimg.com/cms/jfs/t1/203358/9/26405/134589/62f4a34cEcdefae53/84e082ed3b03dbc0.jpg) 作 者:(美)克裡斯·理查森(Chris Richardson) 著 喻勇 譯 定 價:139 出 版 社:機械工業出版社 出版日期:2019年04月01日 頁 數:455 裝 幀:平裝 ISBN:9787111624127 ●寫給中文版讀者的話 譯者序 中文版序一 中文版序二 前言 引言 第1章逃離單體地獄/1 1.1邁向單體地獄的漫長旅程/2 1.1.1FTGO應用程序的架構/3 1.1.2單體架構的好處/4 1.1.3什麼是單體地獄/4 1.2為什麼本書與你有關/7 1.3你會在本書中學到什麼/8 1.4拯救之道:微服務架構/8 1.4.1擴展立方體和服務/9 1.4.2微服務架構作為模塊化的一種形式/11 1.4.3每個服務都擁有自己的數據庫/12 1.4.4FTGO的微服務架構/12 1.4.5微服務架構與SOA的異同/14 1.5微服務架構的好處和弊端/15 1.5.1微服務架構的好處/15 1.5.2微服務架構的弊端/17 1.6微服務架構的模式語言/19 1.6.1微服務架構並不是“銀彈”/20 1.6.2模式和模式語言/21 1.6.3微服務架構的模式語言概述/24 1.7微服務之上:流程和組織/29 1.7.1進行軟件開發和交付的組織/30 1.7.2進行軟件開發和交付的流程/31 1.7.3采用微服務架構時的人為因素/32 第2章服務的拆分策略/34 2.1微服務架構到底是什麼/35 2.1.1軟件架構是什麼,為什麼它如此重要/35 2.1.2什麼是架構的風格/37 2.1.3微服務架構是一種架構風格/40 2.2為應用程序定義微服務架構/43 2.2.1識別繫統操作/45 2.2.2根據業務能力進行服務拆分/50 2.2.3根據子域進行服務拆分/53 2.2.4拆分的指導原則/54 2.2.5拆分單體應用為服務的難點/56 2.2.6定義服務API/59 第3章微服務架構中的進程間通信/63 3.1微服務架構中的進程間通信概述/64 3.1.1交互方式/64 3.1.2在微服務架構中定義API/66 3.1.3API的演化/67 3.1.4消息的格式/69 3.2基於同步遠程過程調用模式的通信/70 3.2.1使用REST/71 3.2.2使用gRPC/74 3.2.3使用斷路器模式處理局部故障/75 3.2.4使用服務發現/78 3.3基於異步消息模式的通信/82 3.3.1什麼是消息傳遞/83 3.3.2使用消息機制實現交互方式/84 3.3.3為基於消息機制的服務API創建API規範/86 3.3.4使用消息代理/87 3.3.5處理並發和消息順序/91 3.3.6處理重復消息/92 3.3.7事務性消息/93 3.3.8消息相關的類庫和框架/97 3.4使用異步消息提高可用性/99 3.4.1同步消息會降低可用性/99 3.4.2消除同步交互/101 第4章使用Saga管理事務/106 4.1微服務架構下的事務管理/107 4.1.1微服務架構對分布式事務的需求/108 4.1.2分布式事務的挑戰/109 4.1.3使用Saga模式維護數據一致性/109 4.2Saga的協調模式/113 4.2.1協同式Saga/113 4.2.2編排式Saga/117 4.3解決隔離問題/121 4.3.1缺乏隔離導致的問題/122 4.3.2Saga模式下實現隔離的對策/123 4.4OrderService和CreateOrderSaga的設計/127 4.4.1OrderService類/128 4.4.2CreateOrderSaga的實現/129 4.4.3OrderCommandHandlers類/136 4.4.4OrderServiceConfiguration類/138 第5章微服務架構中的業務邏輯設計/141 5.1業務邏輯組織模式/142 5.1.1使用事務腳本模式設計業務邏輯/143 5.1.2使用領域模型模式設計業務邏輯/144 5.1.3關於領域驅動設計/146 5.2使用聚合模式設計領域模型/146 5.2.1模糊邊界所帶來的問題/147 5.2.2聚合擁有明確的邊界/149 5.2.3聚合的規則/150 5.2.4聚合的顆粒度/152 5.2.5使用聚合設計業務邏輯/153 5.3發布領域事件/154 5.3.1為什麼需要發布變更事件/154 5.3.2什麼是領域事件/155 5.3.3事件增強/155 5.3.4識別領域事件/156 5.3.5生成和發布領域事件/157 5.3.6消費領域事件/161 5.4KitchenService的業務邏輯/162 5.5OrderService的業務邏輯/167 5.5.1Order聚合/169 5.5.2OrderService類/173 第6章使用事件溯源開發業務邏輯/176 6.1使用事件溯源開發業務邏輯概述/177 6.1.1傳統持久化技術的問題/177 6.1.2什麼是事件溯源/179 6.1.3使用樂觀鎖處理並發更新/186 6.1.4事件溯源和發布事件/186 6.1.5使用快照提升性能/188 6.1.6冪等方式的消息處理/189 6.1.7領域事件的演化/190 6.1.8事件溯源的好處/192 6.1.9事件溯源的弊端/193 6.2實現事件存儲庫/194 6.2.1EventuateLocal事件存儲庫的工作原理/195 6.2.2Eventuate的Java客戶端框架/198 6.3同時使用Saga和事件溯源/201 6.3.1使用事件溯源實現協同式Saga/203 6.3.2創建編排式Saga/203 6.3.3實現基於事件溯源的Saga參與方/205 6.3.4實現基於事件溯源的Saga編排器/208 第7章在微服務架構中實現查詢/212 7.1使用API組合模式進行查詢/213 7.1.1findOrder()查詢操作/213 7.1.2什麼是API組合模式/214 7.1.3使用API組合模式實現findOrder()查詢操作/215 7.1.4API組合模式的設計缺陷/216 7.1.5API組合模式的好處和弊端/219 7.2使用CQRS模式/220 7.2.1為什麼要使用CQRS/220 7.2.2什麼是CQRS/223 7.2.3CQRS的好處/226 7.2.4CQRS的弊端/227 7.3設計CQRS視圖/228 7.3.1選擇視圖存儲庫/229 7.3.2設計數據訪問模塊/230 7.3.3添加和更新CQRS視圖/232 7.4實現基於AWSDynamoDB的CQRS視圖/233 7.4.1OrderHistoryEventHandlers模塊/234 7.4.2DynamoDB中的數據建模和查詢設計/235 7.4.3OrderHistoryDaoDynamoDb類/239 第8章外部API模式/244 8.1外部API的設計難題/245 8.1.1FTGO移動客戶端API的設計難題/246 8.1.2其他類型客戶端API的設計難題/248 8.2APIGateway模式/250 8.2.1什麼是APIGateway模式/250 8.2.2APIGateway模式的好處和弊端/256 8.2.3以Netflix為例的APIGateway/257 8.2.4APIGateway的設計難題/258 8.3實現一個APIGateway/260 8.3.1使用現成的APIGateway產品或服務/261 8.3.2開發自己的APIGateway/262 8.3.3使用GraphQL實現APIGateway/269 第9章微服務架構中的測試策略(上)/282 9.1微服務架構中的測試策略概述/284 9.1.1什麼是測試/284 9.1.2微服務架構中的測試挑戰/289 9.1.3部署流水線/295 9.2為服務測試/296 9.2.1為實體測試/298 9.2.2為值對像測試/299 9.2.3為Saga測試/300 9.2.4為領域服務測試/302 9.2.5為控制器測試/303 9.2.6為事件和消息處理程序測試/305 第10章微服務架構中的測試策略(下)/308 10.1編寫集成測試/308 10.1.1針對持久化層的集成測試/311 10.1.2針對基於REST的請求/響應式交互的集成測試/312 10.1.3針對發布/訂閱式交互的集成測試/316 10.1.4針對異步請求/響應式交互的集成契約測試/320 10.2編寫組件測試/324 10.2.1定義驗收測試/325 10.2.2使用Gherkin編寫驗收測試/326 10.2.3設計組件測試/328 10.2.4為FTGO的OrderService編寫組件測試/330 10.3端到端測試/334 10.3.1設計端到端測試/335 10.3.2編寫端到端測試/335 10.3.3運行端到端測試/336 第11章開發面向生產環境的微服務應用/338 11.1開發安全的服務/339 11.1.1傳統單體應用程序的安全性/340 11.1.2在微服務架構中實現安全性/343 11.2設計可配置的服務/349 11.2.1使用基於推送的外部化配置/350 11.2.2使用基於拉取的外部化配置/352 11.3設計可觀測的服務/353 11.3.1使用健康檢查API模式/355 11.3.2使用日志聚合模式/357 11.3.3使用分布式追蹤模式/358 11.3.4使用應用程序指標模式/361 11.3.5使用異常追蹤模式/364 11.3.6使用審計日志模式/365 11.4使用微服務基底模式開發服務/367 11.4.1使用微服務基底/368 11.4.2從微服務基底到服務網格/368 第12章部署微服務應用/371 12.1部署模式:編程語言特定的發布包格式/374 12.1.1使用編程語言特定的發布包格式進行部署的好處/376 12.1.2使用編程語言特定的發布包格式進行部署的弊端/377 12.2部署模式:將服務部署為虛擬機/378 12.2.1將服務部署為虛擬機的好處/380 12.2.2將服務部署為虛擬機的弊端/380 12.3部署模式:將服務部署為容器/381 12.3.1使用Docker部署服務/383 12.3.2將服務部署為容器的好處/385 12.3.3將服務部署為容器的弊端/386 12.4使用Kubernetes部署FTGO應用程序/386 12.4.1什麼是Kubernetes/386 12.4.2在Kubernetes上部署RestaurantService/389 12.4.3部署APIGateway/392 12.4.4零停機部署/393 12.4.5使用服務網格分隔部署與發布流程/394 12.5部署模式:Serverless部署/402 12.5.1使用AWSLambda進行Serverless部署/403 12.5.2開發Lambda函數/404 12.5.3調用Lambda函數/404 12.5.4使用Lambda函數的好處/405 12.5.5使用Lambda函數的弊端/406 12.6使用AWSLambda和AWSGateway部署RESTful服務/406 12.6.1AWSLambda版本的RestaurantService/407 12.6.2把服務打包為ZIP文件/411 12.6.3使用Serverless框架部署Lambda函數/412 第13章微服務架構的重構策略/415 13.1重構到微服務需要考慮的問題/416 13.1.1為什麼要重構單體應用/416 13.1.2絞殺單體應用/417 13.2將單體應用重構為微服務架構的若干策略/420 13.2.1將新功能實現為服務/420 13.2.2隔離表現層與後端/422 13.2.3提取業務能力到服務中/423 13.3設計服務與單體的協作方式/429 13.3.1設計集成膠水/430 13.3.2在服務和單體之間維持數據一致性/434 13.3.3處理身份驗證和訪問授權/438 13.4將新功能實現為服務:處理錯誤配送訂單/440 13.4.1DelayedDeliveryService的設計/441 13.4.2為DelayedDeliveryService設計集成膠水/442 13.5從單體中提取送餐管理功能/444 13.5.1現有的送餐管理功能/444 13.5.2DeliveryService概覽/446 13.5.3設計DeliveryService的領域模型/447 13.5.4DeliveryService集成膠水的設計/450 13.5.5修改FTGO單體使其能夠與DeliveryService交互/451 本書共13章,第1章引入了微服務架構模式語言的概述;第2章解釋了為什麼軟件架構很重要,並描述了可用於將應用程序分解為服務的模式;第3章介紹了微服務架構中強大的進程間通信的幾種模式;第4章介紹Saga模式;第5章介紹領域驅動設計(DDD)的聚合和領域事件等模式的使用;第6章介紹如何使用事件溯源模式;第7章介紹如何使用API組合模式或命令查詢責任隔離(CQRS)模式;第8章介紹外部API模式;第9章和第10章介紹微服務自動化測試技術;第11章介紹開發生產就緒服務的各個方面;第12章介紹部署模式;第13章介紹絞殺者模式。 ![](https://img10.360buyimg.com/imgzone/jfs/t1/147514/7/5440/73116/5f34a3beE3ba58783/f5b2391383f5625c.jpg)
" |