注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)微服務(wù)與事件驅(qū)動(dòng)架構(gòu)

微服務(wù)與事件驅(qū)動(dòng)架構(gòu)

微服務(wù)與事件驅(qū)動(dòng)架構(gòu)

定 價(jià):¥99.80

作 者: [加] 亞當(dāng)·貝勒馬爾(Adam Bellemare) 著,溫正東 譯
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115571106 出版時(shí)間: 2021-10-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 230 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  微服務(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à)值。

作者簡(jiǎn)介

  亞當(dāng)·貝勒馬爾(Adam Bellemare),Confluent公司微服務(wù)架構(gòu)師,精通大數(shù)據(jù)技術(shù),曾受邀在Kafka峰會(huì)上做有關(guān)事件驅(qū)動(dòng)型微服務(wù)的主題演講?!咀g者簡(jiǎn)介】溫正東,華南理工大學(xué)計(jì)算機(jī)碩士,曾任華為公司信息技術(shù)工程師,現(xiàn)任富途證券網(wǎng)絡(luò)增長(zhǎng)研發(fā)總監(jiān),另譯有《Web安全開(kāi)發(fā)指南》。

圖書(shū)目錄

前言 xv
第 1 章 為什么用事件驅(qū)動(dòng)型微服務(wù) 1
1.1 什么是事件驅(qū)動(dòng)型微服務(wù) 2
1.2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)和界限上下文 3
1.2.1 運(yùn)用領(lǐng)域模型和界限上下文 4
1.2.2 保持界限上下文與業(yè)務(wù)需求一致 4
1.3 溝通結(jié)構(gòu) 5
1.3.1 業(yè)務(wù)溝通結(jié)構(gòu) 5
1.3.2 實(shí)現(xiàn)溝通結(jié)構(gòu) 6
1.3.3 數(shù)據(jù)溝通結(jié)構(gòu) 7
1.3.4 康威定律和溝通結(jié)構(gòu) 7
1.4 傳統(tǒng)計(jì)算中的溝通結(jié)構(gòu) 8
1.4.1 選項(xiàng)1:創(chuàng)建一個(gè)新服務(wù) 8
1.4.2 選項(xiàng)2:將它加入現(xiàn)有服務(wù)中 9
1.4.3 兩種選項(xiàng)的利弊 9
1.4.4 團(tuán)隊(duì)場(chǎng)景(續(xù)) 10
1.4.5 沖突的壓力 10
1.5 事件驅(qū)動(dòng)的溝通結(jié)構(gòu) 11
1.5.1 事件是通信的基礎(chǔ) 11
1.5.2 事件流提供了單一事實(shí)來(lái)源 11
1.5.3 消費(fèi)者執(zhí)行自己的建模和查詢(xún) 11
1.5.4 整個(gè)組織的數(shù)據(jù)溝通得到改善 12
1.5.5 高可訪問(wèn)的數(shù)據(jù)利于業(yè)務(wù)變更 12
1.6 異步的事件驅(qū)動(dòng)型微服務(wù) 12
1.7 同步式微服務(wù) 14
1.7.1 同步式微服務(wù)的缺點(diǎn) 14
1.7.2 同步式微服務(wù)的優(yōu)點(diǎn) 15
1.8 小結(jié) 16
第 2 章 事件驅(qū)動(dòng)型微服務(wù)基礎(chǔ) 17
2.1 構(gòu)建拓?fù)洹?7
2.1.1 微服務(wù)拓?fù)洹?7
2.1.2 業(yè)務(wù)拓?fù)洹?8
2.2 事件內(nèi)容 19
2.3 事件的結(jié)構(gòu) 19
2.3.1 無(wú)鍵事件 19
2.3.2 實(shí)體事件 20
2.3.3 鍵控事件 20
2.4 物化來(lái)自實(shí)體事件的狀態(tài) 20
2.5 事件數(shù)據(jù)的定義和schema 22
2.6 微服務(wù)單一寫(xiě)原則 22
2.7 用事件代理賦能微服務(wù) 23
2.7.1 事件存儲(chǔ)和服務(wù) 23
2.7.2 需要考慮的其他因素 24
2.8 事件代理與消息代理 25
2.8.1 從不可變?nèi)罩局邢M(fèi) 26
2.8.2 提供單一事實(shí)來(lái)源 27
2.9 大規(guī)模管理微服務(wù) 28
2.9.1 將微服務(wù)放到容器內(nèi) 28
2.9.2 將微服務(wù)放到虛擬機(jī)內(nèi) 28
2.9.3 管理容器和虛擬機(jī) 28
2.10 繳納微服務(wù)稅 29
2.11 小結(jié) 30
第 3 章 通信和數(shù)據(jù)契約 31
3.1 事件驅(qū)動(dòng)數(shù)據(jù)契約 31
3.1.1 使用顯式schema作為契約 32
3.1.2 schema定義的注釋 32
3.1.3 全能的schema演化 33
3.1.4 有代碼生成器支持 33
3.1.5 破壞性的schema變更 34
3.2 選擇事件格式 36
3.3 設(shè)計(jì)事件 36
3.3.1 只講述事實(shí) 36
3.3.2 每個(gè)流都使用單一事件定義 37
3.3.3 使用最窄的數(shù)據(jù)類(lèi)型 37
3.3.4 保持事件的單一用途 37
3.3.5 最小化事件 40
3.3.6 讓潛在的消費(fèi)者參與事件設(shè)計(jì) 40
3.3.7 避免將事件作為信號(hào)量或信號(hào) 41
3.4 小結(jié) 41
第 4 章 將事件驅(qū)動(dòng)架構(gòu)與現(xiàn)有系統(tǒng)集成 42
4.1 什么是數(shù)據(jù)解放 43
4.1.1 數(shù)據(jù)解放的折中方案 43
4.1.2 將被解放的數(shù)據(jù)轉(zhuǎn)化成事件 45
4.2 數(shù)據(jù)解放模式 45
4.3 數(shù)據(jù)解放框架 46
4.4 通過(guò)查詢(xún)實(shí)施數(shù)據(jù)解放 46
4.4.1 批量加載 47
4.4.2 增量時(shí)間戳加載 47
4.4.3 自增ID 加載 47
4.4.4 自定義查詢(xún) 47
4.4.5 增量更新 47
4.4.6 基于查詢(xún)更新的優(yōu)點(diǎn) 48
4.4.7 基于查詢(xún)更新的缺點(diǎn) 48
4.5 使用變更數(shù)據(jù)捕獲日志解放數(shù)據(jù) 49
4.5.1 使用數(shù)據(jù)存儲(chǔ)日志的優(yōu)點(diǎn) 50
4.5.2 使用數(shù)據(jù)庫(kù)日志的缺點(diǎn) 50
4.6 使用發(fā)件箱表解放數(shù)據(jù) 51
4.6.1 性能考慮 52
4.6.2 隔離內(nèi)部數(shù)據(jù)模型 52
4.6.3 確保schema兼容性 53
4.6.4 使用觸發(fā)器捕獲變更數(shù)據(jù) 56
4.7 對(duì)處于捕獲的數(shù)據(jù)集做數(shù)據(jù)定義變更 59
4.7.1 為查詢(xún)和CDC日志模式處理事后數(shù)據(jù)定義變更 60
4.7.2 為變更數(shù)據(jù)表捕獲模式處理數(shù)據(jù)定義變更 60
4.8 將事件數(shù)據(jù)落地到數(shù)據(jù)存儲(chǔ) 60
4.9 數(shù)據(jù)落地和獲取對(duì)業(yè)務(wù)的影響 60
4.10 小結(jié) 62
第 5 章 事件驅(qū)動(dòng)處理基礎(chǔ) 63
5.1 構(gòu)建無(wú)狀態(tài)拓?fù)洹?4
5.1.1 轉(zhuǎn)換 64
5.1.2 分流與合流 65
5.2 對(duì)事件流再分區(qū) 65
5.3 對(duì)事件流協(xié)同分區(qū) 66
5.4 給消費(fèi)者實(shí)例分配分區(qū) 67
5.4.1 使用分區(qū)分配器分配分區(qū) 68
5.4.2 分配協(xié)同分區(qū) 68
5.4.3 分區(qū)分配策略 68
5.5 從無(wú)狀態(tài)處理實(shí)例故障中恢復(fù) 70
5.6 小結(jié) 70
第 6 章 具有確定性的流處理 71
6.1 事件驅(qū)動(dòng)工作流的確定性 72
6.2 時(shí)間戳 72
6.2.1 同步分布式時(shí)間戳 73
6.2.2 處理帶時(shí)間戳的事件 74
6.3 事件調(diào)度和確定性處理 75
6.3.1 自定義事件調(diào)度器 75
6.3.2 基于事件時(shí)間、處理時(shí)間和攝取時(shí)間進(jìn)行處理 75
6.3.3 消費(fèi)者提取時(shí)間戳 76
6.3.4 對(duì)外部系統(tǒng)的“請(qǐng)求–響應(yīng)”調(diào)用 76
6.4 水位 76
6.5 流時(shí)間 78
6.6 亂序事件和遲到事件 80
6.6.1 使用水位和流時(shí)間的遲到事件 81
6.6.2 亂序事件的原因和影響 81
6.6.3 時(shí)間敏感的函數(shù)和窗口化 83
6.7 處理遲到事件 85
6.8 再處理與近實(shí)時(shí)處理 86
6.9 間歇性故障和遲到事件 86
6.10 生產(chǎn)者/事件代理的連接性問(wèn)題 87
6.11 小結(jié)與延展閱讀 88
第 7 章 有狀態(tài)的流 89
7.1 狀態(tài)存儲(chǔ)與從事件流中物化狀態(tài) 89
7.2 記錄狀態(tài)到變更日志事件流 90
7.3 將狀態(tài)物化至內(nèi)部狀態(tài)存儲(chǔ) 91
7.3.1 物化全局狀態(tài) 92
7.3.2 使用內(nèi)部狀態(tài)的優(yōu)點(diǎn) 92
7.3.3 使用內(nèi)部狀態(tài)的缺點(diǎn) 93
7.3.4 內(nèi)部狀態(tài)的伸縮和恢復(fù) 93
7.4 將狀態(tài)物化至外部狀態(tài)存儲(chǔ) 96
7.4.1 外部狀態(tài)的優(yōu)點(diǎn) 97
7.4.2 外部狀態(tài)的缺點(diǎn) 97
7.4.3 外部狀態(tài)存儲(chǔ)的伸縮和恢復(fù) 98
7.5 重建與遷移狀態(tài)存儲(chǔ) 99
7.5.1 重建 99
7.5.2 遷移 100
7.6 事務(wù)與有效一次處理 100
7.6.1 示例:庫(kù)存計(jì)算服務(wù) 101
7.6.2 使用“客戶(hù)端–代理”事務(wù)的有效一次處理 102
7.6.3 沒(méi)有“客戶(hù)端–代理”事務(wù)的有效一次處理 103
7.7 小結(jié) 107
第 8 章 用微服務(wù)構(gòu)建工作流 108
8.1 編排模式 109
8.1.1 一個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)編排示例 109
8.1.2 創(chuàng)建和修改編排的工作流 110
8.1.3 監(jiān)控編排的工作流 110
8.2 編制模式 111
8.2.1 一個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)編制模式例子 112
8.2.2 一個(gè)簡(jiǎn)單的直接調(diào)用的編制模式例子 113
8.2.3 對(duì)比事件驅(qū)動(dòng)編制模式和直接調(diào)用的編制模式 114
8.2.4 創(chuàng)建和修改編制工作流 114
8.2.5 監(jiān)控編制工作流 115
8.3 分布式事務(wù) 115
8.3.1 編排型事務(wù):saga模式 115
8.3.2 編制型事務(wù) 117
8.4 補(bǔ)償工作流 119
8.5 小結(jié) 119
第 9 章 使用“函數(shù)即服務(wù)”的微服務(wù) 120
9.1 設(shè)計(jì)基于函數(shù)的微服務(wù)解決方案 120
9.1.1 確保界限上下文的嚴(yán)格的成員關(guān)系 120
9.1.2 只在完成處理之后提交偏移量 121
9.1.3 少即是多 121
9.2 選擇FaaS供應(yīng)商 122
9.3 在函數(shù)之外構(gòu)建微服務(wù) 122
9.4 冷啟動(dòng)和熱啟動(dòng) 123
9.5 用觸發(fā)器啟動(dòng)函數(shù) 124
9.5.1 基于新事件觸發(fā):事件流監(jiān)聽(tīng)器 124
9.5.2 基于消費(fèi)者組的滯后度觸發(fā) 125
9.5.3 按調(diào)度表觸發(fā) 126
9.5.4 使用網(wǎng)絡(luò)鉤子觸發(fā) 126
9.5.5 觸發(fā)資源事件 127
9.6 用函數(shù)執(zhí)行業(yè)務(wù)工作 127
9.7 維持狀態(tài) 127
9.8 調(diào)用其他函數(shù)的函數(shù) 128
9.8.1 事件驅(qū)動(dòng)通信模式 128
9.8.2 直接調(diào)用模式 129
9.9 終止和關(guān)閉 131
9.10 調(diào)整函數(shù) 132
9.10.1 分配足夠的資源 132
9.10.2 批量事件處理的參數(shù) 132
9.11 FaaS的伸縮方案 132
9.12 小結(jié) 133
第 10 章 基礎(chǔ)的生產(chǎn)者和消費(fèi)者微服務(wù) 134
10.1 BPC的適用場(chǎng)合 134
10.1.1 集成現(xiàn)有遺留系統(tǒng) 135
10.1.2 不依賴(lài)于事件順序的有狀態(tài)的業(yè)務(wù)邏輯 136
10.1.3 當(dāng)數(shù)據(jù)層完成大部分工作時(shí) 137
10.1.4 處理層和數(shù)據(jù)層獨(dú)立伸縮 137
10.2 具有外部流處理的混合BPC應(yīng)用程序 138
10.3 小結(jié) 140
第 11 章 使用重量級(jí)框架的微服務(wù) 141
11.1 重量級(jí)框架的簡(jiǎn)單歷史 142
11.2 重量級(jí)框架的內(nèi)部運(yùn)作 142
11.3 優(yōu)點(diǎn)和局限性 144
11.4 集群搭建方案和執(zhí)行模式 145
11.4.1 使用托管服務(wù) 146
11.4.2 構(gòu)建自己的完整集群 146
11.4.3 使用CMS集成來(lái)創(chuàng)建集群 146
11.5 應(yīng)用程序提交模式 148
11.5.1 驅(qū)動(dòng)器模式 148
11.5.2 集群模式 148
11.6 處理狀態(tài)和使用檢查點(diǎn) 148
11.7 伸縮應(yīng)用程序和處理事件流分區(qū) 149
11.7.1 伸縮運(yùn)行中的應(yīng)用程序 150
11.7.2 通過(guò)重啟伸縮應(yīng)用程序 153
11.7.3 自動(dòng)伸縮應(yīng)用程序 153
11.8 從故障中恢復(fù) 153
11.9 考慮多租戶(hù)問(wèn)題 153
11.10 語(yǔ)言和語(yǔ)法 154
11.11 選擇一個(gè)框架 154
11.12 示例:點(diǎn)擊和觀看的會(huì)話窗口 155
11.13 小結(jié) 157
第 12 章 使用輕量級(jí)框架的微服務(wù) 158
12.1 優(yōu)點(diǎn)和局限性 158
12.2 輕量級(jí)處理 159
12.3 處理狀態(tài)和使用變更日志 159
12.4 伸縮和故障恢復(fù) 160
12.4.1 事件洗牌 160
12.4.2 狀態(tài)分配 161
12.4.3 狀態(tài)復(fù)制和熱副本 161
12.5 選擇一個(gè)輕量級(jí)框架 161
12.5.1 Apache Kafka Streams 162
12.5.2 Apache Samza:嵌入模式 162
12.6 語(yǔ)言和語(yǔ)法 162
12.7 流–表–表聯(lián)結(jié):增強(qiáng)模式 163
12.8 小結(jié) 166
第 13 章 集成事件驅(qū)動(dòng)型和“請(qǐng)求–響應(yīng)”型微服務(wù) 167
13.1 處理外部事件 167
13.1.1 自動(dòng)生成的事件 168
13.1.2 由響應(yīng)生成的事件 168
13.2 處理自動(dòng)生成的分析事件 168
13.3 集成第三方“請(qǐng)求–響應(yīng)”API 170
13.4 處理并提供有狀態(tài)的數(shù)據(jù) 171
13.4.1 實(shí)時(shí)請(qǐng)求內(nèi)部狀態(tài)存儲(chǔ) 172
13.4.2 實(shí)時(shí)請(qǐng)求外部狀態(tài)存儲(chǔ) 175
13.5 在事件驅(qū)動(dòng)的工作流中處理請(qǐng)求 177
13.6 “請(qǐng)求–響應(yīng)”應(yīng)用程序中的微前端 183
13.7 微前端的優(yōu)點(diǎn) 184
13.7.1 基于組合的微服務(wù) 184
13.7.2 容易與業(yè)務(wù)需求對(duì)齊 185
13.8 微前端的缺點(diǎn) 185
13.8.1 可能不一致的UI元素和樣式 185
13.8.2 不同的微前端性能 185
13.8.3 示例:體驗(yàn)搜索與評(píng)論應(yīng)用程序 186
13.9 小結(jié) 188
第 14 章 支持性工具 190
14.1 微服務(wù)–團(tuán)隊(duì)分配系統(tǒng) 190
14.2 事件流的創(chuàng)建和修改 191
14.3 事件流元數(shù)據(jù)標(biāo)記 191
14.4 限額 192
14.5 schema注冊(cè)表 192
14.6 schema創(chuàng)建和修改通知 193
14.7 偏移量管理 193
14.8 事件流的權(quán)限和訪問(wèn)控制列表 194
14.9 狀態(tài)管理和應(yīng)用程序重置 195
14.10 消費(fèi)者偏移量滯后度監(jiān)控 196
14.11 流水線型的微服務(wù)創(chuàng)建流程 196
14.12 容器管理控制 197
14.13 集群創(chuàng)建和管理 197
14.13.1 事件代理的程序化創(chuàng)建 197
14.13.2 計(jì)算資源的程序化創(chuàng)建 198
14.13.3 跨集群事件數(shù)據(jù)復(fù)制 198
14.13.4 工具的程序化創(chuàng)建 198
14.14 依賴(lài)跟蹤和拓?fù)淇梢暬?99
14.15 小結(jié) 202
第 15 章 測(cè)試事件驅(qū)動(dòng)型微服務(wù) 203
15.1 通用測(cè)試原則 203
15.2 單元測(cè)試拓?fù)浜瘮?shù) 203
15.2.1 無(wú)狀態(tài)的函數(shù) 204
15.2.2 有狀態(tài)的函數(shù) 204
15.3 測(cè)試拓?fù)洹?05
15.4 測(cè)試schema演化和兼容性 205
15.5 事件驅(qū)動(dòng)型微服務(wù)的集成測(cè)試 206
15.6 本地集成測(cè)試 206
15.6.1 在測(cè)試代碼的運(yùn)行時(shí)內(nèi)創(chuàng)建臨時(shí)環(huán)境 208
15.6.2 在測(cè)試代碼外部創(chuàng)建臨時(shí)環(huán)境 209
15.6.3 使用mocking和模擬器方法集成托管服務(wù) 209
15.6.4 集成沒(méi)有本地支持的遠(yuǎn)程服務(wù) 210
15.7 完全遠(yuǎn)程集成測(cè)試 211
15.7.1 程序化創(chuàng)建臨時(shí)集成測(cè)試環(huán)境 211
15.7.2 使用共享環(huán)境進(jìn)行測(cè)試 213
15.7.3 使用生產(chǎn)環(huán)境進(jìn)行測(cè)試 214
15.8 選擇你的完全遠(yuǎn)程集成測(cè)試策略 214
15.9 小結(jié) 215
第 16 章 部署事件驅(qū)動(dòng)型微服務(wù) 216
16.1 微服務(wù)部署的原則 216
16.2 微服務(wù)部署的架構(gòu)組件 217
16.2.1 持續(xù)集成系統(tǒng)、持續(xù)交付系統(tǒng)和持續(xù)部署系統(tǒng) 217
16.2.2 CMS和商業(yè)硬件 218
16.3 基本的全站式部署模式 218
16.4 滾動(dòng)更新模式 220
16.5 破壞性的schema變更模式 220
16.5.1 通過(guò)兩個(gè)事件流達(dá)到最終遷移 222
16.5.2 同步遷移到新事件流 222
16.6 藍(lán)綠部署模式 223
16.7 小結(jié) 224
第 17 章 結(jié)論 225
17.1 通信層 225
17.2 業(yè)務(wù)領(lǐng)域和界限上下文 226
17.3 可共享的工具和基礎(chǔ)設(shè)施 226
17.4 結(jié)構(gòu)化事件 226
17.5 數(shù)據(jù)解放和單一事實(shí)來(lái)源 227
17.6 微服務(wù) 227
17.7 微服務(wù)實(shí)現(xiàn)方案 228
17.8 測(cè)試 228
17.9 部署 229
17.10 結(jié)語(yǔ) 229
關(guān)于作者 230
關(guān)于封面 230

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)