首页>参考读物>计算机科学与技术>软件与程序设计

凤凰架构:构建可靠的大型分布式系统
作者 : 周志明 著
出版日期 : 2021-06-15
ISBN : 978-7-111-68391-9
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 425
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容简介
这是一本从架构视角讲解如何构建大型分布式系统的著作,是超级畅销书《深入理解Java虚拟机》的作者周志明多年架构和研发经验的总结,得到了多位行业资深架构专家的联袂推荐。
全书共16章,分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分。
第1部分 演进中的架构(第1章)
着重介绍了软件开发历史中多种主流架构风格出现的契机、解决的问题以及带来的新缺陷。
第二部分 架构师的视角(第2~5章)
总结了一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等。
第三部分 分布式的基石(第6~10章)
重点讨论了“不同架构风格是应该在技术规范上统一,还是由应用系统自行解决”这个问题,给出了解决思路、方法和常见工具。
第四部分 不可变基础设施(第11~15章)
重点讲解了基础设施不变性的目的、原理与实现途径,包括虚拟化容器、容器间网络、持久化存储、资源与调度、服务网格等内容。
第五部分 技术方法论(第16章)
面向技术决策者集中讨论了与分布式、微服务、架构等相关的理论话题,将解决问题的能力归纳、总结、升华为方法论。
全书以实践为导向,一个案例贯穿全书,同时给出了基于Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程。

图书特色

超级畅销书
《深入理解Java虚拟机》作者又一新作国内多位架构专家联袂推荐

从架构演进、架构设计思维、分布式基石、不可变基础设施、技术方法论5个维度全面探索如何构建可靠的大型分布式系统

图书前言

