微服務(wù)與事件驅(qū)動(dòng)架構(gòu)
定 價(jià):99.8 元
微服務(wù)既有同步實(shí)現(xiàn),亦有異步實(shí)現(xiàn)。異步微服務(wù)架構(gòu)以事件驅(qū)動(dòng),不受特定的API限制,系統(tǒng)的耦合度低,可擴(kuò)展性強(qiáng)。本書(shū)教你從頭開(kāi)始構(gòu)建完整的事件驅(qū)動(dòng)型微服務(wù)架構(gòu),根據(jù)實(shí)際的業(yè)務(wù)需求調(diào)整、擴(kuò)展微服務(wù),更好地實(shí)踐持續(xù)交付,并以新的視角思考如何充分利用實(shí)時(shí)數(shù)據(jù)的價(jià)值。
1.本書(shū)從頭開(kāi)始,為讀者講解如何構(gòu)建完整的事件驅(qū)動(dòng)型微服務(wù)架構(gòu),站在初學(xué)的角度進(jìn)行了細(xì)致的講解。2.本書(shū)為構(gòu)建事件驅(qū)動(dòng)型微服務(wù)提供了實(shí)用框架,讓技術(shù)選型更靈活,應(yīng)對(duì)不斷變化的業(yè)務(wù)需求,實(shí)現(xiàn)持續(xù)交付。3.本書(shū)適合軟件架構(gòu)師、系統(tǒng)設(shè)計(jì)師、數(shù)據(jù)工程師等相關(guān)從業(yè)者進(jìn)行系統(tǒng)的學(xué)習(xí),主要講解了以下內(nèi)容:●如何利用事件驅(qū)動(dòng)架構(gòu)更好地實(shí)現(xiàn)商業(yè)價(jià)值●微服務(wù)在事件驅(qū)動(dòng)架構(gòu)設(shè)計(jì)中的角色●確保團(tuán)隊(duì)取得成功的架構(gòu)模式●開(kāi)發(fā)強(qiáng)大的事件驅(qū)動(dòng)型微服務(wù)所需的應(yīng)用模式●落地微服務(wù)生態(tài)系統(tǒng)所需的組件和工具
亞當(dāng)·貝勒馬爾(Adam Bellemare),Confluent公司微服務(wù)架構(gòu)師,精通大數(shù)據(jù)技術(shù),曾受邀在Kafka峰會(huì)上做有關(guān)事件驅(qū)動(dòng)型微服務(wù)的主題演講。 【譯者簡(jiǎn)介】 溫正東,華南理工大學(xué)計(jì)算機(jī)碩士,曾任華為公司信息技術(shù)工程師,現(xiàn)任富途證券網(wǎng)絡(luò)增長(zhǎng)研發(fā)總監(jiān),另譯有《Web安全開(kāi)發(fā)指南》。
前言 xv第 1 章 為什么用事件驅(qū)動(dòng)型微服務(wù) 11.1 什么是事件驅(qū)動(dòng)型微服務(wù) 21.2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)和界限上下文 31.2.1 運(yùn)用領(lǐng)域模型和界限上下文 41.2.2 保持界限上下文與業(yè)務(wù)需求一致 41.3 溝通結(jié)構(gòu) 51.3.1 業(yè)務(wù)溝通結(jié)構(gòu) 51.3.2 實(shí)現(xiàn)溝通結(jié)構(gòu) 61.3.3 數(shù)據(jù)溝通結(jié)構(gòu) 71.3.4 康威定律和溝通結(jié)構(gòu) 71.4 傳統(tǒng)計(jì)算中的溝通結(jié)構(gòu) 81.4.1 選項(xiàng)1:創(chuàng)建一個(gè)新服務(wù) 81.4.2 選項(xiàng)2:將它加入現(xiàn)有服務(wù)中 91.4.3 兩種選項(xiàng)的利弊 91.4.4 團(tuán)隊(duì)場(chǎng)景(續(xù)) 101.4.5 沖突的壓力 101.5 事件驅(qū)動(dòng)的溝通結(jié)構(gòu) 111.5.1 事件是通信的基礎(chǔ) 111.5.2 事件流提供了單一事實(shí)來(lái)源 111.5.3 消費(fèi)者執(zhí)行自己的建模和查詢 111.5.4 整個(gè)組織的數(shù)據(jù)溝通得到改善 121.5.5 高可訪問(wèn)的數(shù)據(jù)利于業(yè)務(wù)變更 121.6 異步的事件驅(qū)動(dòng)型微服務(wù) 121.7 同步式微服務(wù) 141.7.1 同步式微服務(wù)的缺點(diǎn) 141.7.2 同步式微服務(wù)的優(yōu)點(diǎn) 151.8 小結(jié) 16第 2 章 事件驅(qū)動(dòng)型微服務(wù)基礎(chǔ) 172.1 構(gòu)建拓?fù)洹?72.1.1 微服務(wù)拓?fù)洹?72.1.2 業(yè)務(wù)拓?fù)洹?82.2 事件內(nèi)容 192.3 事件的結(jié)構(gòu) 192.3.1 無(wú)鍵事件 192.3.2 實(shí)體事件 202.3.3 鍵控事件 202.4 物化來(lái)自實(shí)體事件的狀態(tài) 202.5 事件數(shù)據(jù)的定義和schema 222.6 微服務(wù)單一寫(xiě)原則 222.7 用事件代理賦能微服務(wù) 232.7.1 事件存儲(chǔ)和服務(wù) 232.7.2 需要考慮的其他因素 242.8 事件代理與消息代理 252.8.1 從不可變?nèi)罩局邢M(fèi) 262.8.2 提供單一事實(shí)來(lái)源 272.9 大規(guī)模管理微服務(wù) 282.9.1 將微服務(wù)放到容器內(nèi) 282.9.2 將微服務(wù)放到虛擬機(jī)內(nèi) 282.9.3 管理容器和虛擬機(jī) 282.10 繳納微服務(wù)稅 292.11 小結(jié) 30第 3 章 通信和數(shù)據(jù)契約 313.1 事件驅(qū)動(dòng)數(shù)據(jù)契約 313.1.1 使用顯式schema作為契約 323.1.2 schema定義的注釋 323.1.3 全能的schema演化 333.1.4 有代碼生成器支持 333.1.5 破壞性的schema變更 343.2 選擇事件格式 363.3 設(shè)計(jì)事件 363.3.1 只講述事實(shí) 363.3.2 每個(gè)流都使用單一事件定義 373.3.3 使用窄的數(shù)據(jù)類(lèi)型 373.3.4 保持事件的單一用途 373.3.5 小化事件 403.3.6 讓潛在的消費(fèi)者參與事件設(shè)計(jì) 403.3.7 避免將事件作為信號(hào)量或信號(hào) 413.4 小結(jié) 41第 4 章 將事件驅(qū)動(dòng)架構(gòu)與現(xiàn)有系統(tǒng)集成 424.1 什么是數(shù)據(jù)解放 434.1.1 數(shù)據(jù)解放的折中方案 434.1.2 將被解放的數(shù)據(jù)轉(zhuǎn)化成事件 454.2 數(shù)據(jù)解放模式 454.3 數(shù)據(jù)解放框架 464.4 通過(guò)查詢實(shí)施數(shù)據(jù)解放 464.4.1 批量加載 474.4.2 增量時(shí)間戳加載 474.4.3 自增ID 加載 474.4.4 自定義查詢 474.4.5 增量更新 474.4.6 基于查詢更新的優(yōu)點(diǎn) 484.4.7 基于查詢更新的缺點(diǎn) 484.5 使用變更數(shù)據(jù)捕獲日志解放數(shù)據(jù) 494.5.1 使用數(shù)據(jù)存儲(chǔ)日志的優(yōu)點(diǎn) 504.5.2 使用數(shù)據(jù)庫(kù)日志的缺點(diǎn) 504.6 使用發(fā)件箱表解放數(shù)據(jù) 514.6.1 性能考慮 524.6.2 隔離內(nèi)部數(shù)據(jù)模型 524.6.3 確保schema兼容性 534.6.4 使用觸發(fā)器捕獲變更數(shù)據(jù) 564.7 對(duì)處于捕獲的數(shù)據(jù)集做數(shù)據(jù)定義變更 594.7.1 為查詢和CDC日志模式處理事后數(shù)據(jù)定義變更 604.7.2 為變更數(shù)據(jù)表捕獲模式處理數(shù)據(jù)定義變更 604.8 將事件數(shù)據(jù)落地到數(shù)據(jù)存儲(chǔ) 604.9 數(shù)據(jù)落地和獲取對(duì)業(yè)務(wù)的影響 604.10 小結(jié) 62第 5 章 事件驅(qū)動(dòng)處理基礎(chǔ) 635.1 構(gòu)建無(wú)狀態(tài)拓?fù)洹?45.1.1 轉(zhuǎn)換 645.1.2 分流與合流 655.2 對(duì)事件流再分區(qū) 655.3 對(duì)事件流協(xié)同分區(qū) 665.4 給消費(fèi)者實(shí)例分配分區(qū) 675.4.1 使用分區(qū)分配器分配分區(qū) 685.4.2 分配協(xié)同分區(qū) 685.4.3 分區(qū)分配策略 685.5 從無(wú)狀態(tài)處理實(shí)例故障中恢復(fù) 705.6 小結(jié) 70第 6 章 具有確定性的流處理 716.1 事件驅(qū)動(dòng)工作流的確定性 726.2 時(shí)間戳 726.2.1 同步分布式時(shí)間戳 736.2.2 處理帶時(shí)間戳的事件 746.3 事件調(diào)度和確定性處理 756.3.1 自定義事件調(diào)度器 756.3.2 基于事件時(shí)間、處理時(shí)間和攝取時(shí)間進(jìn)行處理 756.3.3 消費(fèi)者提取時(shí)間戳 766.3.4 對(duì)外部系統(tǒng)的請(qǐng)求?C響應(yīng)調(diào)用 766.4 水位 766.5 流時(shí)間 786.6 亂序事件和遲到事件 806.6.1 使用水位和流時(shí)間的遲到事件 816.6.2 亂序事件的原因和影響 816.6.3 時(shí)間敏感的函數(shù)和窗口化 836.7 處理遲到事件 856.8 再處理與近實(shí)時(shí)處理 866.9 間歇性故障和遲到事件 866.10 生產(chǎn)者/事件代理的連接性問(wèn)題 876.11 小結(jié)與延展閱讀 88第 7 章 有狀態(tài)的流 897.1 狀態(tài)存儲(chǔ)與從事件流中物化狀態(tài) 897.2 記錄狀態(tài)到變更日志事件流 907.3 將狀態(tài)物化至內(nèi)部狀態(tài)存儲(chǔ) 917.3.1 物化全局狀態(tài) 927.3.2 使用內(nèi)部狀態(tài)的優(yōu)點(diǎn) 927.3.3 使用內(nèi)部狀態(tài)的缺點(diǎn) 937.3.4 內(nèi)部狀態(tài)的伸縮和恢復(fù) 937.4 將狀態(tài)物化至外部狀態(tài)存儲(chǔ) 967.4.1 外部狀態(tài)的優(yōu)點(diǎn) 977.4.2 外部狀態(tài)的缺點(diǎn) 977.4.3 外部狀態(tài)存儲(chǔ)的伸縮和恢復(fù) 987.5 重建與遷移狀態(tài)存儲(chǔ) 997.5.1 重建 997.5.2 遷移 1007.6 事務(wù)與有效一次處理 1007.6.1 示例:庫(kù)存計(jì)算服務(wù) 1017.6.2 使用客戶端?C代理事務(wù)的有效一次處理 1027.6.3 沒(méi)有客戶端?C代理事務(wù)的有效一次處理 1037.7 小結(jié) 107第 8 章 用微服務(wù)構(gòu)建工作流 1088.1 編排模式 1098.1.1 一個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)編排示例 1098.1.2 創(chuàng)建和修改編排的工作流 1108.1.3 監(jiān)控編排的工作流 1108.2 編制模式 1118.2.1 一個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)編制模式例子 1128.2.2 一個(gè)簡(jiǎn)單的直接調(diào)用的編制模式例子 1138.2.3 對(duì)比事件驅(qū)動(dòng)編制模式和直接調(diào)用的編制模式 1148.2.4 創(chuàng)建和修改編制工作流 1148.2.5 監(jiān)控編制工作流 1158.3 分布式事務(wù) 1158.3.1 編排型事務(wù):saga模式 1158.3.2 編制型事務(wù) 1178.4 補(bǔ)償工作流 1198.5 小結(jié) 119第 9 章 使用函數(shù)即服務(wù)的微服務(wù) 1209.1 設(shè)計(jì)基于函數(shù)的微服務(wù)解決方案 1209.1.1 確保界限上下文的嚴(yán)格的成員關(guān)系 1209.1.2 只在完成處理之后提交偏移量 1219.1.3 少即是多 1219.2 選擇FaaS供應(yīng)商 1229.3 在函數(shù)之外構(gòu)建微服務(wù) 1229.4 冷啟動(dòng)和熱啟動(dòng) 1239.5 用觸發(fā)器啟動(dòng)函數(shù) 1249.5.1 基于新事件觸發(fā):事件流監(jiān)聽(tīng)器 1249.5.2 基于消費(fèi)者組的滯后度觸發(fā) 1259.5.3 按調(diào)度表觸發(fā) 1269.5.4 使用網(wǎng)絡(luò)鉤子觸發(fā) 1269.5.5 觸發(fā)資源事件 1279.6 用函數(shù)執(zhí)行業(yè)務(wù)工作 1279.7 維持狀態(tài) 1279.8 調(diào)用其他函數(shù)的函數(shù) 1289.8.1 事件驅(qū)動(dòng)通信模式 1289.8.2 直接調(diào)用模式 1299.9 終止和關(guān)閉 1319.10 調(diào)整函數(shù) 1329.10.1 分配足夠的資源 1329.10.2 批量事件處理的參數(shù) 1329.11 FaaS的伸縮方案 1329.12 小結(jié) 133第 10 章 基礎(chǔ)的生產(chǎn)者和消費(fèi)者微服務(wù) 13410.1 BPC的適用場(chǎng)合 13410.1.1 集成現(xiàn)有遺留系統(tǒng) 13510.1.2 不依賴于事件順序的有狀態(tài)的業(yè)務(wù)邏輯 13610.1.3 當(dāng)數(shù)據(jù)層完成大部分工作時(shí) 13710.1.4 處理層和數(shù)據(jù)層獨(dú)立伸縮 13710.2 具有外部流處理的混合BPC應(yīng)用程序 13810.3 小結(jié) 140第 11 章 使用重量級(jí)框架的微服務(wù) 14111.1 重量級(jí)框架的簡(jiǎn)單歷史 14211.2 重量級(jí)框架的內(nèi)部運(yùn)作 14211.3 優(yōu)點(diǎn)和局限性 14411.4 集群搭建方案和執(zhí)行模式 14511.4.1 使用托管服務(wù) 14611.4.2 構(gòu)建自己的完整集群 14611.4.3 使用CMS集成來(lái)創(chuàng)建集群 14611.5 應(yīng)用程序提交模式 14811.5.1 驅(qū)動(dòng)器模式 14811.5.2 集群模式 14811.6 處理狀態(tài)和使用檢查點(diǎn) 14811.7 伸縮應(yīng)用程序和處理事件流分區(qū) 14911.7.1 伸縮運(yùn)行中的應(yīng)用程序 15011.7.2 通過(guò)重啟伸縮應(yīng)用程序 15311.7.3 自動(dòng)伸縮應(yīng)用程序 15311.8 從故障中恢復(fù) 15311.9 考慮多租戶問(wèn)題 15311.10 語(yǔ)言和語(yǔ)法 15411.11 選擇一個(gè)框架 15411.12 示例:點(diǎn)擊和觀看的會(huì)話窗口 15511.13 小結(jié) 157第 12 章 使用輕量級(jí)框架的微服務(wù) 15812.1 優(yōu)點(diǎn)和局限性 15812.2 輕量級(jí)處理 15912.3 處理狀態(tài)和使用變更日志 15912.4 伸縮和故障恢復(fù) 16012.4.1 事件洗牌 16012.4.2 狀態(tài)分配 16112.4.3 狀態(tài)復(fù)制和熱副本 16112.5 選擇一個(gè)輕量級(jí)框架 16112.5.1 Apache Kafka Streams 16212.5.2 Apache Samza:嵌入模式 16212.6 語(yǔ)言和語(yǔ)法 16212.7 流?C表?C表聯(lián)結(jié):增強(qiáng)模式 16312.8 小結(jié) 166第 13 章 集成事件驅(qū)動(dòng)型和請(qǐng)求?C響應(yīng)型微服務(wù) 16713.1 處理外部事件 16713.1.1 自動(dòng)生成的事件 16813.1.2 由響應(yīng)生成的事件 16813.2 處理自動(dòng)生成的分析事件 16813.3 集成第三方請(qǐng)求?C響應(yīng)API 17013.4 處理并提供有狀態(tài)的數(shù)據(jù) 17113.4.1 實(shí)時(shí)請(qǐng)求內(nèi)部狀態(tài)存儲(chǔ) 17213.4.2 實(shí)時(shí)請(qǐng)求外部狀態(tài)存儲(chǔ) 17513.5 在事件驅(qū)動(dòng)的工作流中處理請(qǐng)求 17713.6 請(qǐng)求?C響應(yīng)應(yīng)用程序中的微前端 18313.7 微前端的優(yōu)點(diǎn) 18413.7.1 基于組合的微服務(wù) 18413.7.2 容易與業(yè)務(wù)需求對(duì)齊 18513.8 微前端的缺點(diǎn) 18513.8.1 可能不一致的UI元素和樣式 18513.8.2 不同的微前端性能 18513.8.3 示例:體驗(yàn)搜索與評(píng)論應(yīng)用程序 18613.9 小結(jié) 188第 14 章 支持性工具 19014.1 微服務(wù)?C團(tuán)隊(duì)分配系統(tǒng) 19014.2 事件流的創(chuàng)建和修改 19114.3 事件流元數(shù)據(jù)標(biāo)記 19114.4 限額 19214.5 schema注冊(cè)表 19214.6 schema創(chuàng)建和修改通知 19314.7 偏移量管理 19314.8 事件流的權(quán)限和訪問(wèn)控制列表 19414.9 狀態(tài)管理和應(yīng)用程序重置 19514.10 消費(fèi)者偏移量滯后度監(jiān)控 19614.11 流水線型的微服務(wù)創(chuàng)建流程 19614.12 容器管理控制 19714.13 集群創(chuàng)建和管理 19714.13.1 事件代理的程序化創(chuàng)建 19714.13.2 計(jì)算資源的程序化創(chuàng)建 19814.13.3 跨集群事件數(shù)據(jù)復(fù)制 19814.13.4 工具的程序化創(chuàng)建 19814.14 依賴跟蹤和拓?fù)淇梢暬?9914.15 小結(jié) 202第 15 章 測(cè)試事件驅(qū)動(dòng)型微服務(wù) 20315.1 通用測(cè)試原則 20315.2 單元測(cè)試拓?fù)浜瘮?shù) 20315.2.1 無(wú)狀態(tài)的函數(shù) 20415.2.2 有狀態(tài)的函數(shù) 20415.3 測(cè)試拓?fù)洹?0515.4 測(cè)試schema演化和兼容性 20515.5 事件驅(qū)動(dòng)型微服務(wù)的集成測(cè)試 20615.6 本地集成測(cè)試 20615.6.1 在測(cè)試代碼的運(yùn)行時(shí)內(nèi)創(chuàng)建臨時(shí)環(huán)境 20815.6.2 在測(cè)試代碼外部創(chuàng)建臨時(shí)環(huán)境 20915.6.3 使用mocking和模擬器方法集成托管服務(wù) 20915.6.4 集成沒(méi)有本地支持的遠(yuǎn)程服務(wù) 21015.7 完全遠(yuǎn)程集成測(cè)試 21115.7.1 程序化創(chuàng)建臨時(shí)集成測(cè)試環(huán)境 21115.7.2 使用共享環(huán)境進(jìn)行測(cè)試 21315.7.3 使用生產(chǎn)環(huán)境進(jìn)行測(cè)試 21415.8 選擇你的完全遠(yuǎn)程集成測(cè)試策略 21415.9 小結(jié) 215第 16 章 部署事件驅(qū)動(dòng)型微服務(wù) 21616.1 微服務(wù)部署的原則 21616.2 微服務(wù)部署的架構(gòu)組件 21716.2.1 持續(xù)集成系統(tǒng)、持續(xù)交付系統(tǒng)和持續(xù)部署系統(tǒng) 21716.2.2 CMS和商業(yè)硬件 21816.3 基本的全站式部署模式 21816.4 滾動(dòng)更新模式 22016.5 破壞性的schema變更模式 22016.5.1 通過(guò)兩個(gè)事件流達(dá)到終遷移 22216.5.2 同步遷移到新事件流 22216.6 藍(lán)綠部署模式 22316.7 小結(jié) 224第 17 章 結(jié)論 22517.1 通信層 22517.2 業(yè)務(wù)領(lǐng)域和界限上下文 22617.3 可共享的工具和基礎(chǔ)設(shè)施 22617.4 結(jié)構(gòu)化事件 22617.5 數(shù)據(jù)解放和單一事實(shí)來(lái)源 22717.6 微服務(wù) 22717.7 微服務(wù)實(shí)現(xiàn)方案 22817.8 測(cè)試 22817.9 部署 22917.10 結(jié)語(yǔ) 229關(guān)于作者 230關(guān)于封面 230