重构到微服务
Sam Newman
王威, 梅雪松, 姚琪琳 译
出版时间:2023年08月
页数:262
“在这本书中,本书作者为微服务改造定义了清晰的愿景,并且向你展示了在改造过程中需要注意哪些‘坑’(既有很明显的,也有一些比较隐蔽的)。同时,本书也提供了很多组织革新、架构革新、技术革新方面非常有用的参考模式。”
——Daniel Bryant
DataWire和InfoQ的技术顾问

对于单体系统,你是如何来进行梳理并且逐步将它演进到微服务架构的呢?你是如何在保证业务正常进行的同时来做这件事的?作为其畅销著作《Building Microservices》的姊妹篇,这本书详细阐释了一种从存量的单体应用迁移到微服务架构的可行方法。
本书作为一本改造指南,提供了大量针对如何将单体应用演进到微服务架构的实操建议。书中包含了大量图形化的示例、充满洞见的改造模式、涉及从改造的初始规划阶段到应用系统和数据库的解耦,涵盖了许多场景和策略,它们将帮助你实现成功的改造。你将从本书中学到这些经过实践检验过的模式和技巧。在改造过程,你一定会发现它们非常有价值。
● 适合于期望演进到微服务,而不是重写的组织。
● 帮助组织决策是否要改造、何时改造、以及从哪里入手进行改造。
● 如何解决遗留系统的通信、集成和迁移问题。
● 阐述了若干不同的迁移模式,以及在什么情况下采用这些模式。
● 提供了多种数据库迁移方法的案例,以及对应的同步机制。
● 探索了应用系统解耦的方法,包括若干架构重构的模式。
● 深入探讨了数据库解耦的细节,包括打破参照完整性和事务完整性的影响,新的失败模式等。
  1. 前言
  2. 第1章 刚刚好的微服务
  3. 1.1 什么是微服务?
  4. 1.1.1 部署独立性
  5. 1.1.2 围绕业务领域建模
  6. 1.1.3 拥有自己的数据
  7. 1.1.4 微服务将带来哪些优势?
  8. 1.1.5 微服务会带来什么问题?
  9. 1.1.6 用户界面
  10. 1.1.7 技术
  11. 1.1.8 颗粒度
  12. 1.1.9 所有权
  13. 1.2 单体架构
  14. 1.2.1 单进程单体
  15. 1.2.2 分布式单体
  16. 1.2.3 第三方黑盒系统
  17. 1.2.4 单体架构的挑战
  18. 1.2.5 单体的优势
  19. 1.3 关于耦合和内聚
  20. 1.3.1 内聚
  21. 1.3.2 耦合
  22. 1.4 刚刚好的领域驱动设计
  23. 1.4.1 聚合
  24. 1.4.2 限界上下文
  25. 1.4.3 将聚合和限界上下文映射到微服务
  26. 1.4.4 延伸阅读
  27. 1.5 总结
  28. 第2章 规划迁移到微服务的过程
  29. 2.1 理解目标
  30. 2.2 为什么要选择微服务?
  31. 2.2.1 提高团队自主性
  32. 2.2.2 缩短上市时间
  33. 2.2.3 经济高效地扩展负载
  34. 2.2.4 提高健壮性
  35. 2.2.5 扩展开发人员的数量
  36. 2.2.6 拥抱新技术
  37. 2.3 什么时候微服务可能是个坏主意?
  38. 2.3.1 不明确的业务领域
  39. 2.3.2 初创公司
  40. 2.3.3 客户安装和管理的软件
  41. 2.3.4 没有好的理由!
  42. 2.4 权衡利弊
  43. 2.5 带人踏上旅途
  44. 2.6 改变组织
  45. 2.6.1 建立紧迫感
  46. 2.6.2 组建领导团队
  47. 2.6.3 制定愿景和战略
  48. 2.6.4 传达变革愿景
  49. 2.6.5 善于授权赋能
  50. 2.6.6 快速得到成果
  51. 2.6.7 促进变革深入
  52. 2.6.8 成果融入文化
  53. 2.7 增量迁移的重要性
  54. 2.8 变更成本
  55. 2.8.1 可逆和不可逆的决定
  56. 2.8.2 更容易实验的地方
  57. 2.9 那么我们从哪里开始呢?
  58. 2.10 领域驱动设计
  59. 2.10.1 你需要走多远?
  60. 2.10.2 事件风暴
  61. 2.10.3 利用领域模型进行优先级排序
  62. 2.11 一个组合模型
  63. 2.12 重组团队
  64. 2.12.1 改变团队结构
  65. 2.12.2 不要一刀切
  66. 2.12.3 做出改变
  67. 2.12.4 改变技能
  68. 2.13 你如何知道转型成功与否?
  69. 2.13.1 有定期检查点
  70. 2.13.2 定量度量
  71. 2.13.3 定性度量
  72. 2.13.4 避免沉没成本误区
  73. 2.13.5 对新方法持开放态度
  74. 2.14 总结
  75. 第3章 拆分单体
  76. 3.1 单体系统,修改还是不修改?
  77. 3.1.1 剪切、复制或者重新开发?
  78. 3.1.2 重构单体系统
  79. 3.2 迁移模式
  80. 3.3 模式:绞杀应用
  81. 3.3.1 它是如何工作的
  82. 3.3.2 在哪里使用它
  83. 3.3.3 示例:HTTP反向代理
  84. 3.3.4 数据
  85. 3.3.5 代理选项
  86. 3.3.6 更改协议
  87. 3.3.7 示例:FTP
  88. 3.3.8 示例:消息拦截
  89. 3.3.9 其他协议
  90. 3.3.10 绞杀植物模式的其他例子
  91. 3.4 迁移功能时改变行为
  92. 3.5 模式:UI组合
  93. 3.5.1 示例:页面组合
  94. 3.5.2 示例:小部件(Widget)组合
  95. 3.5.3 示例:微前端
  96. 3.5.4 在哪里使用它
  97. 3.6 模式:抽象分支
  98. 3.6.1 它是如何工作的
  99. 3.6.2 作为后备机制
  100. 3.6.3 在哪里使用它
  101. 3.7 模式:并行运行
  102. 3.7.1 示例:比较信用衍生品定价
  103. 3.7.2 示例:Homegate列表
  104. 3.7.3 验证技术
  105. 3.7.4 使用Spy
  106. 3.7.5 GitHub Scientist
  107. 3.7.6 灰度发布与金丝雀发布
  108. 3.7.7 在哪里使用它
  109. 3.8 模式:装饰合作者
  110. 3.8.1 示例:会员计划
  111. 3.8.2 在哪里使用它
  112. 3.9 模式:变更数据捕获
  113. 3.9.1 示例:发行会员卡
  114. 3.9.2 实现变更数据捕获
  115. 3.9.3 在哪里使用它
  116. 3.10 总结
  117. 第4章 分解数据库
  118. 4.1 模式:共享数据库
  119. 4.1.1 应对模式
  120. 4.1.2 何处使用
  121. 4.2 但这是不可能做到的!
  122. 4.3 模式:数据库视图
  123. 4.3.1 数据库即公共契约
  124. 4.3.2 通过视图来对外展现
  125. 4.3.3 限制条件
  126. 4.3.4 所有权
  127. 4.3.5 何处使用
  128. 4.4 模式:数据库包装服务
  129. 4.5 模式:数据库即服务接口
  130. 4.5.1 实现映射引擎
  131. 4.5.2 与视图相比
  132. 4.5.3 何处使用
  133. 4.6 转让所有权
  134. 4.6.1 模式:暴露单体中的聚合
  135. 4.6.2 模式:变更数据所有权
  136. 4.7 数据同步
  137. 4.8 模式:在应用程序中同步数据
  138. 4.8.1 步骤1:批量同步数据
  139. 4.8.2 步骤2:同步写入,从旧表结构中读取
  140. 4.8.3 步骤3:同步写入,从新表结构中读取
  141. 4.8.4 在哪里使用它(一)
  142. 4.8.5 在哪里使用它(二)
  143. 4.9 模式:追踪器写入
  144. 4.9.1 数据同步
  145. 4.9.2 案例:Square的订单
  146. 4.9.3 在哪里使用它
  147. 4.10 拆分数据库
  148. 4.11 先拆分数据库,还是先拆分代码?
  149. 4.11.1 先拆分数据库
  150. 4.11.2 先拆分代码
  151. 4.11.3 将数据库和代码一起拆分
  152. 4.11.4 那么,我应该先拆分哪个?
  153. 4.12 表结构拆分示例
  154. 4.13 模式:拆分表
  155. 4.14 模式:将外键关系移动到代码中
  156. 4.14.1 移动连表查询
  157. 4.14.2 数据一致性
  158. 4.14.3 在哪里使用
  159. 4.14.4 示例:共享静态数据
  160. 4.15 事务
  161. 4.15.1 ACID事务
  162. 4.15.2 仍然保持ACID,但缺乏整体的原子性?
  163. 4.15.3 两阶段提交
  164. 4.15.4 对分布式事务说不
  165. 4.16 saga
  166. 4.16.1 saga的失败模式
  167. 4.16.2 实施saga
  168. 4.16.3 saga与分布式事务
  169. 4.17 总结
  170. 第5章 成长的烦恼
  171. 5.1 服务越多,痛苦越多
  172. 5.2 规模化下的所有权
  173. 5.2.1 这个问题如何表现出来?
  174. 5.2.2 这个问题什么时候会发生?
  175. 5.2.3 潜在的解决方案
  176. 5.3 破坏性变更
  177. 5.3.1 这个问题如何表现出来?
  178. 5.3.2 这个问题什么时候会发生?
  179. 5.3.3 潜在的解决方案
  180. 5.4 报表
  181. 5.4.1 这个问题什么时候会发生?
  182. 5.4.2 潜在的解决方案
  183. 5.5 监控和故障排除
  184. 5.5.1 什么时候会出现这些问题?
  185. 5.5.2 这些问题是如何发生的?
  186. 5.5.3 潜在的解决方案
  187. 5.6 本地开发者体验
  188. 5.6.1 这个问题如何表现出来?
  189. 5.6.2 什么时候会出现这些问题?
  190. 5.6.3 潜在的解决方案
  191. 5.7 运行太多东西
  192. 5.7.1 这个问题如何表现出来?
  193. 5.7.2 这个问题什么时候会发生?
  194. 5.7.3 潜在的解决方案
  195. 5.8 端到端测试
  196. 5.8.1 这个问题如何表现出来?
  197. 5.8.2 这个问题什么时候会发生?
  198. 5.8.3 潜在的解决方案
  199. 5.9 全局与局部优化
  200. 5.9.1 这个问题如何表现出来?
  201. 5.9.2 这个问题什么时候会发生?
  202. 5.9.3 潜在的解决方案
  203. 5.10 健壮性和弹性
  204. 5.10.1 这个问题如何表现出来?
  205. 5.10.2 这个问题什么时候会发生?
  206. 5.10.3 潜在的解决方案
  207. 5.11 孤儿服务
  208. 5.11.1 这个问题如何表现出来?
  209. 5.11.2 这个问题什么时候会发生?
  210. 5.11.3 潜在的解决方案
  211. 5.12 总结
  212. 第6章 结语
  213. 附录A 参考书目
  214. 附录B 模式列表
