编辑推荐
"《微服务架构设计模式》
本书由世界十大软件架构师之一、微服务架构的先驱、Java开发者社区的意见领袖ChrisRichardson亲笔撰写,旨在帮助架构师和程序员学会使用微服务架构成功开发应用程序。书中描述了如何解决我们将面临的众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构,涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。本书并不是鼓吹微服务架构的宣言,作者既介绍了微服务的原理、原则,又详细讲解了实际落地中的架构设计模式,将使你理解微服务架构、它的好处和弊端,以及应该何时使用微服务架构。本书将帮助你建立微服务的全局视野,并学会在纷繁复杂的情况下做出正确的架构选择和取舍。
《架构修炼之道:亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》
亿级调用量的网关系统设计 平台开放、分布式系统设计MQ的使用场景消息推送系统RPCI/O通信微服务多路复用Tomcat的NIO数据异构、系统容错架构"
内容简介
《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》结合实际的生产实践,分别对网关、平台开放、分布式、MQ、RPC、I/O、微服务、容错的内容做了详细介绍。其中的内容不限于概念,而是会下沉到实践背后的感悟与总结。比如本书详细阐述了网关系统是如何“抗量”,又是如何容错的,以及在每次大促中的备战经验。其他内容也是如此,基于实践,源于实践,比如微服务的实战案例、MQ的各种功能场景、消息推送的实践等讲的皆是实践之道。希望读者可以通过《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》了解互联网常用架构知识背后的原理及解决问题之道。
《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》中介绍的网关、分布式、MQ等知识背后的原理,对于每一位互联网研发人员都有很大的参考意义。
成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本独特的书籍中,世界十大软件架构师之一、微服务架构先驱ChrisRichardson收集、分类并解释了44个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。
本书将教会你如何开发和部署生产级别的微服务架构应用。这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。
本书包含:
如何(以及为什么)使用微服务架构
服务拆分的策略
事务管理和查询相关的模式
高效的测试策略
包括容器和Serverless在内的部署模式
本书专为熟悉标准企业应用程序架构的开发人员编写,使用Java编写所有示例代码。
作者简介
克里斯·理查森(ChrisRichardson)
世界十大软件架构师之一,《POJOSinAction》等技术名著的作者,也是著名开源项目CloudFoundry和Eventuate的创始人。他的研究领域包括微服务架构设计、分布式数据管理、事件驱动的应用架构、领域驱动设计、持续交付、Spring框架、Scala、NoSQL数据库等。
喻勇
在技术圈驰骋多年,曾担任过微软技术布道师,VMwareCloudFoundry生态建设负责人,并有幸引领了国内容器技术的创业浪潮。目前定居加拿大,关注微服务架构、云原生应用等领域。
Chris与喻勇曾在VMware全球开发者关系团队共事多年,现在他们合作为国内企业客户提供微服务相关的咨询和培训服务,他们的中文网站是:www.chrisrichardson.cn
王新栋
现就职于京东,“程序架道”公众号作者。平时热爱总结与分享,对高性能API网关、线程调优、NIO、微服务架构、容错等技术有较深的研究和实战经验。目前致力于带领团队在平台开放技术领域实现突破。
章节目录
目录
写给中文版读者的话
译者序
中文版序一
中文版序二
前言
引言
第1章逃离单体地狱/1
1.1迈向单体地狱的漫长旅程/2
1.1.1FTGO应用程序的架构/3
1.1.2单体架构的好处/4
1.1.3什么是单体地狱/4
1.2为什么本书与你有关/7
1.3你会在本书中学到什么/8
1.4拯救之道:微服务架构/8
1.4.1扩展立方体和服务/9
1.4.2微服务架构作为模块化的一种形式/11
1.4.3每个服务都拥有自己的数据库/12
1.4.4FTGO的微服务架构/12
1.4.5微服务架构与SOA的异同/14
1.5微服务架构的好处和弊端/15
1.5.1微服务架构的好处/15
1.5.2微服务架构的弊端/17
1.6微服务架构的模式语言/19
1.6.1微服务架构并不是“银弹”/20
1.6.2模式和模式语言/21
1.6.3微服务架构的模式语言概述/24
1.7微服务之上:流程和组织/29
1.7.1进行软件开发和交付的组织/30
1.7.2进行软件开发和交付的流程/31
1.7.3采用微服务架构时的人为因素/32
第2章服务的拆分策略/34
2.1微服务架构到底是什么/35
2.1.1软件架构是什么,为什么它如此重要/35
2.1.2什么是架构的风格/37
2.1.3微服务架构是一种架构风格/40
2.2为应用程序定义微服务架构/43
2.2.1识别系统操作/45
2.2.2根据业务能力进行服务拆分/50
2.2.3根据子域进行服务拆分/53
2.2.4拆分的指导原则/54
2.2.5拆分单体应用为服务的难点/56
2.2.6定义服务API/59
第3章微服务架构中的进程间通信/63
3.1微服务架构中的进程间通信概述/64
3.1.1交互方式/64
3.1.2在微服务架构中定义API/66
3.1.3API的演化/67
3.1.4消息的格式/69
3.2基于同步远程过程调用模式的通信/70
3.2.1使用REST/71
3.2.2使用gRPC/74
3.2.3使用断路器模式处理局部故障/75
3.2.4使用服务发现/78
3.3基于异步消息模式的通信/82
3.3.1什么是消息传递/83
3.3.2使用消息机制实现交互方式/84
3.3.3为基于消息机制的服务API创建API规范/86
3.3.4使用消息代理/87
3.3.5处理并发和消息顺序/91
3.3.6处理重复消息/92
3.3.7事务性消息/93
3.3.8消息相关的类库和框架/97
3.4使用异步消息提高可用性/99
3.4.1同步消息会降低可用性/99
3.4.2消除同步交互/101
第4章使用Saga管理事务/106
4.1微服务架构下的事务管理/107
4.1.1微服务架构对分布式事务的需求/108
4.1.2分布式事务的挑战/109
4.1.3使用Saga模式维护数据一致性/109
4.2Saga的协调模式/113
4.2.1协同式Saga/113
4.2.2编排式Saga/117
4.3解决隔离问题/121
4.3.1缺乏隔离导致的问题/122
4.3.2Saga模式下实现隔离的对策/123
4.4OrderService和CreateOrderSaga的设计/127
4.4.1OrderService类/128
4.4.2CreateOrderSaga的实现/129
4.4.3OrderCommandHandlers类/136
4.4.4OrderServiceConfiguration类/138
第5章微服务架构中的业务逻辑设计/141
5.1业务逻辑组织模式/142
5.1.1使用事务脚本模式设计业务逻辑/143
5.1.2使用领域模型模式设计业务逻辑/144
5.1.3关于领域驱动设计/146
5.2使用聚合模式设计领域模型/146
5.2.1模糊边界所带来的问题/147
5.2.2聚合拥有明确的边界/149
5.2.3聚合的规则/150
5.2.4聚合的颗粒度/152
5.2.5使用聚合设计业务逻辑/153
5.3发布领域事件/154
5.3.1为什么需要发布变更事件/154
5.3.2什么是领域事件/155
5.3.3事件增强/155
5.3.4识别领域事件/156
5.3.5生成和发布领域事件/157
5.3.6消费领域事件/161
5.4KitchenService的业务逻辑/162
5.5OrderService的业务逻辑/167
5.5.1Order聚合/169
5.5.2OrderService类/173
第6章使用事件溯源开发业务逻辑/176
6.1使用事件溯源开发业务逻辑概述/177
6.1.1传统持久化技术的问题/177
6.1.2什么是事件溯源/179
6.1.3使用乐观锁处理并发更新/186
6.1.4事件溯源和发布事件/186
6.1.5使用快照提升性能/188
6.1.6幂等方式的消息处理/189
6.1.7领域事件的演化/190
6.1.8事件溯源的好处/192
6.1.9事件溯源的弊端/193
6.2实现事件存储库/194
6.2.1EventuateLocal事件存储库的工作原理/195
6.2.2Eventuate的Java客户端框架/198
6.3同时使用Saga和事件溯源/201
6.3.1使用事件溯源实现协同式Saga/203
6.3.2创建编排式Saga/203
6.3.3实现基于事件溯源的Saga参与方/205
6.3.4实现基于事件溯源的Saga编排器/208
第7章在微服务架构中实现查询/212
7.1使用API组合模式进行查询/213
7.1.1findOrder()查询操作/213
7.1.2什么是API组合模式/214
7.1.3使用API组合模式实现findOrder()查询操作/215
7.1.4API组合模式的设计缺陷/216
7.1.5API组合模式的好处和弊端/219
7.2使用CQRS模式/220
7.2.1为什么要使用CQRS/220
7.2.2什么是CQRS/223
7.2.3CQRS的好处/226
7.2.4CQRS的弊端/227
7.3设计CQRS视图/228
7.3.1选择视图存储库/229
7.3.2设计数据访问模块/230
7.3.3添加和更新CQRS视图/232
7.4实现基于AWSDynamoDB的CQRS视图/233
7.4.1OrderHistoryEventHandlers模块/234
7.4.2DynamoDB中的数据建模和查询设计/235
7.4.3OrderHistoryDaoDynamoDb类/239
第8章外部API模式/244
8.1外部API的设计难题/245
8.1.1FTGO移动客户端API的设计难题/246
8.1.2其他类型客户端API的设计难题/248
8.2APIGateway模式/250
8.2.1什么是APIGateway模式/250
8.2.2APIGateway模式的好处和弊端/256
8.2.3以Netflix为例的APIGateway/257
8.2.4APIGateway的设计难题/258
8.3实现一个APIGateway/260
8.3.1使用现成的APIGateway产品或服务/261
8.3.2开发自己的APIGateway/262
8.3.3使用GraphQL实现APIGateway/269
第9章微服务架构中的测试策略(上)/282
9.1微服务架构中的测试策略概述/284
9.1.1什么是测试/284
9.1.2微服务架构中的测试挑战/289
9.1.3部署流水线/295
9.2为服务编写单元测试/296
9.2.1为实体编写单元测试/298
9.2.2为值对象编写单元测试/299
9.2.3为Saga编写单元测试/300
9.2.4为领域服务编写单元测试/302
9.2.5为控制器编写单元测试/303
9.2.6为事件和消息处理程序编写单元测试/305
第10章微服务架构中的测试策略(下)/308
10.1编写集成测试/308
10.1.1针对持久化层的集成测试/311
10.1.2针对基于REST的请求/响应式交互的集成测试/312
10.1.3针对发布/订阅式交互的集成测试/316
10.1.4针对异步请求/响应式交互的集成契约测试/320
10.2编写组件测试/324
10.2.1定义验收测试/325
10.2.2使用Gherkin编写验收测试/326
10.2.3设计组件测试/328
10.2.4为FTGO的OrderService编写组件测试/330
10.3端到端测试/334
10.3.1设计端到端测试/335
10.3.2编写端到端测试/335
10.3.3运行端到端测试/336
第11章开发面向生产环境的微服务应用/338
11.1开发安全的服务/339
11.1.1传统单体应用程序的安全性/340
11.1.2在微服务架构中实现安全性/343
11.2设计可配置的服务/349
11.2.1使用基于推送的外部化配置/350
11.2.2使用基于拉取的外部化配置/352
11.3设计可观测的服务/353
11.3.1使用健康检查API模式/355
11.3.2使用日志聚合模式/357
11.3.3使用分布式追踪模式/358
11.3.4使用应用程序指标模式/361
11.3.5使用异常追踪模式/364
11.3.6使用审计日志模式/365
11.4使用微服务基底模式开发服务/367
11.4.1使用微服务基底/368
11.4.2从微服务基底到服务网格/368
第12章部署微服务应用/371
12.1部署模式:编程语言特定的发布包格式/374
12.1.1使用编程语言特定的发布包格式进行部署的好处/376
12.1.2使用编程语言特定的发布包格式进行部署的弊端/377
12.2部署模式:将服务部署为虚拟机/378
12.2.1将服务部署为虚拟机的好处/380
12.2.2将服务部署为虚拟机的弊端/380
12.3部署模式:将服务部署为容器/381
12.3.1使用Docker部署服务/383
12.3.2将服务部署为容器的好处/385
12.3.3将服务部署为容器的弊端/386
12.4使用Kubernetes部署FTGO应用程序/386
12.4.1什么是Kubernetes/386
12.4.2在Kubernetes上部署RestaurantService/389
12.4.3部署APIGateway/392
12.4.4零停机部署/393
12.4.5使用服务网格分隔部署与发布流程/394
12.5部署模式:Serverless部署/402
12.5.1使用AWSLambda进行Serverless部署/403
12.5.2开发Lambda函数/404
12.5.3调用Lambda函数/404
12.5.4使用Lambda函数的好处/405
12.5.5使用Lambda函数的弊端/406
12.6使用AWSLambda和AWSGateway部署RESTful服务/406
12.6.1AWSLambda版本的RestaurantService/407
12.6.2把服务打包为ZIP文件/411
12.6.3使用Serverless框架部署Lambda函数/412
第13章微服务架构的重构策略/415
13.1重构到微服务需要考虑的问题/416
13.1.1为什么要重构单体应用/416
13.1.2绞杀单体应用/417
13.2将单体应用重构为微服务架构的若干策略/420
13.2.1将新功能实现为服务/420
13.2.2隔离表现层与后端/422
13.2.3提取业务能力到服务中/423
13.3设计服务与单体的协作方式/429
13.3.1设计集成胶水/430
13.3.2在服务和单体之间维持数据一致性/434
13.3.3处理身份验证和访问授权/438
13.4将新功能实现为服务:处理错误配送订单/440
13.4.1DelayedDeliveryService的设计/441
13.4.2为DelayedDeliveryService设计集成胶水/442
13.5从单体中提取送餐管理功能/444
13.5.1现有的送餐管理功能/444
13.5.2DeliveryService概览/446
13.5.3设计DeliveryService的领域模型/447
13.5.4DeliveryService集成胶水的设计/450
13.5.5修改FTGO单体使其能够与DeliveryService交互/451
......
第1章网关之道
1.1认识API网关
1.1.1API网关是什么
1.1.2API网关涵盖的基本功能
1.1.3API网关架构示例
1.2一个API的生命周期
1.2.1什么是API
1.2.2生命周期
1.2.3生命周期的过程
1.3API网关的基石—泛化调用
1.4如何发布API到网关系统
1.5管道技术
1.5.1管道实现
1.5.2如何获取管道
1.5.3管道信息传递
1.5.4管道的优点
1.5.5责任链模式
1.6一个传统网关系统有几种“死”法
1.6.1关注CPU
1.6.2关注磁盘
1.6.3关注网络
1.7Servlet3异步原理与实践
1.7.1什么是Servlet
1.7.2什么是Servlet规范
1.7.3同步、异步、阻塞、非阻塞
1.7.4Servlet3的异步流程
1.7.5Servlet3的异步使用步骤
1.7.6Servlet3的异步使用示例
1.7.7TomcatNIOConnector、Servlet3.0Async和SpringMVCAsync的关系
1.7.8Servlet3非阻塞I/O
1.8全异步网关
1.9脱库与多级缓存
1.9.1脱库
1.9.2多级缓存
1.10热更新
1.11网关系统的七种武器
1.12本章小结
第2章开放之道
2.1认识OAuth2.0
2.1.1什么是OAuth2.0
2.1.2角色
2.1.3OAuth2.0协议流程
2.1.4采用OAuth2.0协议的开放平台
2.1.5京东宙斯开放(授权码方式场景)
2.2开放平台
2.2.1一名开发者的基本需求
2.2.2完整性
2.2.3稳定性
2.2.4安全性
2.2.5整体技术架构
2.2.6意义
2.3如何设计一套SPI应用架构
2.3.1API和SPI区别
2.3.2术语约定
2.3.3业务场景
2.3.4架构实现
2.3.5测试
2.3.6SPI是一种思想
2.4讲一讲越权
2.4.1什么是越权访问
2.4.2越权访问的种类
2.4.3发生越权访问的根本原因
2.4.4如何避免与解决
2.4.5开放平台环境下的越权访问
2.5从Facebook数据泄漏谈开放安全
2.5.1OAuth2.0授权
2.5.2数据加/解密
2.5.3IP地址白名单
2.5.4平台内环境
2.6API治理
2.6.1性能
2.6.2可用率
2.6.3文档可读性
2.7API经济
2.7.1API盈利模式
2.7.2API市场
2.7.3API经济价值链
2.8沙箱环境
2.8.1协同
2.8.2维护
2.9本章小结
第3章分布式之道
3.1认识分布式
3.2分布式事务
3.2.1什么是分布式事务
3.2.2CAP和BASE理论
3.3分布式锁
3.3.1为什么需要分布式锁
3.3.2分布式锁的实现方式
3.4分布式限流
3.4.1计数器
3.4.2限速器
3.4.3限流的维度
3.4.4流量包
3.4.5再来谈令牌桶
3.5衡量性能的指标QPS、TPS等
3.5.1什么是QPS
3.5.2什么是TPS
3.5.3什么是RT
3.5.4什么是并发数
3.6本章小结
第4章MQ之道
4.1认识JMS
4.1.1JMS的组成
4.1.2JMS编程模型
4.1.3JMS消息结构
4.1.4JMS消息模型
4.2带着思考理解MQ下的基本概念
4.2.1生产者—消费者(Producer-Consumer)
4.2.2空间解耦
4.2.3时间解耦
4.2.4观察者模式与发布/订阅
4.3消费幂等
4.3.1什么是幂等操作
4.3.2是什么引起我们关注消费幂等
4.3.3如何处理消费幂等
4.4详述MQ各种功能场景
4.4.1解耦
4.4.2削峰填谷
4.4.3最终一致性
4.4.4广播消费
4.4.5使用集群消费模拟广播
4.4.6重试之坑
4.5数据异构的武器—MQ canal
4.5.1定义
4.5.2常见应用场景
4.5.3数据异构方向
4.5.4数据异构的常用方法
4.5.5binlog和MQ方式
4.6关于MQ再问自己几个问题
4.6.1我想自己控制开始消费如何做
4.6.2为什么需要消息过滤
4.6.3过期消息是怎么处理的
4.6.4消息重试的注意点
4.6.5为什么需要事务消息
4.6.6消息为什么没有了顺序
4.7本章小结
第5章消息推送之道
5.1认识消息推送
5.2构建长连接推送系统之HTTP实践
5.2.1Web网络结构及配置
5.2.2基本配置
5.2.3Transfer-Encoding:chunked
5.2.4HTTP长连接系统组成结构
5.2.5Session管理
5.2.6心跳
5.2.7消息接收的概念
5.2.8消息推送的概念
5.2.9消息追踪
5.2.10HTTP长连接系统时序调用
5.2.11创建会话(连接)
5.2.12心跳逻辑
5.2.13消息接收实例
5.2.14消息推送实例
5.2.15半推半拉
5.2.16系统优化
5.2.17测试
5.3构建消息推送系统之Netty实践
5.3.1启动
5.3.2创建会话
5.3.3心跳
5.3.4发送消息
5.3.5注销会话
5.3.6黏包
5.4一台服务器可以“跑”多少个连接
5.5一台服务器可以“跑”多少个线程
5.6弱网络环境
5.7发送APNs
5.7.1认识APNs
5.7.2HTTP/2
5.7.3Pushy的使用
5.8本章小结
第6章RPC之道
6.1认识RPC
6.2RPC是如何实现通信的
6.2.1动态代理
6.2.2反射
6.2.3序列化
6.2.4网络编程
6.3一次RPC调用时间都去哪儿了
6.4异步RPC
6.4.1异步调用
6.4.2异步监听
6.4.3callback调用
6.5本章小结
第7章I/O之道
7.1认识I/O
7.2解读I/O多路复用技术
7.2.1I/O多路复用概述
7.2.2用户进程和内核
7.2.3select和recvfrom
7.2.4阻塞、非阻塞
7.2.5适用场景
7.3解读Tomcat中的NIO模型
7.3.1Tomcat对I/O模型的支持
7.3.2Tomcat中NIO的配置与使用
7.3.3NioEndpoint组件关系图解读
7.3.4NioEndpoint执行序列图
7.3.5关于性能
7.4本章小结
第8章微服务之道
8.1认识微服务
8.2微服务后如何做一次系统梳理
8.2.1系统分类与演进
8.2.2梳理目的要搞清楚
8.2.3如何做
8.2.4核心功能的核心流程梳理
8.3朝着微服务的方向去做一次数据库拆分
8.3.1现状
8.3.2方法
8.3.3拆库的步骤(MySQL)
8.4本章小结
第9章容错之道
9.1认识容错
9.2降级与限流
9.3线程池隔离
9.3.1为什么要做线程池隔离
9.3.2实现一个线程池隔离
9.3.3线程池隔离的优点
9.3.4线程池隔离的缺点
9.4快速失败
9.5熔断
9.5.1熔断器介绍
9.5.2熔断使用注意
9.6Hystrix的使用
9.6.1认识Hystrix
9.6.2线程池隔离
9.6.3信号量隔离
9.6.4熔断
9.6.5回退降级
9.7大促备战都“备”什么
9.7.1分离技术
9.7.2缓存技术
9.7.3SQL优化
9.7.4快速失败
9.7.5降级限流
9.7.6性能压测
9.8本章小结
第10章程序之外
10.1程序与健身
10.2程序员的硬件装备
10.3程序员应该看的四本技术书籍
10.4程序员应该熟悉的常用定律法则
10.5知识、数据、工具
参考文献
《微服务架构师》套装是2019年由机械工业出版社出版,作者[美]克里斯·理查森(ChrisRichardson)。
得书感谢您对《《微服务架构师》套装》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。