编辑推荐

微服务设计模式和最佳实践》将介绍不同阶段的微服务中应用程序开发的各种设计模式及其佳实践。微服务模式和佳实践始于对微服务关键概念的理解,并展示如何在设计微服务时做出正确的选择。《微服务设计模式和最佳实践》将讨论内部微服务应用程序的各种方法,如缓存策略、异步机制、CQRS和事件源等。随着过程的不断推进,读者将深入了解微服务的相关设计模式。

内容简介

微服务设计模式和最佳实践》详细阐述了与微服务相关的基本解决方案,主要包括微服务概念、微服务工具、内部模式、微服务生态环境、共享数据微服务设计模式、聚合器微服务设计模式、代理微服务设计模式、链式微服务设计模式、分支微服务设计模式、异步消息微服务、微服务间的协同工作、微服务测试以及安全监测和部署方案等内容。此外,《微服务设计模式和最佳实践》还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。

微服务设计模式和最佳实践》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

目录

目录

第1章微服务概念1

1.1理解应用程序2

1.1.1领域驱动设计2

1.1.2单一职责原则4

1.1.3显式发布的接口5

1.2独立部署、更新、扩展以及替换7

1.2.1独立部署7

1.2.2更新7

1.2.3可扩展性8

1.3轻量级通信12

1.3.1同步13

1.3.2异步13

1.4异质/多语言14

1.5通信的文档化14

1.6Web应用程序端点15

1.7移动应用程序端点15

1.8缓存客户端16

1.9调节客户端17

1.10确定贫血域17

1.11确定fat域18

1.12针对业务确定微服务域18

1.13从域到实体19

1.14本章小结20

第2章微服务工具21

2.1编程语言21

2.1.1熟练程度22

2.1.2性能22

2.1.3实践开发23

2.1.4生态圈23

2.1.5扩展性的开销24

2.1.6选取编程语言24

2.2微服务框架27

2.2.1Python语言27

2.2.2Go语言29

2.3二进制通信—服务间的直接通信31

2.3.1理解通信方式31

2.3.2直接通信间的警示信息35

2.4消息代理—服务间的异步通信37

2.4.1ActiveMQ38

2.4.2RabbitMQ39

2.4.3Kafka40

2.5缓存工具40

2.5.1Memcached42

2.5.2Redis42

2.6故障警示工具44

2.6.1性能44

2.6.2构建45

2.6.3组件46

2.6.4实现鸿沟47

2.7数据库47

2.8本地性能度量48

2.8.1ApacheBenchmark49

2.8.2WRK50

2.8.3Locust51

2.9本章小结53

第3章内部模式55

3.1开发结构55

3.1.1数据库55

3.1.2编程语言和工具56

3.1.3项目结构56

3.2缓存策略71

3.2.1缓存机制的应用72

3.2.2缓存优先78

3.2.3队列任务79

3.2.4异步机制和worker81

3.3CQRS—查询策略87

3.3.1CQRS的概念87

3.3.2理解CQRS88

3.3.3CQRS的优点和缺陷90

3.4事件源—数据完整性91

3.5本章小结92

第4章微服务生态环境93

4.1容器中的分离机制93

4.1.1分层服务架构95

4.1.2分离UsersService96

4.2存储分布103

4.2.1折旧数据103

4.2.2区域化数据103

4.3隔离—使用生态系统防止故障的出现104

4.3.1冗余设计104

4.3.2临界分区109

4.3.3隔离设计110

4.3.4快速故障111

4.4断路器112

4.5本章小结113

第5章共享数据微服务设计模式115

5.1理解模式115

5.2将单体应用程序划分为微服务116

5.2.1定义优先级117

5.2.2设置期限117

5.2.3定义应用程序域117

5.2.4试验操作117

5.2.5制定标准118

5.2.6构建原型118

5.2.7发送产品118

5.2.8开发新的微服务118

5.3数据编排130

5.4响应整合132

5.5微服务通信132

5.6存储共享反模式133

5.7最佳实践133

5.8测试机制133

5.9共享数据模式的利弊135

5.10本章小结136

第6章聚合器微服务设计模式137

6.1理解聚合器设计模式137

6.2使用CQRS和事件源139

6.2.1分离数据库139

6.2.2重构微服务140

6.3微服务通信153

6.3.1创建编排器154

6.3.2使用消息代理159

6.4模式扩展163

6.5瓶颈反模式164

6.6最佳实践166

6.7测试167

6.7.1功能测试167

6.7.2集成测试168

