微服务架构与实践PDF电子书

微服务架构与实践随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。本书首先从理论出发,介绍了微服务架构的概念、诞生背景、本质特征以及优缺点;然后基于实践,探讨了如何从零开始构建第一个微服务,包括Hello World API、Docker 映像构建与部署、日志聚合、监控告警、持续交付流水线等;最后,在进阶部分讨论了微服务的轻量级通信、消费者驱动的契约测试,并通过一个真实的案例描述了如何使用微服务架构改造遗留系统。全书内容丰富,条理清晰,通俗易懂,是一本理论结合实践的微服务架构的实用书籍。 本书不仅适合架构师、开发人员、测试人员以及运维人员阅读,也适合正在尝试使用微服务架构解耦历史遗留系统的团队或者个人参考,希望本书能在实际工作中对读者有所帮助。

传统的架构模式一般采用的是三层架构模式,即大家熟知的MVC架构,MVC架构长期以来是大型系统开发的必备架构,按照高内聚,低耦合的要求分为了表示层,业务逻辑层和数据访问层,这三层从逻辑上来说是分开的,但是在物理部署上却是一体的,因此,仍然属于单块架构模式。
单块架构有一定的优势,比如易于开发、易于测试、易于部署和易于水平伸缩。但是相应带来的挑战则是:

  • 维护成本增加
  • 持续交付周期长
  • 新人的培养周期长
  • 技术选型成本高,难以变化
  • 可扩展性差,均依赖于硬件的提升
  • 构建全功能团队难,康威定律指出:一个组织的设计成果,其结构往往对应于这个组织中的沟通结构。单块架构的分工以技能为单位,如UI、前端、后台、数据、运维,因此沟通成本较高。

那么,什么是微服务架构呢,“微”不是指的代码行数,也不是开发时间。重点在于是否符合以下的几点特征:

  • 单一职责:对于每个模块,尽可能独立完成特定的功能;
  • 轻量级通信:通常使用HTTP/JSON,因此与语言无关;
  • 独立性:意味着微服务需要独立的开发、独立的测试、构建已经部署;
  • 远程隔离:通常每个服务都能运行在一个独立的操作系统进程中。

微服务与SOA有关联也有区别,最大的区别在于粒度问题,服务架构是集中还是松散方面。粒度问题主要是SOA主要面向的是多个大系统之间的协同问题,而微服务是多个服务之间的协同;服务架构方面SOA采用的是集中式的服务架构,存在系统总线,协同都需要通过总线完成,而微服务则是松散的服务架构,没有总线,每个服务之间理论上都可以彼此通信。

从微服务的本质来说,微服务具有以下几个特征:

  • 服务作为组件:与传统的组件不同的是,这里的服务可以独立部署;
  • 围绕业务组织团队:强调团队的多样性;
  • 关注产品而非项目:团队服务则整个服务的全生命周期,包括分析、开发、测试、部署、运维;
  • 技术多样性:因为服务较小,可以用最小的服务来做新技术、新方法尝试;
  • 业务数据独立:对于一个复杂系统,可以依据场景使用不同类型的数据库,包括如内存数据库、NOSQL数据库、关系型数据库等;
  • 基础设施自动化:微服务架构的服务较多,因此管理成本较高,需要借助持续集成、持续交付等自动化工具提升运维效率;
  • 演进式架构:做到业务驱动架构,架构服务于业务;

当然,微服务不是银弹,不能解决所有问题,应用微服务架构带来了以下问题:

  • 分布式系统的复杂度:性能方面的带宽和延迟问题,可靠性方面的故障点增多,异步方面的问题排查困难,数据一致性方面的实现难度增高,工具方面的缺失;
  • 运维成本:每个服务都需要独立的配置、部署、监控;
  • 部署自动化:如何有效地构建自动化部署流水线,降低部署成本、提高部署效率,是微服务架构下需要面临的一个挑战;
  • DevOps与组织架构:微服务不仅表现出一种架构模型,同样也表现出一种组织模型;开发者需要承担起服务整个生命周期的责任;
  • 服务间的依赖测试
  • 服务间的依赖管理

