- ISBN:9787519879501
- 装帧:平装-胶订
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:276
- 出版时间:2023-08-01
- 条形码:9787519879501 ; 978-7-5198-7950-1
本书特色
一句话推荐
单体遗留系统的现代化演进之道。本书旨在从思考和执行的维度,深入探讨如何将现有系统分解为微服务架构。
编辑推荐
对于单体系统,你是如何来进行梳理并且逐步将它演进到微服务架构的呢?你是如何在保证业务正常进行的同时来做这件事的?作为其畅销著作《Building Microservices》的姊妹篇,这本书详细阐释了一种从存量的单体应用迁移到微服务架构的可行方法。
本书作为一本改造指南,提供了大量针对如何将单体应用演进到微服务架构的实操建议。书中包含了大量图形化的示例、充满洞见的改造模式、涉及从改造的初始规划阶段到应用系统和数据库的解耦,涵盖了许多场景和策略,它们将帮助你实现成功的改造。你将从本书中学到这些经过实践检验过的模式和技巧。在改造过程,你一定会发现它们非常有价值。
专家推荐
“在这本书中,本书作者为微服务改造定义了清晰的愿景,并且向你展示了在改造过程中需要注意哪些‘坑’(既有很明显的,也有一些比较隐蔽的)。同时,本书也提供了很多组织革新、架构革新、技术革新方面非常有用的参考模式。”
——Daniel Bryant
DataWire和InfoQ的技术顾问
内容简介
本书作为一本改造指南,提供了大量针对如何将单体应用演进到微服务架构的实操建议。书中包含了大量图形化的示例、充满洞见的改造模式、涉及从改造的初始规划阶段到应用系统和数据库的解耦,涵盖了许多场景和策略,它们将帮助你实现成功的改造。你将从本书中学到这些经过实践检验过的模式和技巧。在改造过程,你一定会发现它们非常有价值。本书的主要内容有:适合于期望演进到微服务,而不是重写的组织。帮助组织决策是否要改造、何时改造、以及从哪里入手进行改造。如何解决遗留系统的通信、集成和迁移问题。阐述了若干不同的迁移模式,以及在什么情况下采用这些模式。提供了多种数据库迁移方法的案例,以及对应的同步机制。探索了应用系统解耦的方法,包括若干架构重构的模式。深入探讨了数据库解耦的细节,包括打破参照完整性和事务完整性的影响,新的失败模式等。
目录
前言 1
第1 章 刚刚好的微服务 7
1.1 什么是微服务? 7
1.1.1 部署独立性 8
1.1.2 围绕业务领域建模 8
1.1.3 拥有自己的数据 12
1.1.4 微服务将带来哪些优势? 13
1.1.5 微服务会带来什么问题? 13
1.1.6 用户界面 .14
1.1.7 技术 14
1.1.8 颗粒度 15
1.1.9 所有权 17
1.2 单体架构19
1.2.1 单进程单体 19
1.2.2 分布式单体 21
1.2.3 第三方黑盒系统 22
1.2.4 单体架构的挑战 22
1.2.5 单体的优势 22
1.3 关于耦合和内聚 23
1.3.1 内聚 25
1.3.2 耦合 25
1.4 刚刚好的领域驱动设计 .36
1.4.1 聚合 37
1.4.2 限界上下文 38
1.4.3 将聚合和限界上下文映射到微服务 39
1.4.4 延伸阅读 .39
1.5 总结 .40
第2 章 规划迁移到微服务的过程 41
2.1 理解目标41
2.2 为什么要选择微服务? .43
2.2.1 提高团队自主性 44
2.2.2 缩短上市时间 45
2.2.3 经济高效地扩展负载.46
2.2.4 提高健壮性 47
2.2.5 扩展开发人员的数量.48
2.2.6 拥抱新技术 49
2.3 什么时候微服务可能是个坏主意?.51
2.3.1 不明确的业务领域 .51
2.3.2 初创公司 .52
2.3.3 客户安装和管理的软件 54
2.3.4 没有好的理由! 54
2.4 权衡利弊54
2.5 带人踏上旅途 .56
2.6 改变组织56
2.6.1 建立紧迫感 57
2.6.2 组建领导团队 58
2.6.3 制定愿景和战略 59
2.6.4 传达变革愿景 59
2.6.5 善于授权赋能 60
2.6.6 快速得到成果 61
2.6.7 促进变革深入 61
2.6.8 成果融入文化 62
2.7 增量迁移的重要性 62
2.8 变更成本64
2.8.1 可逆和不可逆的决定.64
2.8.2 更容易实验的地方 .66
2.9 那么我们从哪里开始呢? 66
2.10 领域驱动设计 66
2.10.1 你需要走多远? 67
2.10.2 事件风暴 68
2.10.3 利用领域模型进行优先级排序 68
2.11 一个组合模型 70
2.12 重组团队 .72
2.12.1 改变团队结构 .72
2.12.2 不要一刀切73
2.12.3 做出改变 75
2.12.4 改变技能 78
2.13 你如何知道转型成功与否? .81
2.13.1 有定期检查点 .81
2.13.2 定量度量 82
2.13.3 定性度量 82
2.13.4 避免沉没成本误区 83
2.13.5 对新方法持开放态度 83
2.14 总结 84
第3 章 拆分单体 87
3.1 单体系统,修改还是不修改? 87
3.1.1 剪切、复制或者重新开发? .88
3.1.2 重构单体系统 89
3.2 迁移模式90
3.3 模式:绞杀应用 91
3.3.1 它是如何工作的 91
3.3.2 在哪里使用它 93
3.3.3 示例:HTTP 反向代理 .95
3.3.4 数据 98
3.3.5 代理选项 .98
3.3.6 更改协议 102
3.3.7 示例:FTP 105
3.3.8 示例:消息拦截 106
3.3.9 其他协议 109
3.3.10 绞杀植物模式的其他例子 . 109
3.4 迁移功能时改变行为 110
3.5 模式:UI 组合 . 110
3.5.1 示例:页面组合 111
3.5.2 示例:小部件(Widget)组合 112
3.5.3 示例:微前端 . 115
3.5.4 在哪里使用它 . 116
3.6 模式:抽象分支 . 116
3.6.1 它是如何工作的 117
3.6.2 作为后备机制 . 124
3.6.3 在哪里使用它 . 125
3.7 模式:并行运行 . 126
3.7.1 示例:比较信用衍生品定价 126
3.7.2 示例:Homegate 列表 128
3.7.3 验证技术 129
3.7.4 使用Spy 129
3.7.5 GitHub Scientist 130
3.7.6 灰度发布与金丝雀发布 . 131
3.7.7 在哪里使用它 . 131
3.8 模式:装饰合作者 . 131
3.8.1 示例:会员计划 132
3.8.2 在哪里使用它 . 133
3.9 模式:变更数据捕获 133
3.9.1 示例:发行会员卡 133
3.9.2 实现变更数据捕获 135
3.9.3 在哪里使用它 . 137
3.10 总结 138
第4 章 分解数据库 139
4.1 模式:共享数据库 . 139
4.1.1 应对模式 141
4.1.2 何处使用 141
4.2 但这是不可能做到的! . 141
4.3 模式:数据库视图 . 143
4.3.1 数据库即公共契约 143
4.3.2 通过视图来对外展现 144
4.3.3 限制条件 145
4.3.4 所有权 146
4.3.5 何处使用 146
4.4 模式:数据库包装服务 146
4.5 模式:数据库即服务接口 . 149
4.5.1 实现映射引擎 . 151
4.5.2 与视图相比 . 151
4.5.3 何处使用 151
4.6 转让所有权 152
4.6.1 模式:暴露单体中的聚合 152
4.6.2 模式:变更数据所有权 . 155
4.7 数据同步. 156
4.8 模式:在应用程序中同步数据 158
4.8.1 步骤1:批量同步数据 158
4.8.2 步骤2:同步写入,从旧表结构中读取 159
4.8.3 步骤3:同步写入,从新表结构中读取 160
4.8.4 在哪里使用它(一) 161
4.8.5 在哪里使用它(二) 161
4.9 模式:追踪器写入 . 162
4.9.1 数据同步 165
4.9.2 案例:Square 的订单 . 167
4.9.3 在哪里使用它 . 171
4.10 拆分数据库 . 171
4.11 先拆分数据库,还是先拆分代码? 173
4.11.1 先拆分数据库 174
4.11.2 先拆分代码 178
4.11.3 将数据库和代码一起拆分 .183
4.11.4 那么,我应该先拆分哪个? .184
4.12 表结构拆分示例 184
4.13 模式:拆分表 184
4.14 模式:将外键关系移动到代码中 187
4.14.1 移动连表查询 188
4.14.2 数据一致性 190
4.14.3 在哪里使用 192
4.14.4 示例:共享静态数据 192
4.15 事务 201
4.15.1 ACID 事务 .202
4.15.2 仍然保持ACID,但缺乏整体的原子性? 203
4.15.3 两阶段提交 205
4.15.4 对分布式事务说不 207
4.16 saga . 208
4.16.1 saga 的失败模式 . 209
4.16.2 实施saga 213
4.16.3 saga 与分布式事务 220
4.17 总结 220
第5 章 成长的烦恼 223
5.1 服务越多,痛苦越多 223
5.2 规模化下的所有权 . 225
5.2.1 这个问题如何表现出来? 225
5.2.2 这个问题什么时候会发生? 226
5.2.3 潜在的解决方案 226
5.3 破坏性变更 227
5.3.1 这个问题如何表现出来? 227
5.3.2 这个问题什么时候会发生? 227
5.3.3 潜在的解决方案 228
5.4 报表 231
5.4.1 这个问题什么时候会发生? 232
5.4.2 潜在的解决方案 . 233
5.5 监控和故障排除 . 234
5.5.1 什么时候会出现这些问题? 234
5.5.2 这些问题是如何发生的? . 235
5.5.3 潜在的解决方案 . 235
5.6 本地开发者体验 . 239
5.6.1 这个问题如何表现出来? 239
5.6.2 什么时候会出现这些问题? 239
5.6.3 潜在的解决方案 240
5.7 运行太多东西 240
5.7.1 这个问题如何表现出来? 241
5.7.2 这个问题什么时候会发生? 241
5.7.3 潜在的解决方案 241
5.8 端到端测试 242
5.8.1 这个问题如何表现出来? 243
5.8.2 这个问题什么时候会发生? 243
5.8.3 潜在的解决方案 243
5.9 全局与局部优化 . 245
5.9.1 这个问题如何表现出来? 246
5.9.2 这个问题什么时候会发生? 246
5.9.3 潜在的解决方案 247
5.10 健壮性和弹性 248
5.10.1 这个问题如何表现出来? . 248
5.10.2 这个问题什么时候会发生? 249
5.10.3 潜在的解决方案 . 249
5.11 孤儿服务 250
5.11.1 这个问题如何表现出来? .250
5.11.2 这个问题什么时候会发生? .250
5.11.3 潜在的解决方案 .251
5.12 总结 252
第6 章 结语 . 255
附录A 参考书目 . 257
附录B 模式列表 . 261
作者简介
作者介绍经历了几个创业公司,并在Thoughtworks工作了12年之后,目前Sam Newman是一位独立顾问。他专注于微服务、云技术、以及持续交付方面。通过培训和技术咨询服务,Sam帮助分布在全球的客户实现更快且更可靠的软件交付。他是经验丰富的演讲者,曾在全球多个大会上发表演讲。同时,他也是O’Reilly出版的《Building Microservices》一书的作者。译者介绍王威,Thoughtworks总监级咨询师,知朴咨询创始人,DDD中国社区联合创始人,Cynefin框架培训讲师,微服务架构、领域驱动设计、遗留系统重构的实践者。梅雪松,Thoughtworks总监级咨询师,遗留系统现代化服务负责人,微服务架构、领域驱动设计、遗留系统重构的实践者。姚琪琳,Thoughtworks专家级咨询师,遗留系统现代化服务负责人,极客时间《遗留系统现代化实战》专栏作者,技术书籍译者。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥37.7¥65.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0 -
Visual Basic 语言程序设计基础(第6版)
¥32.0¥45.0