6.8聚合器设计模式的优缺点170

6.8.1聚合器设计模式的优点170

6.8.2聚合器设计模式的缺点170

6.9本章小结170

第7章代理微服务设计模式171

7.1代理方案171

7.1.1哑代理172

7.1.2智能代理172

7.1.3理解当前代理173

7.2编排器的代理策略175

7.3微服务通信176

7.4模式扩展性176

7.5最佳实践177

7.5.1纯粹的模式177

7.5.2瓶颈问题178

7.5.3代理制的缓存机制178

7.5.4简单的响应178

7.6代理设计模式的优缺点179

7.7本章小结179

第8章链式微服务设计模式181

8.1理解模式181

8.2数据编排和响应整合184

8.3微服务通信185

8.4模式扩展性185

8.5“大泥球”反模式186

8.6最佳实践方案188

8.6.1纯微服务188

8.6.2请求一致性数据188

8.6.3深入理解链式设计模式189

8.6.4关注通信层189

8.7链式设计模式的优缺点189

8.8本章小结190

第9章分支微服务设计模式191

9.1理解模式191

9.2数据编排和响应整合194

9.3微服务通信195

9.4模式扩展197

9.5最佳实践方案198

9.5.1域定义198

9.5.2遵守规则198

9.5.3关注物理组件198

9.5.4简化行为199

9.6分支设计模式的优缺点199

9.7本章小结199

第10章异步消息微服务201

10.1理解当前模式201

10.2域定义—RecommendationService203

10.3域定义—RecommendationService204

10.4微服务编码204

10.5微服务通信211

10.5.1使用消息代理和队列211

10.5.2准备pub/sub结构212

10.6模式的可扩展性214

10.7进程序列反模式214

10.8最佳实践方案215

10.8.1应用程序定义215

10.8.2不要尝试创建响应216

10.8.3保持简单性216

10.9异步消息传递设计模式的优缺点216

10.10本章小结217

第11章微服务间的协同工作219

11.1理解当前应用程序状态219

11.1.1公共饰面层220

11.1.2内部层222

11.1.3理解通用工具223

11.2通信层和服务间的委托224

11.2.1理解服务间的数据合约225

11.2.2使用二进制通信228

11.3模式分布235

11.4故障策略236

11.5API集成237

11.6本章小结239

第12章微服务测试241

12.1单元测试241

12.2针对集成测试配置容器249

12.3集成测试251

12.4端到端测试253

12.5发布管线259

12.6签名测试259

12.7Monkey测试260

12.8ChaosMonkey260

12.9本章小结262

第13章安全监测和部署方案263

13.1监测微服务263

13.1.1监测单一服务264

13.1.2监测多项服务266

13.1.3查看日志267

13.1.4应用程序中的错误268

13.1.5度量方法271

13.2安全问题272

13.2.1理解JWT272

13.2.2单点登录275

13.2.3数据安全276

13.2.4预防恶意攻击—识别攻击行为277

13.2.5拦截器277

13.2.6容器278

13.2.7API网关279

13.3部署279

13.3.1持续集成和持续交付/持续部署280

13.3.2蓝/绿部署模式和Canary发布281

13.3.3每台主机包含多个服务实例282

13.3.4每台主机的服务实例283

13.4本章小结285

