内容简介
近些年来,微服务一直是很好热门的话题,关于微服务架构的讨论也是层出不穷。本书以贯穿整书的示例为出发点,由浅入深地阐述使用微服务的很好实践,以及如何避免采用微服务架构可能带来的复杂性陷阱。本书从微服务架构本身的特征入手,讨论微服务组件的设计指导原则、有效通信的方式以及常见的安全挑战和数据模型的选择;然后进入微服务架构的测试部分,探讨微服务的测试挑战和解决方法、监控和扩展常用的实践以及如何将现有架构演变为微服务架构;很后总结微服务架构在设计和开发方面遇到的常见问题及解决方案。
作者介绍
作者简介 Umesh Ram Sharma是一名软件开发工程师,在可扩展、分布式云服务应用的架构、设计及开发方面有8年以上的经验。他从印度卡纳塔克邦州开放大学获得信息技术专业的硕士学位。出于对微服务和Spring的兴趣,他成了J2EE、JavaScript、Struts、Hibernate和Spring方面的专家,也具有AWS、J2EE、MySQL、MongoDB、memchached、Apache、Tomcat和Hazelcast等技术的实践经验。 Umesh Ram Sharma目前是ZestMoney公司的&席软件工程师,帮助他的团队将当前项目迁移到微服务。闲暇时,他喜欢开车兜风、烹饪和参加新技术的各种大会。 译者简介 占红来是一位咨询师,致力于帮助客户和成就客户。曾主持过某世界500强等大型公司的软件一体化开发平台的测试能力提升等落地项目,得到客户的一致好评,并受邀再次合作。 刘博毕业于哈尔滨工业大学,是一位拥有十多年测试经验的软件工程师,主攻自动化测试、性能测试和架构调优领域,对这些领域流行的技术体系和架构风险都有准确的把握。他积极参加对外的技术论坛,把在IBM、活跃网络和思特沃克的经验积累加以总结并分享给业内相关人士,获得众多好评。
目录
- 第1章微服务架构简介1
- 1.1常规微服务架构2
- 1.2微服务架构的特征2
- 1.2.1问题定义2
- 1.2.2解决方案3
- 1.3做好微服务架构面临的挑战4
- 1.3.1通过日志调试5
- 1.3.2服务监控5
- 1.3.3公共库5
- 1.3.4服务之间的消息传递5
- 1.3.5微服务的部署和版本管理6
- 1.4微服务的未来6
- 1.4.1无服务架构7
- 1.4.2微服务即PaaS7
- 1.5与传统架构相比微服务架构的优势7
- 1.6是不是看起来与SOA很像9
- 1.7将业务领域划分为微服务组件11
- 1.8到底要不要使用微服务13
- 1.8.1组织认同度13
- 1.8.2体验DevOps14
- 1.8.3分析现有数据库模型14
- 1.8.4自动化和CI/CD14
- 1.8.5集成14
- 1.8.6安全14
- 1.8.7成功迁移的例子15
- 1.9示例项目(信用风险评估引擎)15
- 1.10Spring15
- 1.11SpringBoot16
- 1.12小结19
- 第2章定义微服务组件21
- 2.1微服务的定义21
- 2.2服务发现及其用途22
- 2.2.1DNS22
- 2.2.2服务发现的请求23
- 2.2.3服务发现模式示例26
- 2.2.4整个架构中的配置外化29
- 2.3API网关及其诉求32
- 2.3.1认证鉴权33
- 2.3.2不同协议34
- 2.3.3负载均衡34
- 2.3.4请求转发(包括服务发现)34
- 2.3.5响应转换34
- 2.3.6断路器35
- 2.3.7API网关的优劣性35
- 2.4API网关的例子36
- 2.5用户注册微服务的开发39
- 2.6小结59
- 第3章微服务端点之间的通信61
- 3.1微服务间应该如何通信61
- 3.2编制和编排62
- 3.2.1编制62
- 3.2.2编排63
- 3.3同步通信和异步通信65
- 3.3.1同步通信65
- 3.3.2异步通信68
- 3.3.3财务服务79
- 3.4小结90
- 第4章微服务端点的安全91
- 4.1微服务的安全挑战91
- 4.1.1复合技术栈或者存在遗留代码92
- 4.1.2认证和授权(访问控制)92
- 4.1.3基于令牌的安全实践92
- 4.1.4安全性的责任92
- 4.1.5编制风格的风险92
- 4.1.6微服务之间的通信93
- 4.2与OpenID的OAuth2.0一起使用JWT94
- 4.2.1OpenID94
- 4.2.2OAuth2.095
- 4.2.3JWT97
- 4.2.4示例应用99
- 4.3小结111
- 第5章创建高效的数据模型113
- 5.1数据和建模113
- 5.2单体架构中的数据模型114
- 5.3SOA中的数据模型115
- 5.4微服务架构中的数据模型116
- 5.4.1每个微服务限定一些数据库表116
- 5.4.2每个微服务一个数据库117
- 5.4.3Saga模式117
- 5.4.4必要时采用混合数据技术119
- 5.5从单体应用向微服务迁移数据模型120
- 5.5.1领域驱动设计120
- 5.5.2数据模型迁移方式121
- 5.6小结126
- 第6章测试微服务127
- 6.1微服务中测试的目的127
- 6.2单元测试128
- 6.3集成测试131
- 6.4组件(服务)测试131
- 6.5契约测试133
- 6.5.1Pact133
- 6.5.2SpringCloudContract134
- 6.6端到端测试135
- 6.7更进一步135
- 6.8小结136
- 第7章部署微服务137
- 7.1持续集成137
- 7.2持续交付138
- 7.3用微服务配置CI和CD工具140
- 7.4微服务的Docker化147
- 7.4.1Docker148
- 7.4.2Docker引擎148
- 7.4.3Docker镜像148
- 7.4.4Docker存储148
- 7.4.5应用程序在Docker中是如何工作的149
- 7.4.6公共、私有和官方的镜像库149
- 7.4.7Docker与VM的区别149
- 7.4.8在Linux中安装Docker150
- 7.5在Docker化的微服务中使用开源CI工具154
- 7.6小结156
- 第8章演进现有系统157
- 8.1从哪里开始159
- 8.1.1架构视角和最佳实践159
- 8.1.2数据库视角和最佳实践162
- 8.2示例应用及其演变过程163
- 8.2.1用户管理服务164
- 8.2.2购物车/订单服务164
- 8.2.3支付服务164
- 8.2.4配送/跟踪服务和通信服务164
- 8.2.5产品推荐服务165
- 8.2.6调度服务165
- 8.3小结166
- 第9章微服务的监控和扩展167
- 9.1微服务系统的监控原则167
- 9.1.1如何设置并使用警报168
- 9.1.2从一开始做好监控和发布渠道规划168
- 9.1.3自动扩展和自动发现168
- 9.1.4监控前门流量169
- 9.2监控模式的发展变化169
- 9.3日志记录有助于监控170
- 9.4微服务系统的扩展原则171
- 9.4.1x轴172
- 9.4.2y轴172
- 9.4.3z轴173
- 9.5实施扩展策略前请三思174
- 9.6微服务的监控和扩展工具175
- 9.7小结180
- 第10章故障排除181
- 10.1使用微服务时的常见问题181
- 10.1.1性能下降181
- 10.1.2日志记录位置因编程语言而异183
- 10.1.3多组件之间的耦合或依赖问题184
- 10.1.4服务部署数量与日俱增184
- 10.1.5监控多项服务,发现性能下降或其他问题185
- 10.1.6日志与不同组件的关系185
- 10.2常见问题的解决方法186
- 10.2.1解决性能问题的步骤186
- 10.2.2处理不同语言生成的并处于不同位置的日志记录186
- 10.2.3服务之间的依赖关系187
- 10.2.4DevOps专家积极参与187
- 10.2.5监控188
- 10.3小结189