微服务设计模式和最佳实践

本书特色

[

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

本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

]

前言

[


  微服务是一种软件体系结构策略,多年来一直在使用,其目标是提高服务的可伸缩性。由于当今的业务呈现快速、动态增长之势,单体应用程序与面向服务相比已不占优势。通过设计这种新的体系结构模型,面向对象的原则、标准、解耦和职责已经构成了超越自动化测试的基础内容。

  微服务可使读者能够创建可维护、可伸缩的应用程序。在阅读本书后,读者将能够创建可互操作的微服务,同时兼具可测试性和高性能的特征。

  适用读者

  本书面向于具有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)单击Code Downloads & 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/MicroservicePatternsand BestPractices_ColorImages.pdf下载本书的彩色图像,以方便读者对比某些输出结果。

  本书约定

  代码块则通过下列方式设置:

  class TestDevelopmentConfig(TestCase):

   def create_app(self):

   app.config.from_object(‘config.DevelopmentConfig’)

   return app

   def test_app_is_development(self):

   self.assertTrue(app.config[‘DEBUG’] is True)

  代码中的重点内容则采用黑体表示:

  @patch(‘views.rpc_command’)

  def test_sucess(self, rpc_command_mock):

   “””Test to insert a News.”””

  命令行输入或输出如下所示:

  $ docker-compose -f docker-compose.yml up –build –d

   图标表示较为重要的说明事项。

   图标则表示提示信息和操作技巧。

  

  读者反馈和客户支持

  欢迎读者对本书的建议或意见予以反馈。

  对此,读者可向feedback@packtpub.com发送邮件,并以书名作为邮件标题。若读者对本书有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。

  勘误表

  尽管我们在*大程度上做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub.com/ submit-errata,选取对应书籍,单击Errata Submission Form超链接,并输入相关问题的详细内容。

  版权须知

  一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现本书任意形式的副本,请告知网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件。

  若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作。

  问题解答

  若读者对本书有任何疑问,均可发送邮件,我们将竭诚为您服务。

]

内容简介

[

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

本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。

]

目录

