选择微服务还是单体,这似乎是一个无须讨论的话题,这个年代还有单体的存身之地吗?沃恩和托马什对此的回答是,不仅有,而且许多组织适合使用单体架构。两位作者用一个贯穿全书的例子深入探讨了面向战略创新的架构设计问题。本书共12章,分4部分。第1部分从战略高度介绍了架构决策的重要性及其带来的影响,以及几种战略学习工具和事件优先建模。第2部分讲述了推动业务创新的几种工具,并对DDD进行了简单的介绍。第3部分具体谈论了事件优先架构和实现它的几种方式。第4部分回答了微服务还是单体这个有争议性的问题,讨论了单体和微服务之间的比较与权衡,还探讨了如何将单体迁移到微服务,并且为读者可能采用的任何一种选择都提供了合适的指南。本书适合需要进行架构决策的人阅读,也适合想要精进业务的架构师和程序员阅读。
沃恩·弗农是一位企业家、软件开发者和架构师,拥有超过35年的丰富跨领域业务经验。沃恩是领域驱动设计、反应式架构与编程方面的顶尖专家,倡导简单性。他的工作坊学员一直对他所教授的广度和深度以及独特的教学方法给予高度评价,许多人在参加他的一次工作坊后,就成为他的其他知名工作坊的长期学员。沃恩提供有关领域驱动设计、反应式软件开发以及事件风暴和事件驱动架构的咨询和培训,帮助团队和组织发掘业务驱动和反应式系统的潜力。他的专业知识和经验帮助许多企业从遗留的技术驱动的实现方法过渡到业务驱动的现代方法。沃恩是4本书的作者,包括你现在正在阅读的这本。他的图书和他的沃恩·弗农系列图书均由Addison-Wesley出版。托马什·亚斯库瓦是巴黎软件咨询公司Luteceo的CTO和联合创始人。托马什有超过20年的开发者和软件架构师专业经验,曾在许多电子商务、工业、保险和金融领域的公司工作过。他主要专注于创造真正产生业务价值、与战略业务举措保持一致、提供具有明确竞争优势的软件解决方案。托马什也是.NET平台开源项目XOOM的主要贡献者之一。在业余时间,托马什会练习吉他演奏,并与家人共度时光。
娄麒麟,Thoughtworks专家级咨询师,海外项目交付安全负责人,思特沃克技术雷达第28期中文主编。擅长函数式编程、事件驱动架构、云原生设计、风险管理,以及DevSecOps。有着近10年的研发团队管理经验,曾主导某大型跨国银行的微服务改造工程,和某头部科技金融公司的遗留系统改造工程。近来在研究产品研发的全生命周期风险控制和AI赋能。马建勋,Thoughtworks专家级咨询师,IT从业10余年,曾领导和参与多家海内外不同规模项目的研发和改造,涉及ERP、互联网、银行等领域。主要研究兴趣在于敏捷开发,领域驱动设计,软件架构演进以及项目管理。姚琪琳,Thoughtworks专家级咨询师,遗留系统现代化解决方案负责人,极客时间《遗留系统现代化实战》专栏作者,技术书籍译者,CAC认证敏捷教练。拥有超过16年的软件行业从业经验,对开发、设计和架构有着深入的理解。擅长领域驱动设计、敏捷软件开发、整洁代码和重构,并通过理论指导、实战演练等方式为企业研发团队赋能。参与翻译或审校多本技术书籍,包括《重构到微服务》、《领域特定语言》、《.NET性能优化》、《深入理解C#》等。张渝,Thoughtworks专家级咨询师。曾领导和参与多个海内外项目,涉及私有云,支付,视频等多个领域。擅长敏捷软件开发,领域驱动设计,云原生设计,测试驱动开发以及重构。
第1部分 通过实验学习转型战略
第1章 业务目标和数字化转型 5
数字化转型的目标是什么 6
软件架构概览 8
为什么软件项目会出问题 9
债务隐喻 10
软件熵 11
大泥球 11
案例研究 13
当前的业务背景 14
商机 15
企业与康威定律 16
知识传递 17
知识不是实物 17
电话游戏 18
艰难的一致 19
但是一切皆有可能 20
(重新)思考软件战略 22
思考 22
反思 24
单体系统一定不好吗 27
微服务一定好吗 28
善待敏捷 30
摆脱困境 33
小结 34
第2章 基本战略学习工具 35
决策的早晚和对错 36
文化和团队 39
失败而不是死亡 40
失败文化不是指责文化 41
康威定律的正确用法 43
启用安全实验 46
模块化优先 47
部署放最后 50
介于两者之间的一切 52
业务能力、业务流程和战略目标 52
针对性的战略交付 56
利用Cynefin进行决策 60
你的意大利面条在哪里,煮得有多快 63
战略架构 64
应用工具 65
小结 67
第3章 事件优先的实验和发现 68
命令与事件 69
使用软件模型 71
利用事件风暴快速学习 72
当需要远程事件风暴会议时 74
主持会议 75
宏观建模 79
应用工具 82
小结 88
第2部分 推动业务创新
第4章 获得领域驱动的成果 94
领域和子域 96
小结 99
第5章 专业知识上下文 101
限界上下文和统一语言 101
核心子域 105
支撑子域、通用子域和技术机制 106
支撑子域 107
通用子域 107
技术机制 108
业务能力和上下文 108
别太大,也别太小 110
小结 112
第6章 映射的两面:成功还是失败 113
上下文映射图 113
合作关系 115
共享内核 117
客户方-供应方开发 118
遵奉者 120
防腐层 122
开放主机服务 123
发布语言 128
另谋他路 130
地形建模 130
失败之道与成功之径 133
应用工具 136
小结 141
第7章 建模领域概念 142
实体 143
值对象 144
聚合 145
领域服务 146
函数式行为 147
应用工具 149
小结 150
第3部分 事件优先架构
第8章 基础架构 155
架构风格、模式和决策 157
端口-适配器架构 157
模块化 163
REST请求-响应 166
质量属性 168
安全性 168
隐私性 171
性能 173
可伸缩性 175
弹性:可靠性和容错性 175
复杂性 177
应用工具 177
小结 178
第9章 消息驱动和事件驱动架构 179
基于消息和事件的REST 183
事件日志 183
订阅者轮询 185
服务器发送事件 186
事件驱动和流程管理 187
事件溯源 189
CQRS 193
无服务器架构和功能即服务 195
应用工具 197
小结 197
第4部分 两条通向目标架构之路
第10章 构造单体 203
历史回顾 205
慎终于始 207
业务能力 208
架构决策 210
是与非 215
随变化而变化 217
解耦 220
坚持正确的步伐 224
小结 225
第11章 从单体到微服务 227
做好心理建设 227
从模块化单体到微服务 230
从大泥球单体到微服务 234
用户交互 235
协调数据变化 237
决定绞杀什么 242
拔掉遗留单体 244
小结 245
第12章 平衡要求,管控需求 246
质量属性平衡 246
战略和目标 247
业务目标呼唤数字化转型 247
使用战略学习工具 248
事件驱动的轻量级建模 249
推动业务创新 249
事件优先架构 250
单体架构作为首要关注点 250
有针对性地将单体拆分为微服务 251
平衡是不偏不倚的,创新是必不可少的 252
小结 252