这是一本从架构视角讲解如何构建大型分布式系统的著作,是超级畅销书《深入理解Java虚拟机》的作者周志明多年架构和研发经验的总结,得到了多位行业资深架构专家的联袂推荐。
全书共16章,分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分。
●第①部分 演进中的架构(第1章)
着重介绍了软件开发历史中多种主流架构风格出现的契机、解决的问题以及带来的新缺陷。
●第②部分 架构师的视角(第2~5章)
总结了一名架构师应该在架构设计时思考哪些问题,有哪些主流的解决方案和行业标准做法,各种方案有什么优缺点,不同的解决方法会带来什么不同的影响,等等。
●第③部分 分布式的基石(第6~10章)
重点讨论了不同架构风格是应该在技术规范上统一,还是由应用系统自行解决这个问题,给出了解决思路、方法和常见工具。
●第④部分 不可变基础设施(第11~15章)
重点讲解了基础设施不变性的目的、原理与实现途径,包括虚拟化容器、容器间网络、持久化存储、资源与调度、服务网格等内容。
●第⑤部分 技术方法论(第16章)
面向技术决策者集中讨论了与分布式、微服务、架构等相关的理论话题,将解决问题的能力归纳、总结、升华为方法论。
全书以实践为导向,一个案例贯穿全书,同时给出了基于Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程。
(1)作者权威:
《深入理解Java虚拟机》作者周志明新作,资深架构专家,远光软件研究院院长。
(2)9位专家推荐:
付晓岩(IBM副合伙人)、孙玄(奈学教育CEO)、郑然(百度主任架构师)、刘超(腾讯云T4解决方案专家)、潘新宇(集团资深架构师)等9位架构专家联袂推荐。
(3)5个维度全面讲解:
从架构演进、架构设计思维、分布式基石、不可变基础设施、技术方法论5个维度全面探索如何构建可靠的大型分布式系统。
(4)5种架构风格工程样例:
同时给出了基于Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda 五种架构风格的样例工程,代码开源在GitHub上。
(5) 注重实战:
一个综合案例贯穿全书,将本书的核心知识点以及作者的经验和思考融入其中。
(6) 关注华章计算机,回复68391
获取GitHub配套代码工程项目地址
本书是一本以如何构建一套可靠的大型分布式系统为叙述主线的技术手册。笔者十多年来一直从事大型企业级软件的架构研发工作,较完整地经历了从早的大型单体系统到如今基于云原生基础设施的架构演变过程,希望借此机会,系统性地整理相关知识,查漏补缺,将它们都融入既有的知识框架之中,也希望能将这些知识与大家分享讨论。笔者相信要深入理解一门技术,不仅要去看、去读、去想、去用,更要去说、去写。将自己认为掌握了的知识叙述出来,尽量将知识说得条理清晰,让他人听得明白,释去心中疑惑,同时把自己的观点交予别人审视,乃至质疑,在此过程之中,自己也会挖掘出很多潜藏在已知背后的未知。
【如何阅读本书】
本书一共分为演进中的架构、架构师的视角、分布式的基石、不可变基础设施和技术方法论五部分,每一部分都有相对明确的主题与目标,建议按顺序阅读各部分以获得更有逻辑性的阅读体验。不过每部分内各章节之间并没有明显的前后依赖关系,读者从任何一个感兴趣的章节开始阅读都可以。
笔者并没有假定本书的所有读者都在架构方面具备特别专业的技术水平,因此在讲解各个知识点时,会力求在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述架构中与开发关系为密切的内容。但本书的主题毕竟是软件架构,这就不可避免地需要读者有一定的技术基础。本书依然主要面向中、高级程序员群体,一些常用的开发框架、类库和语法等基础知识点,均假设读者已有所了解。书中虽然会涉及这些工具、类库、框架的使用案例,但本书并不是它们的操作指南,只是借助它们去讲解技术原理。
学习任何知识都不应该脱离实践去空谈理论。为了讲清楚不同架构风格下的工程实现差异,也为了尽量少在书中贴代码,将宝贵的版面空间节省出来,笔者在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章会集中讨论几点与分布式、微服务、架构等相关的相对务虚的话题。
笔者认为,对于一个技术人员,成长的主要驱动力是实践,是在开发程序、解决问题中增长知识,再将知识归纳、总结、升华成为理论,所以笔者将本章安排到全书的末尾,也是希望大家能先去实践,再谈理论。同时,笔者也认为,对于一名研究人员或者企业中技术方向的决策者,理论与实践都不可缺少,在涉及决策的场景中,成体系的理论知识甚至比实践经验还要关键,因为执行力再强,也必须用在正确的方向上才有价值。如果你对自己的规划是有朝一日从一名技术人员发展成研究或者管理人员,补充这部分知识是必不可少的。
周志明(博士)
人工智能与企业级研发资深专家,远光软件研究院院长,阿里云MVP、腾讯云TVP、华为云MVP。在Java技术栈、微服务、云原生架构等领域有深入研究。
开源技术的积极倡导者和推动者,QCon全球开发者大会明星讲师、极客时间布道师、InfoQ.CN专栏撰稿人,作为组织者或主讲人,参与了多场线上、线下的技术布道活动。
计算机技术作家,十年间出版过八部技术专著,口碑和销量均得到业内认可,其中四本书在豆瓣上获得了9.0分或以上的评价。如知名畅销书《深入理解Java虚拟机:JVM高级特性与实践》目前已经出至第3版,累计印刷超过50次,仍长销不衰,是中文计算机图书领域公认的、难得一见的佳作。