微服务架构与实践目录

第 1部分 基础篇
第 1章 单块架构及其面临的挑战 ............................................. 3
1.1三层应用架构 ..... 4
1.1.1三层应用架构的发展 .................. 4
1.1.2什么是三层架构 ......................... 5
1.1.3三层架构的优势 ......................... 6
1.2单块架构 ............. 6
1.2.1什么是单块架构 ......................... 6
1.2.2单块架构的优势 ......................... 7
1.2.3单块架构面临的挑战 .................. 8
1.3 小结 ................... 12
第 2章 微服务架构综述 .................... 13
2.1什么是微服务架构 ................................. 13
2.1.1多微才够微 ............................... 14
2.1.2 单一职责 ................................... 17
2.1.3 轻量级通信 ............................... 17
2.1.4 独立性 . 19
2.1.5 进程隔离 ................................... 20
2.2 微服务的诞生背景 ................................. 22
2.2.1 互联网行业的快速发展 ............ 23
2.2.2 敏捷、精益方法论的深入人心 23
2.2.3 单块架构系统面临的挑战 ........ 23
2.2.4 容器虚拟化技术 ....................... 23
2.3 微服务架构与 SOA ................................ 24
2.3.1 SOA概述 .................................. 24
2.3.2 微服务与 SOA .......................... 25
2.4 微服务的本质 ... 26
2.4.1服务作为组件 ........................... 27
2.4.2 围绕业务组织团队 ................... 28
2.4.3 关注产品而非项目 ................... 29
2.4.4 技术多样性 ............................... 31
2.4.5 业务数据独立 ........................... 32
2.4.6 基础设施自动化 ....................... 33
2.4.7 演进式架构 ............................... 33
2.5 微服务不是银弹 ..................................... 34
2.5.1 分布式系统的复杂度 ................ 35
2.5.2 运维成本 ................................... 36
2.5.3 部署自动化 ............................... 36
2.5.4 DevOps与组织架构 ................. 37
2.5.5 服务间的依赖测试 ................... 37
2.5.6 服务间的依赖管理 ................... 37
2.6 小结 ................... 38
第 2部分 实践篇
第 3章 构建第一个服务 .................... 41
3.1场景分析 ........... 41
3.2任务拆分 ........... 43
第 4章 Hello World API .................... 45
4.1 API实现 ............ 45
4.1.1 开发语言 ——Ruby ................... 45
4.1.2 Web框架——Grape ................. 46
4.1.3 API的具体实现 ........................ 47
4.2代码测试与静态检查 ............................. 50
4.2.1代码测试 ................................... 50
4.2.2测试覆盖率统计 ....................... 53
4.2.3静态检查 ................................... 54
4.2.4代码复杂度检查 ....................... 57
第 5章 构建 Docker映像 ................. 61
5.1 定义 Dockerfile . 61
5.2 配置 Docker主机 .................................... 63
5.3 构建 Docker映像 .................................... 64
5.4 运行 Docker容器 .................................... 64
5.5 发布 Docker映像 .................................... 65
5.6 小结 ................... 69
第 6章 部署 Docker映像 ................. 71
6.1基础设施 AWS .. 71
6.2基础设施自动化 ..................................... 73
6.3 部署 Docker映像 .................................... 80
6.4自动化部署 ....... 81
6.5 小结 ................... 84
第 7章 持续交付流水线 .................... 85
7.1持续集成环境 ... 85
7.2提交阶段 ........... 87
7.3验证阶段 ........... 91
7.4构建阶段 ........... 91
7.5发布阶段 ........... 94
7.6 小结 ................... 96
第 8章 日志聚合 .............................. 97
8.1 日志聚合工具简介 ................................. 97
8.2 Splunk的核心 ... 99
8.3 安装 Splunk索引器 .............................. 100
8.4 安装 Splunk转发器 .............................. 101
8.5日志查找 ......... 102
8.6告警设置 ......... 103
8.7 小结 ................. 104
第 9章 监控与告警 ......................... 105
9.1 Nagios简介..... 105
9.2 Nagios的工作原理 ............................... 107
9.3 Nagios安装..... 108
9.4 Nagios的配置 . 109
9.5 监控 products-service ............................ 111
9.6 告警 ................. 113
9.7 小结 ................. 114
第 10章 功能迭代 .......................... 115
10.1定义模型 ....... 116
10.2持久化模型 ... 117
10.3定义表现形式 ..................................... 119
10.4 实现 API ........ 122
10.5服务描述文件 ..................................... 125
10.6 小结 ............... 127
第 3部分 进阶篇
第 11章 微服务与持续交付 ............ 131
11.1持续交付的核心 .................................. 132
11.2微服务架构与持续交付 ...................... 133
11.2.1 开发 . 133
11.2.2 测试 . 137
11.2.3持续集成 ................................ 139
11.2.4 构建 . 139
11.2.5 部署 . 140
11.2.6 运维 . 143
11.3 小结 ............... 144
第 12章 微服务与轻量级通信机制 . 145
12.1同步通信与异步通信 ......................... 145
12.1.1 概述 . 145
12.1.2同步通信与异步通信的选择 146
12.2远程调用 RPC ..................................... 147
12.2.1远程过程调用的核心 ............ 147
12.2.2远程方法调用 ....................... 148
12.2.3远程过程调用的弊端 ............ 148
12.3 REST ............. 149
12.3.1 概述 . 149
12.3.2 REST的核心 ......................... 150
12.3.3 REST的优势 ......................... 152
12.3.4 REST的不足 ......................... 152
12.3.5 本节小结 ............................... 155
12.4 HAL ............... 155
12.4.1 概述 . 155
12.4.2 HAL的核心 .......................... 156
12.4.3 HAL浏览器 .......................... 160
12.5消息队列 ....... 161
12.5.1 核心部分 ............................... 162
12.5.2 访问方式 ............................... 163
12.5.3消息队列的优缺点 ............... 164
12.6后台任务处理系统 ............................. 165
12.6.1 核心部分 ............................... 165
12.6.2 服务回调 ............................... 166
12.6.3 一个例子 ............................... 167
12.6.4后台任务与微服务 ............... 169
12.7 小结 ............... 170
第 13章 微服务与测试 ................... 171
13.1微服务的结构 ..................................... 171
13.2微服务的测试策略 ............................. 173
13.3微服务的单元测试 ............................. 175
13.3.1单元测试综述 ....................... 175
13.3.2单元测试的内容 ................... 176
13.4微服务的集成测试 ............................. 179
13.4.1集成测试综述 ....................... 179
13.4.2集成测试的实施方法 ............ 179
13.4.3集成测试的内容 ................... 180
13.5基于消费者驱动的契约测试 .............. 181
13.5.1集成测试存在的弊端 ............ 181
13.5.2什么是契约 ........................... 183
13.5.3什么是契约测试 ................... 184
13.5.4契约测试的方法 ................... 185
13.5.5 Pact实现契约测试 ................ 187
13.5.6 一个例子 ............................... 192
13.5.7 本节小结 ............................... 205
13.6微服务的组件测试 ............................. 205
13.6.1组件测试概述 ....................... 205
13.6.2组件测试的方法 ................... 206
13.6.3 本节小结 ............................... 207
13.7微服务的端到端测试 ......................... 208
13.7.1端到端测试概述 ................... 208
13.7.2端到端测试的内容 ............... 208
13.7.3 本节小结 ............................... 209
13.8 小结 ............... 210
第 14章 使用微服务架构改造遗留系统 ................................ 211
14.1背景与挑战 ... 211
14.2改造策略 ....... 212
14.2.1 昀小修改 ............................... 212
14.2.2 功能剥离 ............................... 212
14.2.3 数据解耦 ............................... 213
14.2.4 数据同步 ............................... 213
14.2.5 迭代替换 ............................... 214
14.3快速开发实践 ..................................... 215
14.3.1快速开发模板 ....................... 215
14.3.2代码生成工具 ....................... 217
14.3.3持续集成模板 ....................... 217
14.3.4一键部署工具 ....................... 217
14.4微服务架构下的新系统 ..................... 218
14.5 小结

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: