新书推荐 |《微服务架构设计模式》-程序员宅基地

技术标签: python  java  单元测试  编程语言  数据库  

新书推荐

《微服务架构设计模式》

点击上图了解及购买

微服务架构的先驱、Java 开发者社区的意见领袖 Chris Richardson亲笔撰写,微服务实用落地指南。

涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。

易宝支付CTO陈斌、PolarisTech 联合创始人蔡书、才云科技CEO张鑫等多位专家鼎力推荐。

编辑推荐

适读人群 :本书的重点是架构和开发,适合负责开发和交付软件的任何人(例如开发人员、架构师、 CTO等)阅读。

本书由微服务架构的先驱、Java开发者社区的意见领袖 Chris Richardson亲笔撰写,旨在帮助架构师和程序员学会使用微服务架构成功开发应用程序。书中描述了如何解决我们将面临的众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构,涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。本书并不是鼓吹微服务架构的宣言,作者既介绍了微服务的原理、原则,又详细讲解了实际落地中的架构设计模式,将使你理解微服务架构、它的好处和弊端,以及应该何时使用微服务架构。本书将帮助你建立微服务的全局视野,并学会在纷繁复杂的情况下做出正确的架构选择和取舍。

内容简介

成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。在这本独特的书籍中,微服务架构的先驱、Java 开发者社区的意见领袖 Chris Richardson 收集、分类并解释了 44 个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。

本书将教会你如何开发和部署生产级别的微服务架构应用。这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris 还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。

 本书包含:

  •  如何(以及为什么)使用微服务架构

  •  服务拆分的策略

  •  事务管理和查询相关的模式

  •  高效的测试策略

  •  包括容器和 Serverless 在内的部署模式

本书专为熟悉标准企业应用程序架构的开发人员编写,使用 Java 编写所有示例代码。

作译者简介

克里斯•理查森(Chris Richardson) 

世界著名的软件大师,《POJOS in Action》等技术名著的作者,也是著名开源项目 Cloud Foundry 和 Eventuate 的创始人。他的研究领域包括微服务架构设计、分布式数据管理、事件驱动的应用架构、领域驱动设计、持续交付、Spring 框架、Scala、NoSQL 数据库等。

喻勇

在技术圈驰骋多年,曾担任过微软技术布道师,VMware Cloud Foundry 生态建设负责人,并有幸引领了国内容器技术的创业浪潮。目前定居加拿大,关注微服务架构、云原生应用等领域。

Chris 与喻勇曾在 VMware 全球开发者关系团队共事多年,现在他们合作为国内企业客户提供微服务相关的咨询和培训服务,他们的中文网站是:www.chrisrichardson.cn 

目录

写给中文版读者的话

译者序

中文版序一

中文版序二

前言

引言

第1章 逃离单体地狱   / 1

1.1 迈向单体地狱的漫长旅程   / 2

1.1.1 FTGO应用程序的架构   / 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.4 FTGO的微服务架构   / 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.3 API的演化   / 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.2 Saga的协调模式   / 113

4.2.1 协同式Saga   / 113

4.2.2 编排式Saga   / 117

4.3 解决隔离问题   / 121

4.3.1 缺乏隔离导致的问题   / 122

4.3.2 Saga模式下实现隔离的对策   / 123

4.4 Order Service和Create Order Saga的设计   / 127

4.4.1 OrderService类   / 128

4.4.2 Create Order Saga的实现   / 129

4.4.3 OrderCommandHandlers类   / 136

4.4.4 OrderServiceConfiguration类   / 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.4 Kitchen Service的业务逻辑   / 162

5.5 Order Service的业务逻辑   / 167

5.5.1 Order聚合   / 169

5.5.2  OrderService类   / 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.1 Eventuate Local事件存储库的工作原理   / 195

6.2.2 Eventuate的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.1 findOrder()查询操作   / 213

7.1.2 什么是API组合模式   / 214

7.1.3 使用API组合模式实现findOrder()查询操作   / 215

7.1.4 API组合模式的设计缺陷   / 216

7.1.5 API组合模式的好处和弊端   / 219

7.2 使用CQRS模式   / 220

7.2.1 为什么要使用CQRS   / 220

7.2.2 什么是CQRS   / 223

7.2.3 CQRS的好处   / 226

7.2.4 CQRS的弊端   / 227

7.3 设计CQRS视图   / 228

7.3.1 选择视图存储库   / 229

7.3.2 设计数据访问模块   / 230

7.3.3 添加和更新CQRS视图   / 232

7.4 实现基于AWS DynamoDB的CQRS视图   / 233

7.4.1 OrderHistoryEventHandlers模块   / 234

7.4.2 DynamoDB中的数据建模和查询设计   / 235

7.4.3 OrderHistoryDaoDynamoDb类   / 239

第8章 外部API模式   / 244

8.1 外部API的设计难题   / 245

8.1.1 FTGO移动客户端API的设计难题   / 246

8.1.2 其他类型客户端API的设计难题   / 248

8.2 API Gateway模式   / 250

8.2.1 什么是API Gateway模式   / 250

8.2.2 API Gateway模式的好处和弊端   / 256

8.2.3 以Netflix为例的API Gateway   / 257

8.2.4 API Gateway的设计难题   / 258

8.3 实现一个API Gateway   / 260

8.3.1 使用现成的API Gateway产品或服务   / 261

8.3.2 开发自己的API Gateway   / 262

8.3.3 使用GraphQL实现API Gateway   / 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的Order Service编写组件测试   / 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上部署Restaurant Service   / 389

12.4.3 部署API Gateway   / 392

12.4.4 零停机部署   / 393

12.4.5 使用服务网格分隔部署与发布流程   / 394

12.5 部署模式:Serverless部署   / 402

12.5.1 使用AWS Lambda进行Serverless部署   / 403

12.5.2 开发Lambda函数   / 404

12.5.3 调用Lambda函数   / 404

12.5.4 使用Lambda函数的好处   / 405

12.5.5 使用Lambda函数的弊端   / 406

12.6 使用AWS Lambda和AWS Gateway部署RESTful服务   / 406

12.6.1 AWS Lambda版本的Restaurant Service   / 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.1 Delayed Delivery Service的设计   / 441

13.4.2 为Delayed Delivery Service设计集成胶水   / 442

13.5 从单体中提取送餐管理功能   / 444

13.5.1 现有的送餐管理功能   / 444

13.5.2 Delivery Service概览   / 446

13.5.3 设计Delivery Service的领域模型   / 447

13.5.4 Delivery Service集成胶水的设计   / 450

13.5.5 修改FTGO单体使其能够与Delivery Service交互   / 451

你与世界

只差一个

公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hzbooks/article/details/108215619

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签