微服务架构与实践PDF版免费电子版

编辑点评:

对于微服务架构的概念,相信大家应该都不陌生,无论使用 Apache Dubbo、还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务。

但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和服务的高可用可伸缩?拆分的过程中系统数量增多,测试、部署、运维、监控,又应该如何处理?

微服务架构与实践PDF版

内容简介

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

作者简介 

ThoughtWorks的首席咨询师王磊是国内较早倡导和实践微服务的先行者。王磊是开源软件的爱好者和贡献者,社区活动的参与者,《Ruby Gems开发实战》(Practical RubyGems)一书的译者,GDCR西安的组织者。他于2012年加入ThoughtWorks,为国内外诸多客户提供项目交付和咨询服务;在加入ThoughtWorks之前,曾就职过多家知名外企,具有丰富的敏捷项目实战经验。目前致力于微服务架构、高可用的Web应用以及DevOps的研究与实践。

微服务架构与实践PDF预览

目录

第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 小结 220

序言

最近,在软件架构设计领域,微服务非常火。

一提到软件开发、架构设计,如果不提微服务,不说说微服务的架构风格,那就落伍了,OUT了。

当然了,支持微服务的技术也是层出不穷,如微服务1.0中比较有名的来自Spring家族的Spring Cloud,以及国内在开源领域的翘楚阿里系中的Dubbo。其中,Spring Cloud提供了完整的微服务解决方案,为开发者提供了快速构建分布式系统的通用模型的工具,包括配置管理、服务发现、熔断器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等。而Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及服务治理方案。

随着微服务的持续火热,微服务2.0中的ServiceMesh也火起来了。Service Mesh,即“服务网格”,作为服务间通信的基础设施层,Service Mesh可以被看作是微服务间的TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写服务的开发人员来说,一般无须关心TCP/IP这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用Service Mesh也就无须关心服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如Spring Cloud、OSS,现在只要交给Service Mesh就可以了。

其实,上述说了那么多,介绍了那么多,基本都是集中在概念层面,在理论的层次上,以及支持微服务的开发技术、开发框架上,缺少这些概念、理论、技术和框架在实际项目中具体地应用。

对于大多数开发人员、架构师来说,除了理解微服务相关的概念,熟悉微服务相关的技术和框架,更关心如何在实际的项目中,应用这些概念、技术和框架。而这些,正是现在所欠缺的。

笔者从事软件开发多年,参与和指导过多个项目的架构设计,经历过单体架构、分布式架构、SOA架构,对软件架构的发展历史有一定的了解。

同时,在架构设计过程中,笔者也拜读了多位架构大师的著作,如温昱老师的《软件架构设计》、《一级架构师》,Peter Eeles和Peter Cripps的《软件架构设计的过程》等,以及各位技术大咖们在互联网上分享的各类架构相关的文档,使我受益匪浅。在此,我衷心的对这些前辈们表示由衷的感谢,谢谢你们对于知识的分享,以及无私奉献的精神。

最近,笔者有幸参与了某银行的一个采用微服务架构风格的项目,实践了一下微服务架构。

更确切地说,该项目是分布式服务架构向微服务架构的演进,使用更细粒度的服务和一组设计准则来考虑大规模的、复杂的系统架构设计,并非一个纯粹的微服务架构风格的项目。

秉着知识共享的精神,笔者写了这篇“微服务架构设计实践”的文章,一方面是对自己在架构设计方面的一个阶段性总结,另一方面是希望给其他刚刚从事软件架构设计的人员一个真实的、具体的软件架构过程的实践参考,为他们提供一个完整的实践案例。

在写这篇文章的过程中,在介绍微服务、软件架构设计思想的概念、方法论时,引用了各位大师、技术大咖们关于微服务、架构设计的文章中的内容,在此衷心地表示感谢。对于引用的内容,笔者并非简单地摘抄,而是结合笔者的理解和实践,做了适当的调整。如果存在不适、错误的地方,希望各位及时地指出,我将积极的采纳和修改。

阅读剩余
THE END