目 录第1章 微服务概念 11.1 理解应用程序 21.1.1 领域驱动设计 21.1.2 单一职责原则 41.1.3 显式发布的接口 51.2 独立部署、更新、扩展以及替换 71.2.1 独立部署 71.2.2 更新 71.2.3 可扩展性 81.3 轻量级通信 121.3.1 同步 131.3.2 异步 131.4 异质/多语言 141.5 通信的文档化 141.6 Web应用程序端点 151.7 移动应用程序端点 151.8 缓存客户端 161.9 调节客户端 171.10 确定贫血域 171.11 确定fat域 181.12 针对业务确定微服务域 181.13 从域到实体 191.14 本章小结 20第2章 微服务工具 212.1 编程语言 212.1.1 熟练程度 222.1.2 性能 222.1.3 实践开发 232.1.4 生态圈 232.1.5 扩展性的开销 242.1.6 选取编程语言 242.2 微服务框架 272.2.1 Python语言 272.2.2 Go语言 292.3 二进制通信—服务间的直接通信 312.3.1 理解通信方式 312.3.2 直接通信间的警示信息 352.4 消息代理—服务间的异步通信 372.4.1 ActiveMQ 382.4.2 RabbitMQ 392.4.3 Kafka 402.5 缓存工具 402.5.1 Memcached 422.5.2 Redis 422.6 故障警示工具 442.6.1 性能 442.6.2 构建 452.6.3 组件 462.6.4 实现鸿沟 472.7 数据库 472.8 本地性能度量 482.8.1 Apache Benchmark 492.8.2 WRK 502.8.3 Locust 512.9 本章小结 53第3章 内部模式 553.1 开发结构 553.1.1 数据库 553.1.2 编程语言和工具 563.1.3 项目结构 563.2 缓存策略 713.2.1 缓存机制的应用 723.2.2 缓存优先 783.2.3 队列任务 793.2.4 异步机制和worker 813.3 CQRS—查询策略 873.3.1 CQRS的概念 873.3.2 理解CQRS 883.3.3 CQRS的优点和缺陷 903.4 事件源—数据完整性 913.5 本章小结 92第4章 微服务生态环境 934.1 容器中的分离机制 934.1.1 分层服务架构 954.1.2 分离UsersService 964.2 存储分布 1034.2.1 折旧数据 1034.2.2 区域化数据 1034.3 隔离—使用生态系统防止故障的出现 1044.3.1 冗余设计 1044.3.2 临界分区 1094.3.3 隔离设计 1104.3.4 快速故障 1114.4 断路器 1124.5 本章小结 113第5章 共享数据微服务设计模式 1155.1 理解模式 1155.2 将单体应用程序划分为微服务 1165.2.1 定义优先级 1175.2.2 设置期限 1175.2.3 定义应用程序域 1175.2.4 试验操作 1175.2.5 制定标准 1185.2.6 构建原型 1185.2.7 发送产品 1185.2.8 开发新的微服务 1185.3 数据编排 1305.4 响应整合 1325.5 微服务通信 1325.6 存储共享反模式 1335.7 *佳实践 1335.8 测试机制 1335.9 共享数据模式的利弊 1355.10 本章小结 136第6章 聚合器微服务设计模式 1376.1 理解聚合器设计模式 1376.2 使用CQRS和事件源 1396.2.1 分离数据库 1396.2.2 重构微服务 1406.3 微服务通信 1536.3.1 创建编排器 1546.3.2 使用消息代理 1596.4 模式扩展 1636.5 瓶颈反模式 1646.6 *佳实践 1666.7 测试 1676.7.1 功能测试 1676.7.2 集成测试 1686.8 聚合器设计模式的优缺点 1706.8.1 聚合器设计模式的优点 1706.8.2 聚合器设计模式的缺点 1706.9 本章小结 170第7章 代理微服务设计模式 1717.1 代理方案 1717.1.1 哑代理 1727.1.2 智能代理 1727.1.3 理解当前代理 1737.2 编排器的代理策略 1757.3 微服务通信 1767.4 模式扩展性 1767.5 *佳实践 1777.5.1 纯粹的模式 1777.5.2 瓶颈问题 1787.5.3 代理制的缓存机制 1787.5.4 简单的响应 1787.6 代理设计模式的优缺点 1797.7 本章小结 179第8章 链式微服务设计模式 1818.1 理解模式 1818.2 数据编排和响应整合 1848.3 微服务通信 1858.4 模式扩展性 1858.5 “大泥球”反模式 1868.6 *佳实践方案 1888.6.1 纯微服务 1888.6.2 请求一致性数据 1888.6.3 深入理解链式设计模式 1898.6.4 关注通信层 1898.7 链式设计模式的优缺点 1898.8 本章小结 190第9章 分支微服务设计模式 1919.1 理解模式 1919.2 数据编排和响应整合 1949.3 微服务通信 1959.4 模式扩展 1979.5 *佳实践方案 1989.5.1 域定义 1989.5.2 遵守规则 1989.5.3 关注物理组件 1989.5.4 简化行为 1999.6 分支设计模式的优缺点 1999.7 本章小结 199第10章 异步消息微服务 20110.1 理解当前模式 20110.2 域定义—RecommendationService 20310.3 域定义—RecommendationService 20410.4 微服务编码 20410.5 微服务通信 21110.5.1 使用消息代理和队列 21110.5.2 准备pub/sub结构 21210.6 模式的可扩展性 21410.7 进程序列反模式 21410.8 *佳实践方案 21510.8.1 应用程序定义 21510.8.2 不要尝试创建响应 21610.8.3 保持简单性 21610.9 异步消息传递设计模式的优缺点 21610.10 本章小结 217第11章 微服务间的协同工作 21911.1 理解当前应用程序状态 21911.1.1 公共饰面层 22011.1.2 内部层 22211.1.3 理解通用工具 22311.2 通信层和服务间的委托 22411.2.1 理解服务间的数据合约 22511.2.2 使用二进制通信 22811.3 模式分布 23511.4 故障策略 23611.5 API集成 23711.6 本章小结 239第12章 微服务测试 24112.1 单元测试 24112.2 针对集成测试配置容器 24912.3 集成测试 25112.4 端到端测试 25312.5 发布管线 25912.6 签名测试 25912.7 Monkey测试 26012.8 Chaos Monkey 26012.9 本章小结 262第13章 安全监测和部署方案 26313.1 监测微服务 26313.1.1 监测单一服务 26413.1.2 监测多项服务 26613.1.3 查看日志 26713.1.4 应用程序中的错误 26813.1.5 度量方法 27113.2 安全问题 27213.2.1 理解JWT 27213.2.2 单点登录 27513.2.3 数据安全 27613.2.4 预防恶意攻击—识别攻击行为 27713.2.5 拦截器 27713.2.6 容器 27813.2.7 API网关 27913.3 部署 27913.3.1 持续集成和持续交付/持续部署 28013.3.2 蓝/绿部署模式和Canary发布 28113.3.3 每台主机包含多个服务实例 28213.3.4 每台主机的服务实例 28313.4 本章小结 285

封面

微服务设计模式和最佳实践

书名:微服务设计模式和最佳实践

作者:[美]维尼休斯·弗多萨·帕切科 著

页数:285

定价:¥99.0

出版社:清华大学出版社

出版日期:2018-09-01

ISBN:9787302520412

PDF电子书大小:147MB 高清扫描完整版

百度云下载:http://www.chendianrong.com/pdf

发表评论

邮箱地址不会被公开。 必填项已用*标注