书籍作者:王磊 | ISBN:9787121275913 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:7033 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。本书首先从理论出发,介绍了微服务架构的概念、诞生背景、本质特征以及优缺点;然后基于实践,探讨了如何从零开始构建**个微服务,包括Hello World API、Docker 映像构建与部署、日志聚合、监控告警、持续交付流水线等;最后,在进阶部分讨论了微服务的轻量级通信、消费者驱动的契约测试,并通过一个真实的案例描述了如何使用微服务架构改造遗留系统。全书内容丰富,条理清晰,通俗易懂,是一本理论结合实践的微服务架构的实用书籍。
本书不仅适合架构师、开发人员、测试人员以及运维人员阅读,也适合正在尝试使用微服务架构解耦历史遗留系统的团队或者个人参考,希望本书能在实际工作中对读者有所帮助。
ThoughtWorks的首席咨询师王磊是国内较早倡导和实践微服务的先行者。王磊是开源软件的爱好者和贡献者,社区活动的参与者,《Ruby Gems开发实战》(Practical RubyGems)一书的译者,GDCR西安的组织者。他于2012年加入ThoughtWorks,为国内外诸多客户提供项目交付和咨询服务;在加入ThoughtWorks之前,曾就职过多家知名外企,具有丰富的敏捷项目实战经验。目前致力于微服务架构、高可用的Web应用以及DevOps的研究与实践。
√ 微服务旨在化大而复杂为小而简单,用快速交付支撑持续创新
√ 被谷歌等一线IT企业采用,与容器|云计算|持续交付等热点实践密不可分
√ 从架构演进到原理剖析,覆盖开发、测试、部署、运维、组织变化等微服务各方面
√ 代码静态检查、云基础设施构建、 Docker映像构建及部署、持续交付流水线、服务日志全程实战
前言
一直以来,系统的架构设计就是 IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效地构建。系统架构设计描述了在应用系统内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分之间相互分工、相互协作,从而为用户提供某种特定的价值。多年来,我们一直在技术的浪潮中乘风破浪,扬帆奋进,寻找更优秀的系统架构设计方式来构建系统。
由来
随着 RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务架构逐渐成为系统架构的一个代名词。那么微服务是否是业界期待已久的企业架构解决方案呢?在微服务架构的实施过程中存在着怎样的困难和挑战呢?
在过去两年多的时间里,笔者一直在探索和实践,并助力国外某房地产互联网门户,将其复杂的业务支撑系统逐渐演进为基于微服务架构的系统。
这期间也经历了从微服务的理论认识,到小范围实践、迭代,再到多个基于微服务构建的项目已经成功上线的过程。在感受微服务为开发实践、测试策略、部署、运维等带来改变的同时,也切身体会到使用微服务架构,对系统灵活性、可伸缩性方面的提升,以及对团队应对变化能力的提升。
结构
鉴于此,本书从笔者实践的角度出发,首先阐述了单块架构存在的弊端以及微服务的理论基础。接着通过实践部分,让读者能够体验从零开始搭建第一个微服务的过程,包括代码静态检查、AWS基础设施构建、 Docker映像构建及部署、持续交付流水线、服务的日志聚合以及监控和告警。随后,探讨了笔者在微服务的实践过程中所积累的经验,包括基于 HAL的通信机制、消费者驱动的测试,并通过一个真实的案例,帮助读者更好地理解微服务架构所带来的灵活性、易扩展性和独立性。
全书分成 3部分,共 14章。
第 1部分为基础部分。包括第 1章和第 2章,概述了三层应用架构以及微服务架构。
第 2部分为实践部分。包括第 3章至第 10章,通过一个具体的实例,从头到尾介绍了一个服务从需求到实现,再到构建、部署以及运维的整个过程。
第 3部分为进阶部分。包括第 11章至第 14章,讨论了微服务的持续交付、测试策略、通信机制,并描述了一个使用微服务改造遗留系统的真实案例。
部分和部分之间几乎是相互独立的,没有必然的前后依赖关系,因此,读者可以从任何一个感兴趣的部分开始阅读。但是,每部分中的各章节之间的内容是相互关联的,建议按照章节的顺序阅读。
结合作者本人的工作经验和使用习惯,书中的大部分案例代码均采用 Ruby编写,并且运行在 Mac OS环境上。因此,读者最好对 Ruby语言有一定了解,并且熟悉 Mac OS或者 Linux环境下的基本操作,以便能够更加顺利地阅读本书。
感悟
2014年 10月,我在 InfoQ上发表了一篇题为《使用微服务架构改造遗留系统》的文章,收到了很多朋友的反馈与建议,并有一些朋友和我积极探讨微服务架构的实践与心得。2015年初,基于在项目中积累的经验,我开始在博客上连载《解析微服务架构》系列的文章。机缘巧合,认识了电子工业出版社计算机出版分社的张春雨编辑,并在他的建议下,开始构思如何将自己在微服务实践中积累的经验以书的方式展现出来。但由于工作项目进度一直很紧,直到 2015年 4月,参加完北京 QCon会议后,才开始真正动笔。
当时,自己曾信心满满地认为,应该能够比较顺利地完成这本书,因为大部分内容都比较熟悉,而且平时工作中也有笔记和积累。但当真正动笔之后才发现,理解领悟和用文字表述清楚是截然不同的两件事。有时候看似很容易的知识点,用文字解释清楚却并非易事。有时候工作中天天遵循的实践,总结清楚却需要花些工夫。当然,整个写作的过程,也是自己将微服务的相关知识点以及积累的经验从头到尾梳理的过程。通过编写本书,使得自己对这些知识的认识和理解更加深入和全面,受益匪浅。每次重新回过头来审阅书稿时,总会觉得某些知识点讲述得不够透彻,需要进行补充,或者应该用更好的方式将其展示出来。
微服务作为当下热门的话题之一,其涉及的部分已经不仅仅局限在技术层面,而是关注整个产品或者组织的价值。因此,它不仅涉及技术选择、服务划分、服务注册、服务安全、服务测试、服务运维,也包括微服务下团队组织架构的变化,全功能团队的构建,可靠的持续交付流水线,DevOps文化等。作为一本微服务架构的书,很难做到面面俱到。另外,由于时间仓促以及作者自身水平有限,书中难免有疏漏之处,在此敬请广大读者批评指正。在阅读本书的过程中,如有任何问题,可通过微信号:5109343或邮箱:[email protected]与我联系。
最后,希望读者能享受微服务架构的实践之路。
王磊 2015年 10月 7日于西安
致谢
首先,要感谢我的家人,特别是我的妻子。在我占用大量周末、休假的时间进行写作的时候,她给予了极大的宽容、支持和理解,并对我悉心照顾且承担了全部的家务,让我能够全身心地投入到写作之中,而无须操心家庭琐事。没有她的支持和鼓励,这本书是无法完成的。
同时,要感谢 ThoughtWorks提供了优秀的环境和平台,使我的技能能够得以施展,并且身处一群技术牛人中间,也得到了很多学习和成长的机会。
另外,感谢我的同事赵国庆和陈熙,他们为本书“Pact实现契约测试”小节提供了示例代码。也要感谢我所在的团队对我一直以来的鼓励与支持,并在日常的工作中给予了我很多帮助。同时,感谢张凯峰、吕健、崔福罡、周星、邱俊涛(排名不分先后)等同事的帮助,在我写书的过程中,他们提出了很多宝贵的建议。谢谢各位!
最后,还要感谢电子工业出版社计算机出版分社的张春雨编辑和刘舫编辑,在我写作期间给予了很多指导和帮助。根据他们的建议,我对本书的内容做了很多修正,使内容更加充实,也更加易懂,本书能够出版,离不开他们的敬业精神和一丝不苟的工作态度。
第 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
这么写书第二次见,人品有问题,推荐的人也是。
2016-01-25
给个3星吧,看了聊聊架构之后 推荐公司图书馆 购买的,买来看了目录之后,觉得书名 改为 《docker 入门》更合适,不推荐购买。
2016-07-06
整体的结构组织并不合理,想看的东西一笔带过,基础知识不断复述。最后用了比较大的篇幅将自己的契约测试框架,给人一种推销的感觉。
2016-02-03
适合对微服务没怎么接触过的人,作为微服务的入门材料还不错吧
2016-02-01
比较失望的一本书
2016-07-08
书评书评
应邀来评价一下这本书~ 对于曾经在TW呆过一阵的人来说,看到这本书的目录很是心喜。因为几乎概括了TW现阶段推行的所有东西。从章节设计上还是十分用心的,涵盖了一种很‘时尚’的开发模式中的方方面面,ruby开发.........
2016-01-28 00:07
架子很大,但是干货不足
这本书借着微服务的热潮而出版,兴冲冲的买来看了,但是比较失望。很短时间就完成了阅读,总体说有点意思,但是干货严重不足。 这本书主要是介绍了一种微服务的实践过程,包括分析、设计、开发、测试、集成、发布.........
2016-05-19 16:00
梳理下概念
这本书比较泛泛而谈, 适合用来梳理下微服务的概念. 前面对微服务技术发展的总结不错, 后面实践部分的配置意义不大(细节可以 Google). 贴一下笔记. ## 单块架构 随着时代的发展, 软件系统中的逻辑通常被分为 3 层.........
2016-12-05 23:15
中国微服务的开山之作
作为一本在国内首本系统化描述微服务的著作,这本书成功的完成了他的使命。不仅系统化的介绍了微服务技术的思想、架构、适用场景,而且对其中的关键技术和实践也进行了介绍,甚至包括一些经过检验的成熟工具。特.........
2016-02-17 14:19