作者简介:
Sam Newman
是ThoughtWorks公司的技术专家、ThoughtWorks内部系统架构师,同时还为全球的客户提供咨询服务。他在开发和IT运维方面与全球多个领域的公司有过合作。
译者简介:
崔力强
阿里巴巴技术专家,目前专注于持续交付相关的产品开发。曾在ThoughtWorks任职多年,从事软件定制开发、敏捷软件开发的相关咨询等工作,帮助过数个团队和项目进行精益需求管理、软件设计、自动化测试和持续集成等实践。微信号:blade_1986
张骏
2010年加入ThoughtWorks公司。作为开发人员、项目经理、资深敏捷教练和资深咨询师,在金融、电信和能源服务行业的大型复杂业务系统的设计、开发、管理、咨询等方面有丰富的经验。曾为国内外诸多客户提供软件设计、开发以及咨询服务。拥有10年工作经验,在Scrum、看板、规模化敏捷等方法论,以及精益需求管理、自动化测试、持续集成、领域驱动设计、微服务等具体实践方面都有丰富的积累。微信号:zhangjun695339
前言xiv
第1章 微服务1
1.1 什么是微服务2
1.1.1 很小,专注于做好一件事2
1.1.2 自治性3
1.2 主要好处3
1.2.1 技术异构性3
1.2.2 弹性4
1.2.3 扩展5
1.2.4 简化部署5
1.2.5 与组织结构相匹配6
1.2.6 可组合性6
1.2.7 对可替代性的优化6
1.3 面向服务的架构7
1.4 其他分解技术7
1.4.1 共享库8
1.4.2 模块8
1.5 没有银弹9
1.6 小结10
第2章 演化式架构师11
2.1 不准确的比较11
2.2 架构师的演化视角12
2.3 分区14
2.4 一个原则性的方法15
2.4.1 战略目标15
2.4.2 原则15
2.4.3 实践16
2.4.4 将原则和实践相结合16
2.4.5 真实世界的例子16
2.5 要求的标准17
2.5.1 监控18
2.5.2 接口18
2.5.3 架构安全性18
2.6 代码治理18
2.6.1 范例19
2.6.2 裁剪服务代码模板19
2.7 技术债务20
2.8 例外管理21
2.9 集中治理和领导21
2.10 建设团队22
2.11 小结23
第3章 如何建模服务24
3.1 MusicCorp简介24
3.2 什么样的服务是好服务25
3.2.1 松耦合25
3.2.2 高内聚25
3.3 限界上下文26
3.3.1 共享的隐藏模型26
3.3.2 模块和服务27
3.3.3 过早划分28
3.4 业务功能28
3.5 逐步划分上下文29
3.6 关于业务概念的沟通30
3.7 技术边界30
3.8 小结31
第4章 集成32
4.1 寻找理想的集成技术32
4.1.1 避免破坏性修改32
4.1.2 保证API的技术无关性32
4.1.3 使你的服务易于消费方使用33
4.1.4 隐藏内部实现细节33
4.2 为用户创建接口33
4.3 共享数据库33
4.4 同步与异步35
4.5 编排与协同35
4.6 远程过程调用38
4.6.1 技术的耦合38
4.6.2 本地调用和远程调用并不相同39
4.6.3 脆弱性39
4.6.4 RPC很糟糕吗40
4.7 REST41
4.7.1 REST和HTTP41
4.7.2 超媒体作为程序状态的引擎42
4.7.3 JSON、XML还是其他44
4.7.4 留心过多的约定44
4.7.5 基于HTTP的REST的缺点45
4.8 实现基于事件的异步协作方式46
4.8.1 技术选择46
4.8.2 异步架构的复杂性47
4.9 服务即状态机48
4.10 响应式扩展48
4.11 微服务世界中的DRY和代码重用的危险49
4.12 按引用访问50
4.13 版本管理51
4.13.1 尽可能推迟51
4.13.2 及早发现破坏性修改52
4.13.3 使用语义化的版本管理53
4.13.4 不同的接口共存53
4.13.5 同时使用多个版本的服务54
4.14 用户界面55
4.14.1 走向数字化56
4.14.2 约束56
4.14.3 API组合57
4.14.4 UI片段的组合57
4.14.5 为前端服务的后端59
4.14.6 一种混合方式60
4.15 与第三方软件集成61
4.15.1 缺乏控制61
4.15.2 定制化62
4.15.3 意大利面式的集成62
4.15.4 在自己可控的平台进行定制化62
4.15.5 绞杀者模式64
4.16 小结65
第5章 分解单块系统66
5.1 关键是接缝66
5.2 分解MusicCorp67
5.3 分解单块系统的原因68
5.3.1 改变的速度68
5.3.2 团队结构68
5.3.3 安全68
5.3.4 技术68
5.4 杂乱的依赖69
5.5 数据库69
5.6 找到问题的关键69
5.7 例子:打破外键关系70
5.8 例子:共享静态数据71
5.9 例子:共享数据72
5.10 例子:共享表73
5.11 重构数据库74
5.12 事务边界75
5.12.1 再试一次76
5.12.2 终止整个操作77
5.12.3 分布式事务77
5.12.4 应该怎么办呢78
5.13 报告78
5.14 报告数据库78
5.15 通过服务调用来获取数据80
5.16 数据导出81
5.17 事件数据导出82
5.18 数据导出的备份83
5.19 走向实时84
5.20 修改的代价84
5.21 理解根本原因84
5.22 小结85
第6章 部署86
6.1 持续集成简介86
6.2 把持续集成映射到微服务87
6.3 构建流水线和持续交付90
6.4 平台特定的构建物91
6.5 操作系统构建物92
6.6 定制化镜像93
6.6.1 将镜像作为构建物94
6.6.2 不可变服务器95
6.7 环境95
6.8 服务配置96
6.9 服务与主机之间的映射97
6.9.1 单主机多服务97
6.9.2 应用程序容器99
6.9.3 每个主机一个服务100
6.9.4 平台即服务101
6.10 自动化101
6.11 从物理机到虚拟机102
6.11.1 传统的虚拟化技术103
6.11.2 Vagrant104
6.11.3 Linux容器104
6.11.4 Docker106
6.12 一个部署接口107
6.13 小结109
第7章 测试110
7.1 测试类型110
7.2 测试范围111
7.2.1 单元测试112
7.2.2 服务测试113
7.2.3 端到端测试114
7.2.4 权衡114
7.2.5 比例115
7.3 实现服务测试115
7.3.1 mock还是打桩115
7.3.2 智能的打桩服务116
7.4 微妙的端到端测试117
7.5 端到端测试的缺点118
7.6 脆弱的测试118
7.6.1 谁来写这些测试119
7.6.2 测试多长时间119
7.6.3 大量的堆积120
7.6.4 元版本120
7.7 测试场景,而不是故事121
7.8 拯救消费者驱动的测试121
7.8.1 Pact123
7.8.2 关于沟通124
7.9 还应该使用端到端测试吗124
7.10 部署后再测试125
7.10.1 区分部署和上线125
7.10.2 金丝雀发布126
7.10.3 平均修复时间胜过平均故障间隔时间127
7.11 跨功能的测试128
7.12 小结129
第8章 监控131
8.1 单一服务,单一服务器132
8.2 单一服务,多个服务器132
8.3 多个服务,多个服务器133
8.4 日志,日志,更多的日志134
8.5 多个服务的指标跟踪135
8.6 服务指标135
8.7 综合监控136
8.8 关联标识137
8.9 级联139
8.10 标准化139
8.11 考虑受众140
8.12 未来140
8.13 小结141
第9章 安全143
9.1 身份验证和授权143
9.1.1 常见的单点登录实现144
9.1.2 单点登录网关145
9.1.3 细粒度的授权146
9.2 服务间的身份验证和授权146
9.2.1 在边界内允许一切146
9.2.2 HTTP(S) 基本身份验证147
9.2.3 使用SAML或OpenID Connect148
9.2.4 客户端证书148
9.2.5 HTTP之上的HMAC149
9.2.6 API密钥149
9.2.7 代理问题150
9.3 静态数据的安全152
9.3.1 使用众所周知的加密算法152
9.3.2 一切皆与密钥相关153
9.3.3 选择你的目标153
9.3.4 按需解密153
9.3.5 加密备份153
9.4 深度防御154
9.4.1 防火墙154
9.4.2 日志154
9.4.3 入侵检测(和预防)系统154
9.4.4 网络隔离155
9.4.5 操作系统155
9.5 一个示例156
9.6 保持节俭158
9.7 人的因素158
9.8 黄金法则158
9.9 内建安全159
9.10 外部验证159
9.11 小结159
第10章 康威定律和系统设计161
10.1 证据161
10.1.1 松耦合组织和紧耦合组织162
10.1.2 Windows Vista162
10.2 Netflix和Amazon162
10.3 我们可以做什么163
10.4 适应沟通途径163
10.5 服务所有权164
10.6 共享服务的原因164
10.6.1 难以分割164
10.6.2 特性团队164
10.6.3 交付瓶颈165
10.7 内部开源166
10.7.1 守护者的角色166
10.7.2 成熟166
10.7.3 工具167
10.8 限界上下文和团队结构167
10.9 孤儿服务167
10.10 案例研究:RealEstate.com.au168
10.11 反向的康威定律169
10.12 人170
10.13 小结170
第11章 规模化微服务171
11.1 故障无处不在171
11.2 多少是太多172
11.3 功能降级173
11.4 架构性安全措施174
11.5 反脆弱的组织175
11.5.1 超时176
11.5.2 断路器176
11.5.3 舱壁178
11.5.4 隔离179
11.6 幂等179
11.7 扩展180
11.7.1 更强大的主机181
11.7.2 拆分负载181
11.7.3 分散风险181
11.7.4 负载均衡182
11.7.5 基于worker的系统184
11.7.6 重新设计184
11.8 扩展数据库185
11.8.1 服务的可用性和数据的持久性185
11.8.2 扩展读取185
11.8.3 扩展写操作186
11.8.4 共享数据库基础设施187
11.8.5 CQRS187
11.9 缓存188
11.9.1 客户端、 代理和服务器端缓存188
11.9.2 HTTP缓存189
11.9.3 为写使用缓存190
11.9.4 为弹性使用缓存190
11.9.5 隐藏源服务191
11.9.6 保持简单191
11.9.7 缓存中毒:一个警示192
11.10 自动伸缩192
11.11 CAP定理193
11.11.1 牺牲一致性194
11.11.2 牺牲可用性195
11.11.3 牺牲分区容忍性195
11.11.4 AP还是CP196
11.11.5 这不是全部或全不196
11.11.6 真实世界197
11.12 服务发现197
11.13 动态服务注册199
11.13.1 Zookeeper199
11.13.2 Consul200
11.13.4 构造你自己的系统201
11.13.5 别忘了人201
11.14 文档服务201
11.14.1 Swagger202
11.14.2 HAL 和HAL浏览器202
11.15 自描述系统203
11.16 小结203
第12章 总结204
12.1 微服务的原则204
12.1.1 围绕业务概念建模205
12.1.2 接受自动化文化205
12.1.3 隐藏内部实现细节205
12.1.4 让一切都去中心化206
12.1.5 可独立部署206
12.1.6 隔离失败206
12.1.7 高度可观察207
12.2 什么时候你不应该使用微服务207
12.3 临别赠言208
关于作者209
关于封面209
无R语言数据分析与可视化从入门到精通 本书特色 1. 理论为辅、实践为主。本书涉及一些必要的理论知识,特别是在数据分析部分,但总体以实践为主,因此几乎每节都有大...
《驾驭独角兽》内容简介:独角兽像中国传统文化中的龙一样是人类丰富想象中最神奇的动物之一。种子轮基金Cowboy Venture的创始人Ai
Theexplosivegrowthofe-commerceandonlineenvironmentshasmadetheissueofinformations...
《Android应用测试与调试实战》内容简介:本书是Android应用测试与调试领域最为系统、深入且极具实践指导意义的著作,由拥有近10年
《中古社会变迁与隋唐史研究(上下册)》内容简介:本书是吴宗国先生从教六十周年纪念论文集,分上下两册。上册研究篇,汇集了历年
《清末白话报刊与文学革命》内容简介:五四文学革命的发生,是清末以来数十年时间中,社会环境和文学自身不断发展演化的结果。清末
自從數位科技介入當代藝術,一連串最啟人疑竇的問題諸如:怎樣的作品可以被稱為(當代)藝術?挪用與剽竊之間的區別為何?藝術的
《摄影大讲堂》内容简介:本书是一本通俗易懂的摄影入门书,系统、全面、深入浅出地讲述了摄影的各个方面。从器材与原理到光圈、快
《销售团队没业绩,如何激励?》内容简介:企业生产的产品或服务能够被用户认可,销售团队起着至关重要的作用;同时销售团队的业绩
正所谓“上帝欲其灭亡,必先令其疯狂”,在当下中国,“互联网+资本催化”的新经济引擎高速运转,大有碾压一切、颠覆一切之势。在
五所权威德国设计学院:柏林艺术大学(UdkBerlin)杜塞尔多夫高等专业学院(FHD)莱比锡书籍设计及平面设计学院(HGBLeipzig)奥
微机原理与接口技术实用教程 目录 第1章 微型计算机概述.1.1 计算机的发展概况 1.1.1 计算机的发展历程1.1.2 微型计算机的发展历程1.2 微处理器...
《网页艺术设计》将软件技术与艺术理论进行整合,注重知识性与研究性、实践性与理论性、系统性与逻辑性,全面介绍网页艺术设计的
《ExtJS学习指南》系统化地介绍了ExtJS的基础知识,从框架的下载安装到各种常用小部件的实例介绍,从如何自定义小部件到ExtJS代码
Java 编程思想(英文版.第3版)附光盘 本书特色 本书赢得了全球程序员的广泛赞誉,即使是*晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示...
《李致文存·我的书信》内容简介:《李致文存》第五卷,则收录了李致与巴金的诸多书信,还有曹禺、张爱萍、李又兰、戈宝权、冯骥才
这本书全方位地介绍了如何建立和最终交付一个具有很高商业价值的成功网站,讲解从项目管理的角度入手,撇开烦琐的技术细节,更加
《悦吃悦瘦》内容简介:本书首先揭开众多的减肥产品的真面目,帮助读者走出减肥的误区,告诉读者如何通过合理饮食来达到减肥的目的
《一部手机玩转移动理财》内容简介:现在,手机已成为每个人生活中必不可少的伴侣,几乎24 小时不离身,而将来,手机将成为每个人进
《明清奇案迷踪》内容简介:“莫须有”的空印案,在血流成河的诸般惨状背后,竟是一个并无充分证据证明的贪污罪名;郭桓贪污案,单