《反應式套用開發》是清華大學出版社2020年出版圖書,作者是鄧肯·德沃爾(Duncan DeVore)
基本介紹
- 書名:反應式套用開發
- 作者:鄧肯·德沃爾(Duncan DeVore)
- 出版社:清華大學出版社
- 出版時間:2020年
- 定價:69.80 元
- ISBN:9787302563563
內容簡介,目錄,作者簡介,
內容簡介
《反應式套用開發》介紹如何使用反應式設計模式構建可靠的企業級套用。本書首先介紹了反應式思維模型以及對Akka參與者框架等核心技術的審視。然後使用Scala構建了一個概念驗證系統,並講解CQRS和事件溯源等模式的套用。在實現伸縮性和回彈性、與傳統架構集成以及理解強大的測試技術的同時,讀者將掌握反應式設計原則。 主要內容 設計可伸縮的領域模型 構建可容錯的系統 高效應對海量數據 可以用Scala或Java構建的示例
目錄
第Ⅰ部分 基礎知識
第1章 什麼是反應式套用 3
1.1 為何需要反應式套用 5
1.1.1 分散式計算 5
1.1.2 雲計算 6
1.2 網上購物車:表象之下的複雜性 7
1.2.1 單體式架構:難以分布 7
1.2.2 反應式架構:默認就是分散式的 13
1.2.3 理解反應式架構 15
1.2.4 單體式購物車:創建訂單 17
1.2.5 事件溯源:銀行賬戶登記 19
1.2.6 反應式購物車:使用事件溯源創建訂單 20
1.3 反應式套用能對哪些對象做出反應 23
1.4 通過本書能學到什麼 24
1.4.1 使用松耦合設計的異步通信 24
1.4.2 伸縮性 24
1.4.3 回彈性 25
1.4.4 回響性 25
1.4.5 測試 25
1.5 本章小結 26
第2章 初識Akka 27
2.1 理解訊息和參與者 28
2.1.1 從函式轉向參與者 28
2.1.2 使用參與者和訊息進行領域建模 30
2.1.3 定義訊息 31
2.1.4 定義參與者 32
2.2 安裝示例項目 34
2.3 啟動參與者系統 36
2.3.1 創建驅動 37
2.3.2 運行驅動程式 37
2.4 跨多個系統分布參與者 38
2.4.1 分布到兩個JVM 38
2.4.2 為遠程參與者進行配置 39
2.4.3 設定驅動程...
2.4.4 運行分散式參與者 42
2.5 使用多個參與者進行擴展 43
2.5.1 傳統方案 43
2.5.2 像參與者函式那樣路由 44
2.6 創建參與者池 45
2.6.1 添加池路由器 46
2.6.2 運行池化的參與者系統 47
2.7 使用多參與者系統進行擴展 48
2.7.1 添加分組路由器 49
2.7.2 運行多個參與者系統 51
2.8 套用反應式原則 51
2.9 本章小結 52
第3章 理解Akka 53
3.1 Akka是什麼 54
3.2 Akka現狀 55
3.2.1 變得可回響 56
3.2.2 可靠地保留數據 56
3.2.3 需求越來越大的回彈性和易伸縮性 57
3.2.4 使用Spark支持大數據 58
3.3 Akka專用術語 58
3.3.1 並發和並行 58
3.3.2 異步和同步 59
3.3.3 競爭 62
3.3.4 完全無共享 63
3.4 參與者 65
3.4.1 狀態 66
3.4.2 參與者引用 66
3.4.3 異步訊息傳遞 66
3.4.4 信箱 68
3.4.5 行為和receive循環 69
3.4.6 監管 75
3.5 參與者系統 76
3.5.1 層級結構 76
3.5.2 監管 78
3.5.3 參與者路徑 79
3.5.4 參與者生命周期 80
3.5.5 微核心容器 81
3.6 本章小結 82
第Ⅱ部分 構建反應式套用
第4章 從領域映射到工具集 85
4.1 基於領域模型進行設計 86
4.1.1 一種更好的解決方案 86
4.1.2 從類比轉向套用 86
4.1.3 創建卡片目錄 88
4.2 轉變為訊息驅動 89
4.3 使用訊息控制參與者狀態 91
4.3.1 向自己傳送訊息 91
4.3.2 使用狀態改變行為 93
4.3.3 管理更多的複雜互動 95
4.3.4 保持簡單性 99
4.3.5 運行套用 102
4.3.6 進展回顧 102
4.4 增大伸縮性 103
4.4.1 Akka路由 103
4.4.2 調度器 106
4.4.3 運行具有路由器的套用 108
4.5 回彈性 109
4.5.1 故障的Librarian參與者 109
4.5.2 運行故障套用 111
4.5.3 Librarian監管 111
4.5.4 運行具有回彈監管的套用 113
4.6 本章小結 113
第5章 領域驅動設計 115
5.1 什麼是領域驅動設計 116
5.1.1 大泥球 117
5.1.2 限界上下文 121
5.1.3 通用語言 122
5.1.4 實體、聚合與值對象 123
5.1.5 服務、倉儲和工廠 126
5.1.6 防腐層 128
5.1.7 分層架構 129
5.1.8 Saga 130
5.1.9 共享核心 130
5.2 基於參與者的領域 131
5.2.1 簡單的Akka航班領域 131
5.2.2 Aircraft參與者 132
5.2.3 Akka Process Manager 133
5.3 本章小結 135
第6章 使用遠程參與者 137
6.1 重構為分散式系統 138
6.1.1 劃分成多個參與者系統 138
6.1.2 使用sbt進行結構化 139
6.2 配置套用 140
6.2.1 創建第一個驅動程式 141
6.2.2 引入application.conf 142
6.2.3 使用HOCON 143
6.2.4 配置套用 144
6.3 使用Akka進行遠程通信 145
6.3.1 構造遠程引用 145
6.3.2 解析引用 146
6.3.3 在客戶端之間進行替換 148
6.3.4 創建另一個驅動程式 151
6.4 運行分散式示例 153
6.4.1 啟動Customer驅動程式 154
6.4.2 啟動RareBooks驅動程式 155
6.4.3 創建一些顧客 155
6.4.4 檢查結果 155
6.5 分散式系統中的可靠性 156
6.5.1 將可靠性作為一種設計規範 157
6.5.2 Akka提供的保障方法 159
6.6 本章小結 163
第7章 反應式流 165
7.1 快取過多的訊息 166
7.2 使用背壓進行防護 167
7.2.1 停止和等待 167
7.2.2 表明多條訊息的信號 170
7.2.3 流的控制 171
7.3 使用Akka進行流處理 172
7.3.1 將流添加到項目 173
7.3.2 從檔案創建流的源 174
7.3.3 轉換流 175
7.3.4 將流轉換成參與者訊息 176
7.3.5 小結 178
7.4 Reactive Streams介紹 179
7.4.1 創建反應式流 179
7.4.2 消費反應式流 180
7.4.3 構建使用流處理的套用 181
7.5 本章小結 181
第8章 CQRS與事件溯源 183
8.1 面向CQRS/ES的驅動因素 184
8.1.1 ACID事務 184
8.1.2 傳統的RDBMS缺乏分片 185
8.1.3 CRUD 185
8.2 CQRS的起源:命令、查詢以及兩條不同的路徑 186
8.3 CQRS中的C 189
8.3.1 什麼是命令 189
8.3.2 拒絕 190
8.3.3 原子性 190
8.3.4 雜而不精 191
8.3.5 行為的欠缺 192
8.3.6 訂單示例:訂單命令 192
8.3.7 不間斷命令驗證 193
8.3.8 衝突解決 196
8.4 CQRS中的Q 197
8.4.1 阻抗不匹配 197
8.4.2 什麼是查詢 199
8.4.3 不必動態查詢 201
8.4.4 對比SQL與NoSQL資料庫 201
8.5 事件溯源 202
8.5.1 什麼是事件 202
8.5.2 所有一切都與行為有關 204
8.5.3 分散式事務之外的考慮事項 204
8.5.4 訂單示例 204
8.5.5 再談一致性 208
8.5.6 重試模式 209
8.5.7 對比命令溯源與事件溯源 210
8.6 本章小結 210
第9章 反應式接口 211
9.1 什麼是反應式接口 212
9.1.1 API層 212
9.1.2 無頭API 212
9.2 表述性RESTful接口 213
9.2.1 對比JSON與XML 214
9.2.2 表述性RESTful接口URL 214
9.2.3 Location 215
9.3 選擇反應式API庫 216
9.3.1 Play 216
9.3.2 專斷 217
9.3.3 Play套用的結構 217
9.3.4 簡單路由 219
9.3.5 非阻塞服務接口 220
9.4 Akka HTTP:一個簡單的CQRS式的服務 223
9.5 Lagom:訂單示例 227
9.6 Play、Akka HTTP和Lagom之間的對比 228
9.7 本章小結 229
第10章 生產上線準備 231
10.1 測試反應式套用 232
10.1.1 識別測試模式 232
10.1.2 測試並發行為 233
10.2 套用安全防護 234
10.2.1 認識STRIDE中定義的威脅 235
10.2.2 禦敵於國門之外 236
10.2.3 添加HTTPS 237
10.3 對參與者進行日誌記錄 238
10.3.1 可堆疊日誌 239
10.3.2 配置日誌系統 240
10.4 跟蹤訊息 242
10.4.1 使用Dapper模式收集跟蹤數據 243
10.4.2 減少對OpenTracing的依賴 245
10.4.3 集成OpenTracing與Akka 246
10.4.4 使用Spider模式找出路徑 253
10.5 監控反應式套用 254
10.5.1 使用Lightbend Monitoring監控核心指標 254
10.5.2 使用Kamon創建自定義指標 255
10.6 應對故障 255
10.6.1 決定要重啟的對象 256
10.6.2 路由考量 256
10.6.3 某種程度上的恢復 257
10.7 部署到雲端 258
10.7.1 要素隔離 258
10.7.2 將參與者Docker化 259
10.7.3 其他打包選項 261
10.8 本章小結 261
作者簡介
Sean Walsh已經在技術行業工作了20多年。在此期間,他從一開始使用Microsoft技術體系的語言和框架進行編程,轉變到在20世紀90年代中期成為Java的早期使用者。Sean為許多垂直領域(特別是金融、能源和零售行業)的初創公司和企業提供諮詢。自1996年以來,他一直是曼哈頓一家成功的中型諮詢公司的首席技術官和聯合創始人。他還是SOA Software的服務副總裁,以及一家利潤豐厚的軟體諮詢公司的所有者。
在賣掉上一家公司並休息了一段時間後,Sean決定再次揚帆起航,並且再次開始在能源行業從事實踐諮詢工作,最初使用的是Java和Spring,但在看到它們的局限性後,Sean開始使用Akka和Scala。Sean在使用Lightbend開源技術棧構建分散式套用方面積累了多年的經驗,其中包括Weight Watchers的數位化轉型。
Sean現在是Lightbend的現場CTO,負責幫助Lightbend的客戶實現反應式架構。
Duncan Devore是Lightbend的首席系統工程師,並且多年來一直是Scala、Akka和反應式套用的堅定支持者,他開發了第一批投入生產使用的反應式套用之一。他還是Martin Krasser最初的事件溯源項目的提交者,該項目後來發展成為Akka Persistence,同時他還維護著Akka Persistence Mongo Journal。
Brian Hanafee首次涉足書籍編寫是作為《反應式設計模式》(Reactive Design Patterns,該書已由清華大學出版社引進並出版)的合著者。他是富國銀行(Wells Fargo Bank)的首席系統架構師,負責各種不同的開發活動,並一直提倡提高技術水平。此前,Brian就職於Oracle公司,致力於互動電視和文本處理的新產品及系統的研發。1994年,他在一輛行駛的汽車上發出了第一封電子郵件。在此之前,Brian曾在Booz、Allen & Hamilton和Advanced Decision Systems擔任助理,並將人工智慧技術套用于軍事規劃系統。他還為其中的首批彈射安全頭盔式顯示系統編寫了軟體。
Brian在加州大學伯克利分校獲得了電子工程和計算機科學學士學位。