书名:重构到微服务
作者:Sam Newman
译者:王威, 梅雪松, 姚琪琳 译
国内出版社:中国电力出版社
出版时间:2023年08月
页数:262
书号:978-7-5198-7950-1
原版书书名:Monolith to Microservices
原版书出版商:O'Reilly Media
Sam Newman
 
Sam Newman是一名开发者、架构师、作家和演讲者,曾与全球不同业务领域的多家公司合作。他目前独立工作,主要关注云、持续交付和微服务的相关技术。在这本书之前,他写了畅销的《Building Microservices》,也是由O’Reilly出版。
当他没有在不同的业界潮流概念之间弄潮之时,你可以在东肯特郡的乡村找到他,以及他所热衷的多种体育活动。
 
 
本书封面上的动物是刺菜花水母(学名:Drymonema dalmatinum)。这种亚热带水母生活在大西洋中部和地中海地区。它于1880年首次在克罗地亚(当时的达尔马提亚)海岸被确认。自二战以来,看到刺菜花水母的情况很少, 但2014年在意大利海岸有人拍摄到一个巨大的标本。
这种水母也被亲切的称为“大粉红”,因为它的褐粉色的颜色和令人印象深刻的尺寸——直径可达三英尺。其所属类的名称Scyphozoa来自一个希腊词,意思是“杯子”,借指动物的身体形状。Medusozoa亚门的名称来自水母的长触角,它类似于从神话中的怪物头上长出的蛇。
像其他水母一样,刺菜花水母同时使用有性和无性繁殖。在有性繁殖中,雄性释放精子,雌性释放卵子,然后在水中连接。受精卵成为息肉,息肉在成熟前通过出芽进行无性繁殖。据了解,刺花水母以其他水母为食,通常是月水母。
水母只在咸水体中发现,从不在淡水中发现。
奥莱利封面上的许多动物都濒临灭绝;所有这些动物对世界都很重要。
封面插图由Karen Montgomery创作,基于Medusae of the World中的一张黑白图片。
购买选项
定价:98.00元
书号:978-7-5198-7950-1
出版社:中国电力出版社