本书是一本以“如何构建一套可靠的大型分布式系统”为叙述主线的技术手册。笔者十多年来一直从事大型企业级软件的架构研发工作,较完整地经历了从最早的大型单体系统到如今基于云原生基础设施的架构演变过程,希望借此机会,系统性地整理相关知识,查漏补缺,将它们都融入既有的知识框架之中,也希望能将这些知识与大家分享讨论。笔者相信要深入理解一门技术,不仅要去看、去读、去想、去用,更要去说、去写。将自己“认为掌握了的”知识叙述出来,尽量将知识说得条理清晰,让他人听得明白,释去心中疑惑,同时把自己的观点交予别人审视,乃至质疑,在此过程之中,自己也会挖掘出很多潜藏在“已知”背后的“未知”。
如何阅读本书
本书一共分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分,每一部分都有相对明确的主题与目标,建议按顺序阅读各部分以获得更有逻辑性的阅读体验。不过每部分内各章节之间并没有明显的前后依赖关系,读者从任何一个感兴趣的章节开始阅读都可以。
笔者并没有假定本书的所有读者都在架构方面具备特别专业的技术水平,因此在讲解各个知识点时,会力求在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述架构中与开发关系最为密切的内容。但本书的主题毕竟是软件架构,这就不可避免地需要读者有一定的技术基础。本书依然主要面向中、高级程序员群体,一些常用的开发框架、类库和语法等基础知识点,均假设读者已有所了解。书中虽然会涉及这些工具、类库、框架的使用案例,但本书并不是它们的操作指南,只是借助它们去讲解技术原理。
学习任何知识都不应该脱离实践去空谈理论。为了讲清楚不同架构风格下的工程实现差异,也为了尽量少在书中贴代码,将宝贵的版面空间节省出来,笔者在GitHub上分别建立了基于Spring Boot、Spring Cloud、Kubernetes、Istio和AWS Lambda的五种架构风格的样例工程。如果你阅读之前对架构并没有太深刻的理解,建议先阅读一遍本书附录A的内容。如果你是一名驾驶初学者,最合理的学习路径应该是先把汽车发动,然后慢慢行驶起来,而不是先从“引擎动力原理”“变速箱构造”入手去深刻地了解一辆汽车。计算机技术也是同理,先从运行程序开始,看看效果,搭建好开发、调试环境,对即将学习的内容先有一个整体的认知是很有好处的。
最后,笔者再简要介绍下本书每一部分的读者对象、目标和价值。
第一部分 演进中的架构
这部分只有第1章,适合所有开发者,但尤其推荐刚刚从单体架构向微服务架构转型的开发者阅读。
第一部分既是全书的绪论,也是对后续将用到的大量名词概念所做的铺垫。这部分没有谈论过于具体的技术,只是着重介绍了软件开发历史中多种主流架构出现的契机、解决的问题以及带来的新缺陷。
第二部分 架构师的视角
这部分包括第2~5章,适合所有技术架构师、系统设计与开发人员,主要讨论与风格无关的架构知识。
“架构师”这个词的外延非常宽泛,不同语境中有不同含义。本书中的技术架构师特指企业架构中面向技术模型的系统设计者,这意味着讨论范围不会涉及贴近企业战略、业务流程的系统分析、信息战略设计等内容,而是聚焦于贴近一线研发人员的技术方案设计者。这部分将介绍一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等,以达到将“架构设计”这种听起来抽象的工作具体化、具象化的目的。
作为后续实践的基础,第二部分的内容与具体的架构风格无关,讨论的是普适的架构技术与使用技巧。无论你是否关注微服务、云原生这些概念,无论你从事架构设计还是编码开发,了解这里所列的基础知识,都是有实用价值的。
第三部分 分布式的基石
这部分包括第6~10章,主要面向使用分布式架构的开发人员。
只要选择了分布式架构,无论是SOA、微服务、服务网格或者其他架构风格,涉及与远程服务的交互时,服务的注册发现、跟踪治理、负载均衡、故障隔离、认证授权、伸缩扩展、传输通信、事务处理等一系列问题都是不可避免的。不同的架构风格,其区别是到底要在技术规范上提供统一的解决方案,由应用系统自行解决,还是在基础设施层面将这类问题隔离掉。第三部分将重点讨论这类问题的解决思路、方法和常见工具。
第四部分 不可变基础设施
这部分包括第11~15章,主要面向基础设施的运维人员、技术平台的开发人员。
“不可变基础设施”这个概念由来已久。2012年Martin Fowler设想的“凤凰服务器一”与2013年Chad Fowler正式提出的“不可变基础设施二”,都阐明了基础设施不变性带来的益处。在云原生基金会(Cloud Native Computing Foundation,CNCF)所定义的“云原生”概念中,“不可变基础设施”被提升到与微服务平级的重要程度,此时它已不再局限于方便运维、程序升级和部署的手段,而是升华为向应用代码隐藏分布式架构复杂度、让分布式架构得以成为一种可普遍推广的普适架构风格的必要前提。在云原生时代、后微服务时代,软件与硬件之间的界线已经彻底模糊,无论是基础设施的运维人员,抑或是技术平台的开发人员,都有必要深入理解基础设施不变性的目的、原理与实现途径。
第五部分 技术方法论
这部分包括第16章,主要面向企业中重要技术的决策者。
本书的主体内容是务实的,偏重具体技术,而非方向理论。但在第16章会集中讨论几点与分布式、微服务、架构等相关的相对务虚的话题。
笔者认为,对于一个技术人员,成长的主要驱动力是实践,是在开发程序、解决问题中增长知识,再将知识归纳、总结、升华成为理论,所以笔者将本章安排到全书的末尾,也是希望大家能先去实践,再谈理论。同时,笔者也认为,对于一名研究人员或者企业中技术方向的决策者,理论与实践都不可缺少,在涉及决策的场景中,成体系的理论知识甚至比实践经验还要关键,因为执行力再强,也必须用在正确的方向上才有价值。如果你对自己的规划是有朝一日从一名技术人员发展成研究或者管理人员,补充这部分知识是必不可少的。
联系作者
在本书交稿的时候,笔者并没有想象中的那样兴奋或轻松,写作之时那种“战战兢兢、如履薄冰”的感觉依然萦绕在心头。在每一章、每一节落笔之时,笔者都在考虑如何才能把各个知识点更有条理地讲述出来,都在担心会不会由于自己理解有偏差而误导了大家。囿于写作水平和写作时间,书中难免存在不妥之处,后续的勘误会在本书的网站(https://icyfenix.cn)上贴出,大家如有任何意见或建议,都欢迎在此网站上留言。相信写书与写程序一样,作品一定都是不完美的,因为不完美,我们才有不断追求完美的动力。
致谢
首先要感谢我的家人,是家人在本书写作期间对我的悉心照顾,才让我能够全身心地投入写作之中,而无后顾之忧。
同时要感谢我的工作单位远光软件,公司为我提供了宝贵的工作、学习和实践环境,书中的许多知识点都来自工作之中;也感谢与我一起工作的同事们,非常荣幸能与你们一起在这个富有激情的团队中共同奋斗。
最后,感谢机械工业出版社华章分社的编辑,本书能够顺利出版,离不开他们的敬业精神和一丝不苟的工作态度。

周志明

专家评论

一本好的技术书不仅能告诉你某个技术点怎么做、为什么这么做,还会让你明白所有技术点如何协同配合,最终构建出一个完整的技术体系。本书很好地兼顾了技术细节和宏观体系两方面,从分布式服务的基础功能到高级治理能力,结合作者的思考,层层推进、娓娓道来,引人深思。相信深入钻研此书的读者必定能在架构能力方面得到如凤凰涅槃般的升华。
—李鑫 天弘基金线上渠道技术负责人/
《微服务治理:体系、架构及实践》作者

从大型机到单体架构,从微服务架构到无服务架构,每一次架构模式的演进都是一次涅槃。每一个软件系统都是由大量服务构成的生态体系,个体服务的“死亡”和“重生”是整个系统能否持续可靠运行的关键因素。本书从5个方面全面剖析了如何构建一个可靠的分布式系统,同时给出了Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程。推荐阅读。
—刘志勇 新浪微博平台研发部架构师

随着IT系统复杂度不断增加,无论是为了降低团队的知识负载,还是为了最大化利用云原生的弹性能力,分布式架构已经成为处理新一代复杂系统的默认架构模式。但它的引入也同样大幅提高了架构的复杂性,导致系统可靠性降低。如何构建既可靠又灵活的大型分布式架构,成为新的难点与课题。本书系统、全面且深入浅出地讲解了分布式架构的方方面面,对大家了解并驾驭大型分布式架构非常有帮助,强烈推荐。
—王健 ThoughtWorks首席咨询师

用“凤凰”这个词来诠释分布式架构,让人不禁联想到每一种架构都是一只浴火重生的凤凰,仔细想来,确实如此。从小型系统迭代到大型系统,从单体走向分布式,每一个成功的系统都会经历一次次“涅槃重生”,从失败中站起来,从故障里爬出来,从经验中成长起来。本书从“架构演进”出发,以“架构师视角”展开,详细讲述了分布式架构的原理、基础设施、设计理念等,是一本很好的可以让架构“浴火重生”的经验宝典。
—王晓波 同程旅行机票事业群CTO

上架指导

计算机\程序设计

封底文字

写一本关于架构的书很难,要求作者有坚实的技术基础、丰富的项目经验,以及良好的文字驾驭能力。周志明老师凭借自己多年的实战经验和认真态度,直面了这份困难。书中除了要介绍架构的最基本知识外,还需要把作者的经验、感受与思考融合进来,才能给读者以启发,周老师很好地做到了这点。
——付晓岩 IBM副合伙人/GBS大中华区金融核心锐变团队业务发展和交付总监
大规模的分布式架构能力已经成为技术人员的必备能力,这本书系统地讲述了构建大规模分布式架构的整个历程,有理论,有实战,描绘了一张完整的知识地图,会成为你迈进架构之门的一把钥匙。
——刘超 腾讯云T4解决方案专家/前网易研究院云计算技术部首席架构师
周老师依托自身十多年架构设计的经验,深入浅出地介绍了大型分布式系统的涅槃之旅。本书首先介绍了系统架构设计中遇到的通用问题的解决方案,帮助你打牢基础,再一一讲解构建大型分布式系统时会出现的各类问题的解决手段,帮助你更上一层楼。学习本书的内容,可以让你在面对大型分布式系统的架构设计时如虎添翼。
——潘新宇 京东集团资深架构师
作者一直从事分布式系统的研发工作,是架构领域的资深专家。这本书源于真实的企业级实践,覆盖完整的分布式系统架构。作者通过真实的企业级案例,深入浅出地剖析了分布式系统的架构,让读者真正掌握分布式系统设计的哲学本质,从而在面对不同业务场景时,能够给出优雅的架构解决方案,真正达到为企业降本增效的目的。
——孙玄 奈学教育创始人&CEO/前58集团技术委员会主席
本书以如何构建一套可靠的大型分布式系统为主线, 结合云原生时代的技术发展趋势和作者十余年大型企业级软件架构研发的深厚技术积累,由浅入深地将抽象和复杂的分布式架构技术具象化,全面讲述了研发大型分布式系统所需要的理论和实践知识。
——郑然 百度主任架构师/云原生技术负责人 

作者简介

周志明 著:周志明
资深Java技术、机器学习和企业级开发技术专家,现任远光软件研究院院长,人工智能博士在读,著有知名畅销书《深入理解Java虚拟机:JVM高级特性与最佳实践》。
开源技术的积极倡导者和推动者,对计算机科学和相关的多个领域都有深刻的见解,尤其是人工智能、Java开发和敏捷开发等领域。曾受邀在InfoQ和IBM DeveloperWorks等网站撰写技术专栏。
著作颇丰,著有《深入理解Java虚拟机》《深入理解OSGi》,翻译了《Java虚拟机规范》等著作。其中《深入理解Java虚拟机》第1版出版于2011年,已经出至第2版,不仅销量好,而且口碑更好,累计印刷超过30次,仍长销不衰,是中文计算机图书领域公认的、难得一见的佳作。

图书目录

赞誉
自序
前言
第一部分 演进中的架构
第1章 服务架构演进史2
1.1 原始分布式时代2
1.2 单体系统时代5
1.3 SOA时代8
1.4 微服务时代12
1.5 后微服务时代16
1.6 无服务时代19
第二部分 架构师的视角
第2章 访问远程服务24
2.1 远程服务调用24
2.1.1 进程间通信24
2.1.2 通信的成本26
2.1.3 三个基本问题28
2.1.4 统一的RPC30
2.1.5 分裂的RPC32
2.2 REST设计风格34
2.2.1 理解REST35
2.2.2 RESTful的系统37
2.2.3 RMM41
2.2.4 不足与争议45
第3章 事务处理48
3.1 本地事务49
3.1.1 实现原子性和持久性50
3.1.2 实现隔离性54
3.2 全局事务57
3.3 共享事务62
3.4 分布式事务64
3.4.1 CAP与ACID64
3.4.2 可靠事件队列67
3.4.3 TCC事务69
3.4.4 SAGA事务72
第4章 透明多级分流系统75
4.1 客户端缓存76
4.1.1 强制缓存77
4.1.2 协商缓存79
4.2 域名解析81
4.3 传输链路83
4.3.1 连接数优化84
4.3.2 传输压缩88
4.3.3 快速UDP网络连接90
4.4 内容分发网络92
4.4.1 路由解析92
4.4.2 内容分发95
4.4.3 CDN应用96
4.5 负载均衡97
4.5.1 数据链路层负载均衡99
4.5.2 网络层负载均衡101
4.5.3 应用层负载均衡104
4.5.4 均衡策略与实现106
4.6 服务端缓存107
4.6.1 缓存属性108
4.6.2 缓存风险117
第5章 架构安全性120
5.1 认证121
5.1.1 认证的标准121
5.1.2 认证的实现128
5.2 授权129
5.2.1 RBAC130
5.2.2 OAuth 2133
5.3 凭证140
5.3.1 Cookie-Session140
5.3.2 JWT142
5.4 保密147
5.4.1 保密的强度147
5.4.2 客户端加密148
5.4.3 密码存储和验证149
5.5 传输151
5.5.1 摘要、加密与签名151
5.5.2 数字证书154
5.5.3 传输安全层157
5.6 验证160
第三部分 分布式的基石
第6章 分布式共识166
6.1 Paxos168
6.1.1 Paxos的诞生169
6.1.2 算法流程169
6.1.3 工作实例172
6.2 Multi Paxos174
6.3 Gossip协议178
第7章 从类库到服务180
7.1 服务发现180
7.1.1 服务发现的意义181
7.1.2 可用与可靠182
7.1.3 注册中心实现185
7.2 网关路由186
7.2.1 网关的职责186
7.2.2 网络I/O模型188
7.2.3 BFF网关190
7.3 客户端负载均衡191
7.3.1 客户端负载均衡器193
7.3.2 代理负载均衡器194
7.3.3 地域与区域196
第8章 流量治理198
8.1 服务容错198
8.1.1 容错策略199
8.1.2 容错设计模式201
8.2 流量控制209
8.2.1 流量统计指标210
8.2.2 限流设计模式211
8.2.3 分布式限流215
第9章 可靠通信217
9.1 零信任网络217
9.1.1 零信任安全模型的特征218
9.1.2 Google的实践探索220
9.2 服务安全222
9.2.1 建立信任222
9.2.2 认证223
9.2.3 授权227
第10章 可观测性230
10.1 事件日志233
10.1.1 输出233
10.1.2 收集与缓冲235
10.1.3 加工与聚合236
10.1.4 存储与查询237
10.2 链路追踪239
10.2.1 追踪与跨度239
10.2.2 数据收集240
10.2.3 追踪规范化243
10.3 聚合度量244
10.3.1 指标收集245
10.3.2 存储查询248
10.3.3 监控预警250
第四部分 不可变基础设施
第11章 虚拟化容器254
11.1 容器的崛起256
11.1.1 隔离文件:chroot256
11.1.2 隔离访问:名称空间257
11.1.3 隔离资源:cgroups258
11.1.4 封装系统:LXC259
11.1.5 封装应用:Docker260
11.1.6 封装集群:Kubernetes263
11.2 以容器构建系统266
11.2.1 隔离与协作266
11.2.2 韧性与弹性271
11.3 以应用为中心的封装275
11.3.1 Kustomize276
11.3.2 Helm与Chart277
11.3.3 Operator与CRD279
11.3.4 开放应用模型284
第12章 容器间网络288
12.1 Linux网络虚拟化288
12.1.1 网络通信模型289
12.1.2 干预网络通信291
12.1.3 虚拟化网络设备294
12.1.4 容器间通信304
12.2 容器网络与生态306
12.2.1 CNM与CNI306
12.2.2 CNM到CNI308
12.2.3 网络插件生态310
第13章 持久化存储314
13.1 Kubernetes存储设计314
13.1.1 Mount和Volume316
13.1.2 静态存储分配318
13.1.3 动态存储分配322
13.2 容器存储与生态325
13.2.1 Kubernetes存储架构325
13.2.2 FlexVolume与CSI327
13.2.3 从In-Tree到Out-of-Tree329
13.2.4 容器插件生态331
第14章 资源与调度336
14.1 资源模型336
14.2 服务质量与优先级337
14.3 驱逐机制340
14.4 默认调度器342
第15章 服务网格346
15.1 透明通信的涅槃347
15.1.1 通信成本347
15.1.2 数据平面352
15.1.3 控制平面358
15.2 服务网格与生态360
15.2.1 服务网格接口361
15.2.2 通用数据平面API363
15.2.3 服务网格生态364
第五部分 技术方法论
第16章 向微服务迈进368
16.1 目的:微服务的驱动力369
16.2 前提:微服务需要的条件371
16.3 边界:微服务的粒度375
16.4 治理:理解系统复杂性377
16.4.1 静态的治理378
16.4.2 发展的治理380
附录A 技术演示工程实践383
附录B 部署Kubernetes集群402

教学资源推荐
作者: [美]本贾尼·斯特劳斯特卢普(Bjarne Stroustrup) 著
作者: 郭志强 邱李华 曹青 等编著
作者: Harvey M.Deitel,Paul J.Deitel
参考读物推荐
作者: (美)Tim Roadley 著
作者: 冯庆东 李根福 等编著