微服务设计(第2版)
Sam Newman
钟健鑫 , 张沙沙, 智伟 译
出版时间:2024年04月
页数:428
“微服务架构有许多吸引人的优点,但贸然选用,你的构建过程注定充满艰辛与坎坷。微服务这条路是否真的适合你,一旦选定,如何巧妙躲过各种陷阱?答案就在本书中。”
——Martin Fowler
Thoughtworks首席科学家
“关于微服务的权威指南——对于这一主题覆盖之广、之深令人叹为观止。”
——Daniel Bryant
Ambassador Labs开发者关系总监
“一本全面而实用的指南,教你真正用好微服务架构。萨姆清晰地阐述了微服务决策过程中需要关注的一切信息。”
——Sarah Wells
《金融时报》工程能力建设组技术总监

随着大量组织从单体应用迁移到细粒度的微服务应用,分布式系统变得越来越复杂,这个过程中也出现了一系列问题。本书深入探讨了构建、管理、扩展和演进微服务架构时需要考虑的方方面面。萨姆·纽曼在书中拆解了大量案例并提供了落地指导,架构师、开发人员、测试人员和IT运维人员都可以通过本书打下坚实的基础,深入了解最新的建模、集成、测试、部署和监控解决方案。书中的案例均为业界典范,展示了组织如何最大程度地发挥微服务架构的潜力。
微服务发展迅速,跟着本书,掌握最新的技术、方法和实践。
● 确保系统设计与组织目标保持一致
● 探索与系统集成服务的多种选择
● 了解如何独立部署微服务
● 测试和监控分布式服务的复杂性
● 构建软件之初就将安全性构建其中
● 用户界面、容器编排和无服务器的最新进展
  1. 审读致谢
  2. 专家推荐
  3. 推荐序一 | 肖然
  4. 推荐序二 | 沈剑
  5. 译者序
  6. 前言
  7. 第一部分 基础
  8. 第1章 追根问底微服务
  9. 1.1 微服务概述
  10. 1.2 微服务的关键概念
  11. 1.2.1 可独立部署
  12. 1.2.2 围绕业务领域建模
  13. 1.2.3 状态自主
  14. 1.2.4 服务大小
  15. 1.2.5 灵活性
  16. 1.2.6 架构和组织的一致性
  17. 1.3 单体
  18. 1.3.1 单进程单体
  19. 1.3.2 模块化单体
  20. 1.3.3 分布式单体
  21. 1.3.4 单体和交付争用
  22. 1.3.5 单体的优势
  23. 1.4 技术能力
  24. 1.4.1 日志聚合和分布式追踪
  25. 1.4.2 容器和Kubernetes
  26. 1.4.3 流技术
  27. 1.4.4 公有云和无服务器技术
  28. 1.5 微服务的优势
  29. 1.5.1 技术的异构性
  30. 1.5.2 健壮性
  31. 1.5.3 扩展性
  32. 1.5.4 部署的便捷性
  33. 1.5.5 组织协调
  34. 1.5.6 可组合性
  35. 1.6 微服务的痛点
  36. 1.6.1 开发者体验
  37. 1.6.2 技术过载
  38. 1.6.3 成本
  39. 1.6.4 生成报表
  40. 1.6.5 监控和故障排除
  41. 1.6.6 安全
  42. 1.6.7 测试
  43. 1.6.8 延迟
  44. 1.6.9 数据一致性
  45. 1.7 我应该采用微服务吗
  46. 1.7.1 不适用情况
  47. 1.7.2 适用情况
  48. 1.8 小结
  49. 第2章 微服务建模
  50. 2.1 MusicCorp简介
  51. 2.2 合理划分微服务边界
  52. 2.2.1 信息隐藏
  53. 2.2.2 内聚
  54. 2.2.3 耦合
  55. 2.2.4 内聚和耦合的相互作用
  56. 2.3 耦合的类型
  57. 2.3.1 领域耦合
  58. 2.3.2 传递耦合
  59. 2.3.3 公共耦合
  60. 2.3.4 内容耦合
  61. 2.4 恰到好处的领域驱动设计
  62. 2.4.1 通用语言
  63. 2.4.2 聚合
  64. 2.4.3 限界上下文
  65. 2.4.4 将聚合及限界上下文映射到微服务
  66. 2.4.5 事件风暴
  67. 2.5 DDD在微服务环境中的应用案例
  68. 2.6 领域边界的替代方法
  69. 2.6.1 易变性
  70. 2.6.2 数据
  71. 2.6.3 技术
  72. 2.6.4 组织
  73. 2.7 混合模型和例外
  74. 2.8 小结
  75. 第3章 拆分大单体
  76. 3.1 明确目标
  77. 3.2 增量迁移
  78. 3.3 单体并不是威胁
  79. 3.4 先拆分什么
  80. 3.5 按层拆分
  81. 3.5.1 代码优先
  82. 3.5.2 数据优先
  83. 3.6 有用的拆分模式
  84. 3.6.1 绞杀者模式
  85. 3.6.2 并行运行模式
  86. 3.6.3 功能开关模式
  87. 3.7 拆分数据库的注意事项
  88. 3.7.1 性能
  89. 3.7.2 数据完整性
  90. 3.7.3 事务
  91. 3.7.4 工具
  92. 3.7.5 报表数据库
  93. 3.8 小结
  94. 第4章 微服务间通信模式
  95. 4.1 从进程内到进程间
  96. 4.1.1 性能
  97. 4.1.2 接口变更
  98. 4.1.3 错误处理
  99. 4.2 进程内的通信技术:选择众多
  100. 4.3 微服务间的通信模式
  101. 4.4 同步阻塞模式
  102. 4.4.1 优点
  103. 4.4.2 缺点
  104. 4.4.3 适用情况
  105. 4.5 异步非阻塞模式
  106. 4.5.1 优点
  107. 4.5.2 缺点
  108. 4.5.3 适用情况
  109. 4.6 共用数据模式
  110. 4.6.1 实现
  111. 4.6.2 优点
  112. 4.6.3 缺点
  113. 4.6.4 适用情况
  114. 4.7 请求?C响应模式
  115. 4.7.1 实现:同步与异步
  116. 4.7.2 适用情况
  117. 4.8 事件驱动模式
  118. 4.8.1 实现
  119. 4.8.2 事件
  120. 4.8.3 适用情况
  121. 4.9 谨慎行事
  122. 4.10 小结
  123. 第二部分 实现
  124. 第5章 实现微服务间通信
  125. 5.1 寻找理想的技术
  126. 5.1.1 轻松实现向后兼容
  127. 5.1.2 明确你的接口
  128. 5.1.3 保持API的技术中立
  129. 5.1.4 简化提供给消费者的服务
  130. 5.1.5 隐藏内部实现细节
  131. 5.2 技术选型
  132. 5.2.1 远程过程调用
  133. 5.2.2 REST
  134. 5.2.3 GraphQL
  135. 5.2.4 消息代理
  136. 5.3 序列化格式
  137. 5.3.1 文本格式
  138. 5.3.2 二进制格式
  139. 5.4 模式
  140. 5.4.1 结构性破坏和语义性破坏
  141. 5.4.2 是否应该使用模式
  142. 5.5 处理微服务间的变更
  143. 5.6 避免破坏性变更
  144. 5.6.1 扩展式更改
  145. 5.6.2 兼容的消费者
  146. 5.6.3 合适的技术
  147. 5.6.4 显式接口
  148. 5.6.5 尽早发现破坏性变更
  149. 5.7 管理破坏性变更
  150. 5.7.1 同步部署
  151. 5.7.2 共存不兼容的微服务版本
  152. 5.7.3 模拟旧接口
  153. 5.7.4 推荐的方法
  154. 5.7.5 社会契约
  155. 5.7.6 追踪使用情况
  156. 5.7.7 极端措施
  157. 5.8 DRY和微服务架构中的代码复用风险
  158. 5.9 服务发现
  159. 5.9.1 域名系统
  160. 5.9.2 动态服务注册
  161. 5.9.3 不要忘记人类
  162. 5.10 服务网格和API网关
  163. 5.10.1 API网关
  164. 5.10.2 服务网格
  165. 5.10.3 其他协议
  166. 5.11 文档服务
  167. 5.11.1 显式模式
  168. 5.11.2 自描述系统
  169. 5.12 小结
  170. 第6章 工作流
  171. 6.1 数据库事务
  172. 6.1.1 ACID事务
  173. 6.1.2 还是ACID事务,但缺乏原子性支持吗
  174. 6.2 分布式事务:两阶段提交
  175. 6.3 分布式事务:只需说“不”
  176. 6.4 Saga
  177. 6.4.1 Saga故障模式
  178. 6.4.2 实现Saga
  179. 6.4.3 Saga与分布式事务
  180. 6.5 小结
  181. 第7章 构建
  182. 7.1 持续集成简介
  183. 7.1.1 你真的在实践持续集成吗
  184. 7.1.2 分支模型
  185. 7.2 构建流水线和持续交付
  186. 7.2.1 工具
  187. 7.2.2 权衡与环境
  188. 7.2.3 构建制品
  189. 7.3 将源代码和构建映射到微服务
  190. 7.3.1 一个巨大的代码库,一次巨大的构建
  191. 7.3.2 多代码库
  192. 7.3.3 单一代码库
  193. 7.3.4 我会使用哪种方式
  194. 7.4 小结
  195. 第8章 部署
  196. 8.1 从逻辑到物理
  197. 8.1.1 多实例
  198. 8.1.2 数据库
  199. 8.1.3 环境
  200. 8.2 微服务部署原则
  201. 8.2.1 隔离执行
  202. 8.2.2 专注于自动化
  203. 8.2.3 基础设施即代码
  204. 8.2.4 零停机部署
  205. 8.2.5 期望状态管理
  206. 8.3 部署选项
  207. 8.3.1 物理机
  208. 8.3.2 虚拟机
  209. 8.3.3 容器
  210. 8.3.4 应用容器
  211. 8.3.5 平台即服务(PaaS)
  212. 8.3.6 函数即服务(FaaS)
  213. 8.4 哪种部署方式适合你
  214. 8.5 Kubernetes与容器编排
  215. 8.5.1 容器编排案例
  216. 8.5.2 Kubernetes概念的简化视图
  217. 8.5.3 多租户和联邦
  218. 8.5.4 云原生计算会
  219. 8.5.5 平台和可移植性
  220. 8.5.6 Helm、Operator与CRD
  221. 8.5.7 Knative
  222. 8.5.8 未来
  223. 8.5.9 你应该使用它吗
  224. 8.6 渐进式交付
  225. 8.6.1 分离部署与发布
  226. 8.6.2 渐进式交付
  227. 8.6.3 功能开关
  228. 8.6.4 金丝雀发布
  229. 8.6.5 并行运行
  230. 8.7 小结
  231. 第9章 测试
  232. 9.1 测试类型
  233. 9.2 测试范围
  234. 9.2.1 单元测试
  235. 9.2.2 服务测试
  236. 9.2.3 端到端测试
  237. 9.2.4 权衡
  238. 9.3 实现服务测试
  239. 9.3.1 mock还是打桩
  240. 9.3.2 更智能的打桩服务
  241. 9.4 微妙的端到端测试
  242. 9.4.1 脆弱的测试
  243. 9.4.2 谁来写测试
  244. 9.4.3 测试应该运行的时间
  245. 9.4.4 大量的堆积
  246. 9.4.5 元版本
  247. 9.4.6 缺乏独立可测试性
  248. 9.5 应该放弃端到端测试吗
  249. 9.5.1 契约测试和消费者驱动的契约
  250. 9.5.2 一点补充
  251. 9.6 开发者体验
  252. 9.7 从预发布环境测试到生产环境测试
  253. 9.7.1 生产环境测试的类型
  254. 9.7.2 确保生产环境测试的安全性
  255. 9.7.3 平均故障间隔时间和平均修复时间的权衡
  256. 9.8 跨功能测试
  257. 9.8.1 性能测试
  258. 9.8.2 健壮性测试
  259. 9.9 小结
  260. 第10章 从监控到可观测性
  261. 10.1 混乱、恐慌和困惑
  262. 10.2 单个微服务,单个服务器
  263. 10.3 单个微服务,多个服务器
  264. 10.4 多个微服务,多个服务器
  265. 10.5 可观测性与监控
  266. 10.6 构建可观测性的组件
  267. 10.6.1 日志聚合
  268. 10.6.2 指标聚合
  269. 10.6.3 分布式追踪
  270. 10.6.4 我们做得如何
  271. 10.6.5 警报
  272. 10.6.6 语义监控
  273. 10.6.7 生产环境测试
  274. 10.7 标准化
  275. 10.8 选择工具
  276. 10.8.1 大众化
  277. 10.8.2 易于集成
  278. 10.8.3 提供上下文
  279. 10.8.4 实时性
  280. 10.8.5 恰如其分
  281. 10.9 机器专家
  282. 10.10 起点
  283. 10.11 小结
  284. 第11章 安全
  285. 11.1 核心原则
  286. 11.1.1 最小权限原则
  287. 11.1.2 深度防御
  288. 11.1.3 自动化
  289. 11.1.4 在交付过程中构建安全性
  290. 11.2 五大网络安全功能
  291. 11.2.1 身份识别
  292. 11.2.2 保护
  293. 11.2.3 检测
  294. 11.2.4 响应
  295. 11.2.5 恢复
  296. 11.3 应用安全的基础
  297. 11.3.1 凭证
  298. 11.3.2 打补丁
  299. 11.3.3 备份
  300. 11.3.4 重建
  301. 11.4 隐式信任与零信任
  302. 11.4.1 隐式信任
  303. 11.4.2 零信任
  304. 11.4.3 这是个范围
  305. 11.5 数据保护
  306. 11.5.1 传输中的数据
  307. 11.5.2 静态数据
  308. 11.6 身份验证和鉴权
  309. 11.6.1 服务间验证
  310. 11.6.2 用户的身份验证
  311. 11.6.3 常见的单点登录实现
  312. 11.6.4 单点登录网关
  313. 11.6.5 细粒度鉴权
  314. 11.6.6 混淆代理人问题
  315. 11.6.7 中心化上游鉴权
  316. 11.6.8 去中心化鉴权
  317. 11.6.9 JWT
  318. 11.7 小结
  319. 第12章 弹性
  320. 12.1 弹性介绍
  321. 12.1.1 健壮性
  322. 12.1.2 可恢复性
  323. 12.1.3 优雅的可扩展性
  324. 12.1.4 持续适应性
  325. 12.1.5 代入微服务架构
  326. 12.2 故障无处不在
  327. 12.3 多少才算多
  328. 12.4 功能降级
  329. 12.5 稳定性模式
  330. 12.5.1 超时
  331. 12.5.2 重试
  332. 12.5.3 舱壁
  333. 12.5.4 断路器
  334. 12.5.5 隔离
  335. 12.5.6 冗余
  336. 12.5.7 中间件
  337. 12.5.8 幂等
  338. 12.6 分散风险
  339. 12.7 CAP定理
  340. 12.7.1 牺牲一致性
  341. 12.7.2 牺牲可用性
  342. 12.7.3 牺牲分区容错性
  343. 12.7.4 AP还是CP
  344. 12.7.5 全部和全不并不是二选一
  345. 12.7.6 现实世界
  346. 12.8 混沌工程
  347. 12.8.1 演练日
  348. 12.8.2 生产实验
  349. 12.8.3 超越健壮性
  350. 12.9 问责
  351. 12.10 小结
  352. 第13章 扩展性
  353. 13.1 扩展性的4个维度
  354. 13.1.1 纵向扩容
  355. 13.1.2 横向复制
  356. 13.1.3 数据分区
  357. 13.1.4 功能拆分
  358. 13.2 组合模型
  359. 13.3 从小处着手
  360. 13.4 缓存
  361. 13.4.1 用于提高性能
  362. 13.4.2 用于提高扩展性
  363. 13.4.3 用于提高健壮性
  364. 13.4.4 将缓存设置在哪里
  365. 13.4.5 让缓存失效
  366. 13.4.6 缓存的黄金法则
  367. 13.4.7 新鲜度与优化程度
  368. 13.4.8 缓存中毒:一个需要警惕的故事
  369. 13.5 自动扩展
  370. 13.6 重新出发
  371. 13.7 小结
  372. 第三部分 人和组织
  373. 第14章 用户界面
  374. 14.1 迈向数字化
  375. 14.2 集中所有权模型
  376. 14.3 业务流团队
  377. 14.3.1 共享专家
  378. 14.3.2 确保一致性
  379. 14.3.3 持续应对技术的挑战
  380. 14.4 单体前端模式
  381. 14.5 微前端模式
  382. 14.5.1 实施视角
  383. 14.5.2 应用时机
  384. 14.6 基于页面的拆分模式
  385. 14.7 基于部件的拆分模式
  386. 14.7.1 实施视角
  387. 14.7.2 应用时机
  388. 14.8 约束
  389. 14.9 中心聚合网关模式
  390. 14.9.1 归属权
  391. 14.9.2 不同类型的用户界面
  392. 14.9.3 热点问题
  393. 14.9.4 应用时机
  394. 14.10 服务于前端的后端模式
  395. 14.10.1 如何确定BFF的数量
  396. 14.10.2 BFF如何应对复用问题
  397. 14.10.3 BFF在桌面Web和更多场景中的应用
  398. 14.10.4 应用时机
  399. 14.11 GraphQL
  400. 14.12 模式的混合应用
  401. 14.13 小结
  402. 第15章 组织结构
  403. 15.1 低耦合组织结构
  404. 15.2 康威定律
  405. 15.3 团队规模
  406. 15.4 理解康威定律
  407. 15.5 小团队,大组织
  408. 15.6 关注团队自治
  409. 15.7 强所有权与集体所有权
  410. 15.7.1 强所有权
  411. 15.7.2 集体所有权
  412. 15.7.3 团队层面与组织层面
  413. 15.7.4 模式之间的平衡
  414. 15.8 赋能团队
  415. 15.8.1 实践社区
  416. 15.8.2 平台
  417. 15.9 共享微服务
  418. 15.9.1 难以划分
  419. 15.9.2 跨领域的变更
  420. 15.9.3 交付瓶颈
  421. 15.10 内部开源
  422. 15.10.1 核心提交者的作用
  423. 15.10.2 成熟度
  424. 15.10.3 工具支撑
  425. 15.11 可插拔式模块化微服务
  426. 15.12 孤儿服务
  427. 15.13 案例研究:Real Estate网站
  428. 15.14 地域分布
  429. 15.15 逆康威定律
  430. 15.16 人
  431. 15.17 小结
  432. 第16章 演进式架构师
  433. 16.1 名字的意义
  434. 16.2 什么是软件架构
  435. 16.3 让改变成为可能
  436. 16.4 架构师的可演进愿景
  437. 16.5 定义系统边界
  438. 16.6 一种社会结构
  439. 16.7 宜居性
  440. 16.8 原则方法
  441. 16.8.1 战略目标
  442. 16.8.2 原则
  443. 16.8.3 实践
  444. 16.8.4 原则与实践相结合
  445. 16.8.5 一个真实的例子
  446. 16.9 演进式架构
  447. 16.10 业务流组织中的架构
  448. 16.11 组建团队
  449. 16.12 必要标准
  450. 16.12.1 可监控性
  451. 16.12.2 接口
  452. 16.12.3 架构安全性
  453. 16.13 治理并铺路
  454. 16.13.1 榜样的力量
  455. 16.13.2 定制的微服务模板
  456. 16.13.3 将铺好的路规模化
  457. 16.14 技术债务
  458. 16.15 异常处理
  459. 16.16 小结
  460. 后记:全景概述
  461. 参考资料
书名:微服务设计(第2版)
作者:Sam Newman
译者:钟健鑫 , 张沙沙, 智伟 译
国内出版社:人民邮电出版社
出版时间:2024年04月
页数:428
书号:978-7-115-63876-2
原版书书名:Building Microservices, 2e
原版书出版商:O'Reilly Media
Sam Newman
 
Sam Newman是一名开发者、架构师、作家和演讲者,曾与全球不同业务领域的多家公司合作。他目前独立工作,主要关注云、持续交付和微服务的相关技术。在这本书之前,他写了畅销的《Building Microservices》,也是由O’Reilly出版。
当他没有在不同的业界潮流概念之间弄潮之时,你可以在东肯特郡的乡村找到他,以及他所热衷的多种体育活动。
 
 
购买选项
定价:159.80元
书号:978-7-115-63876-2
出版社:人民邮电出版社