前言/序言

  前言
  微服务是一种软件体系结构策略,多年来一直在使用,其目标是提高服务的可伸缩性。由于当今的业务呈现快速、动态增长之势,单体应用程序与面向服务相比已不占优势。通过设计这种新的体系结构模型,面向对象的原则、标准、解耦和职责已经构成了超越自动化测试的基础内容。
  微服务可使读者能够创建可维护、可伸缩的应用程序。在阅读《微服务设计模式和最佳实践》后,读者将能够创建可互操作的微服务,同时兼具可测试性和高性能的特征。
  适用读者
  《微服务设计模式和最佳实践》面向于具有Web开发经验,但想要改进其开发技术以创建可维护和可伸缩应用程序的读者,读者不需要具备微服务方面的经验。《微服务设计模式和最佳实践》中演示的概念和标准,使读者能够开发易于理解和支持大量访问的应用程序。
  《微服务设计模式和最佳实践》内容
  第1章整体介绍微服务的概念,以帮助读者理解体系结构背后的相关理念,例如客户优先方案以及域定义。
  第2章讨论微服务应用中的常见工具。一旦了解了客户以及如何定义应用程序域,即可制定技术决策方案,包括所使用的语言、框架,以及如何验证微服务框架的功能。
  第3章将探讨内部微服务的应用模式,如缓存策略、worker、队列以及异步机制。
  第4章考察如何从单体应用程序中创建一组具有弹性和可伸缩的微服务。本章还将重点讨论如何在各自的容器中正确地分离微服务,并解释存储层的分布。
  第5章涉及一些较为特殊的用例。通常,微服务在业务、测试、通信、连接和存储方面是完全独立的;而共享模式则是迁移概念的一种特殊模式(从单体到微服务);总的来说,这是一种过渡模式。
  第6章主要讨论了一些简单而常见的模式,主要包括对微服务的数据编排。
  第7章阐述了代理模式,它与聚合器模式非常相似。对于该结构,当不需要连接数据并将其发送给终端用户时,可以对其加以使用。本章的目标是了解代理模式和聚合器模式之间的差异,以及针对微服务的正确的请求重定向操作。
  第8章将学习链式模式。其中,发送至客户端的信息将整合至链中。本章的主要目标是解释信息整合问题。
  第9章介绍分支模式,该模式可视作聚合器模式和链式模式的混合体,通常用于以下场合:在后端中,微服务未包含所有数据以完成某项任务;或者应直接通知另一个微服务。本章解释了该模式的应用时机,以及对业务的作用方式。
  第10章解释了一种较为复杂的模式:在微服务级别使用异步机制。本章将讨论如何利用消息工具实现微服务的异步通信方式。
  第11章对相关模式进行总结。在介绍了所有的微服务模式后,将考察如何将微服务进行整合,以使其可有效地协同工作。
  第12章将讨论最为合理的测试机制及其简化方式。
  第13章介绍了生产过程中维护微服务的必要条件以及最佳实践。
  背景知识
  如果读者了解一些Go语言(golang)中的OOP和包结构,那么,阅读《微服务设计模式和最佳实践》将变得更加轻松、有趣。
  资源下载
  读者可访问http://www.packtpub.com并通过个人账户下载示例代码文件。另外,http://www.packtpub.com/support,注册成功后,我们将以电子邮件的方式将相关文件发与读者。
  读者可根据下列步骤下载代码文件。
  (1)登录www.packtpub.com并注册我们的网站。
  (2)选择SUPPORT选项卡。
  (3)单击CodeDownloads&Errata。
  (4)在Search文本框中输入书名并执行后续命令。
  当文件下载完毕后,确保使用下列最新版本软件解压文件夹。
  Windows系统下的WinRAR/7-Zip。
  Mac系统下的Zipeg/iZip/UnRarX。
  Linux系统下的7-Zip/PeaZip。
  另外,读者还可访问GitHub获取《微服务设计模式和最佳实践》的代码包,对应网址为https://github.com/PacktPublishing/Microservice-Patterns-and-Best-Practices。此外,读者还可访问https://github.com/PacktPublishing/以了解丰富的代码和视频资源。
  读者可访问https://www.packtpub.com/sites/default/files/downloads/MicroservicePatternsandBestPractices_ColorImages.pdf下载《微服务设计模式和最佳实践》的彩色图像,以方便读者对比某些输出结果。
  《微服务设计模式和最佳实践》约定
  代码块则通过下列方式设置:
  classTestDevelopmentConfig(TestCase):
  defcreate_app(self):
  app.config.from_object('config.DevelopmentConfig')
  returnapp
  deftest_app_is_development(self):
  self.assertTrue(app.config['DEBUG']isTrue)
  代码中的重点内容则采用黑体表示:
  @patch('views.rpc_command')
  deftest_sucess(self,rpc_command_mock):
  """TesttoinsertaNews."""
  命令行输入或输出如下所示:
  $docker-compose-fdocker-compose.ymlup--build–d
  图标表示较为重要的说明事项。
  图标则表示提示信息和操作技巧。
  
  读者反馈和客户支持
  欢迎读者对《微服务设计模式和最佳实践》的建议或意见予以反馈。
  对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。若读者对《微服务设计模式和最佳实践》有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。
  勘误表
  尽管我们在最大程度上做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub.com/submit-errata,选取对应书籍,单击ErrataSubmissionForm超链接,并输入相关问题的详细内容。
  版权须知
  一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现《微服务设计模式和最佳实践》任意形式的副本,请告知网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件。
  若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作。
  问题解答
  若读者对《微服务设计模式和最佳实践》有任何疑问,均可发送邮件,我们将竭诚为您服务。

其他推荐