新書推薦:
《
禅心与箭术:过松弛而有力的生活(乔布斯精神导师、世界禅者——铃木大拙荐)
》
售價:HK$
66.1
《
先进电磁屏蔽材料——基础、性能与应用
》
售價:HK$
221.8
《
可转债投资实战
》
售價:HK$
99.7
《
王氏之死(新版,史景迁成名作)
》
售價:HK$
54.9
《
敢为天下先:三年建成港科大
》
售價:HK$
77.3
《
长高食谱 让孩子长高个的饮食方案 0-15周岁儿童调理脾胃食谱书籍宝宝辅食书 让孩子爱吃饭 6-9-12岁儿童营养健康食谱书大全 助力孩子身体棒胃口好长得高
》
售價:HK$
47.0
《
身体自愈力:解决内在病因的身体智慧指南
》
售價:HK$
98.6
《
非言语沟通经典入门:影响人际交往的重要力量(第7版)
》
售價:HK$
123.1
|
編輯推薦: |
本书将介绍不同阶段的微服务中应用程序开发的各种设计模式及其*实践。微服务模式和*实践始于对微服务关键概念的理解,并展示如何在设计微服务时做出正确的选择。本书将讨论内部微服务应用程序的各种方法,如缓存策略、异步机制、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.6 Web应用程序端点 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.1 Python语言 27
2.2.2 Go语言 29
2.3 二进制通信服务间的直接通信 31
2.3.1 理解通信方式 31
2.3.2 直接通信间的警示信息 35
2.4 消息代理服务间的异步通信 37
2.4.1 ActiveMQ 38
2.4.2 RabbitMQ 39
2.4.3 Kafka 40
2.5 缓存工具 40
2.5.1 Memcached 42
2.5.2 Redis 42
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.1 Apache Benchmark 49
2.8.2 WRK 50
2.8.3 Locust 51
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 异步机制和worker 81
3.3 CQRS查询策略 87
3.3.1 CQRS的概念 87
3.3.2 理解CQRS 88
3.3.3 CQRS的优点和缺陷 90
3.4 事件源数据完整性 91
3.5 本章小结 92
第4章 微服务生态环境 93
4.1 容器中的分离机制 93
4.1.1 分层服务架构 95
4.1.2 分离UsersService 96
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 域定义RecommendationService 203
10.3 域定义RecommendationService 204
10.4 微服务编码 204
10.5 微服务通信 211
10.5.1 使用消息代理和队列 211
10.5.2 准备pubsub结构 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.5 API集成 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.7 Monkey测试 260
12.8 Chaos Monkey 260
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 理解JWT 272
13.2.2 单点登录 275
13.2.3 数据安全 276
13.2.4 预防恶意攻击识别攻击行为 277
13.2.5 拦截器 277
13.2.6 容器 278
13.2.7 API网关 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.comsupport,注册成功后,我们将以电子邮件的方式将相关文件发与读者。
读者可根据下列步骤下载代码文件。
(1)登录www.packtpub.com并注册我们的网站。
(2)选择SUPPORT选项卡。
(3)单击Code Downloads & Errata。
(4)在Search文本框中输入书名并执行后续命令。
当文件下载完毕后,确保使用下列最新版本软件解压文件夹。
? Windows系统下的WinRAR7-Zip。
? Mac系统下的ZipegiZipUnRarX。
? Linux系统下的7-ZipPeaZip。
另外,读者还可访问GitHub获取本书的代码包,对应网址为https:github.com PacktPublishingMicroservice-Patterns-and-Best-Practices。此外,读者还可访问https:github.com PacktPublishing以了解丰富的代码和视频资源。
读者可访问https:www.packtpub.comsitesdefaultfilesdownloadsMicroservicePatternsand BestPractices_ColorImages.pdf下载本书的彩色图像,以方便读者对比某些输出结果。
本书约定
代码块则通过下列方式设置:
class TestDevelopmentConfigTestCase:
def create_appself:
app.config.from_object''config.DevelopmentConfig''
return app
def test_app_is_developmentself:
self.assertTrueapp.config[''DEBUG''] is True
代码中的重点内容则采用黑体表示:
@patch''views.rpc_command''
def test_sucessself, 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出版社对此类问题异常重视。若读者在互联网上发现本书任意形式的副本,请告知网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件至copyright@packtpub.com。
若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可访问www.packtpub.comauthors。
问题解答
若读者对本书有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。
|
|