前言

既然翻开这本书,我猜测你大概率是个互联网从业者,我还能猜出这几年你大概率被这些层出不穷的概念包围:微服务、SRE、容器、容器编排、ServiceMesh、Serverless、可观测性,当然不能遗漏了各种 Ops,DevOps、GitOps、AIOps、MLOps 等等。这些概念其实全部围绕着构建大规模分布式基础架构的几个核心要素:稳定(不出任何问题)、效率(快速响应市场需求)、成本(充分有效的利用资源)。

近几年来,云基础架构发生了翻天覆地的变化和革新,这也对如何构建上层应用产生重大的影响,分析上面这些激动人心的技术变革以及讨论如何为业务赋能之前,我们先思考引发这一波技术浪潮的核心驱动力是什么?

软件在吞噬世界

互联网投资人 Mark Andreessen 曾发表过一篇文章《Software is Eating The World》,文章内容主要阐述了软件如何影响各个行业。援引原文部分内容:

我们处于戏剧性和广泛的技术和经济转变的中间,软件公司准备接管大量的经济。 ... 十年前,当我在创办的 Netscape 公司时,大概只有 500 万人使用宽带互联网,而现在有超过 20 亿人使用宽带互联网。在接下来的 10 年里,我预计全球至少有 50 亿人拥有智能手机,每个人每天都可以随时随地使用这种手机充分利用互联网。 ...

文中列出了被重塑的产业,具体有:最大的书店 Amazon、最多人订阅的 Video service Netflix、最大的音乐公司 iTunes、Spotify and Pandora 等、成长最快的娱乐领域 videogame、最好的电影制片厂 Pixar、最大的行销平台 Google、Groupon、Facebook 等、成长最快的电信公司 Skype 、成长最快招聘公司 LinkedIn。

文章发表于 2011 年,2023 年再来回顾,互联网冲击已经无所不在,感触更加深刻。互联网俨然已成为国民经济的高速公路,部分软件成为像水、电、媒一样的基础设施。如果这些基础设施崩溃或者故障,请思考对社会的影响。

移动互联网在加剧变化

作者展望互联网规模时,写道:“在接下来的 10 年里,我预计全球至少有 50 亿人拥有智能手机,每个人每天都可以随时随地使用手机充分利用互联网。”

现在,我们已经可以确认 Mark Andreessen 的预测很正确,移动互联网时代的用户规模已经开始向人口基数看齐,开始出现各类亿级 DAU 规模的移动应用。而移动互联网如此巨大的用户规模会对软件开发有什么影响?

图 Netflix按照规模和变更速度对软件企业划分的总结

在十年前乃至二十年前的互联网时代,大多数软件企业都位于图 1-8 左边的两个象限:规模或许有大有小,但是变更速度相对今天都不快。当企业发展壮大时,体现的也更多是在规模上,变更速度并不会发生质的变化。而今天的移动互联网时代,则都位于图 1-8 右边的两个象限:无论规模是大是小,变更速度都要求非常快。并且当企业逐步发展壮大,规模十倍百倍增长时,对变更速度的要求并不会降低,甚至会要求更快。

移动互联网时代,能够成长并发展起来的这些公司,他们的共同点是:

  • 快速变更,不断创新,随时调整
  • 提供持续可用的服务,应对各种可能的错误和中断
  • 弹性可扩展的系统,应对用户规模的快速增长
  • 提供新的用户体验,以移动为中心

这样的背景下,对软件开发有了更高的要求,软件开发的方式也不得不跟随时代而变化,首当其冲的就是如何解决规模越来越大同时变更越来越快的难题。

时代巨变,掀起技术浪潮

软件对各行各业的渗透和对世界的改变,以及移动互联网时代巨大的用户基数下快速变更和不断创新的需求对软件开发方式带来巨大的推动力,我们可以清晰地看到如此波澜壮阔的技术浪潮:

  • 软件正在改变世界
  • 移动互联网让这个变革影响到每一个人
  • 传统软件开发方式受到巨大的挑战
  • 因为云计算以及相关技术的普及,软件上云成为趋势
  • 技术的形态持续在演进

云计算的技术逐渐发展成为它本来该有的模样,以及与这样的云所匹配的软件架构,还有以及与这样的架构所匹配的开发流程与方法论。

沉淀底层的原理和方法论

视角到转回微观个体,作为技术人员,我们如何应对宏观的世界变化?

所幸,不管技术发展如何日新月异,其根本性变化并没有那么快。尝试理清它们脉络,总能找到若干贯穿其中的一些颠扑不破的底层原理、方法论,比如分布式系统演进方向是 CAP 定理的权衡选择,局限于时间与空间的法则。举个例子,Kubernetes 的网络方案,Cilium、Calico、Flannel、weave 表面五花八门,但它们的基本技术和底层原理总结下来基本没什么变化,只是把这些不同的计算机基本原理、方法重新组合起来,换种形式去解决因为业务变化带来的新问题。

所以,本书的宗旨是希望能说清楚这些问题的本质,解释清楚整个服务架构的发展历程,走过了哪些弯路,以至于今天使用了哪些技术的缘由,讨论它们背后遵循的不变的原则、知晓这些技术做的取舍、探索它们的设计选择。

善于思考总结的人总会从历史的进程中得到相关的规律,所以,过时的不是基础的技术原理和方法,而是人的思考能力以及没有跟上节奏的对技术的认知

本书适合哪些读者

本书主要针对软件工程师、软件架构师以及技术负责人等,特别是那些需要对系统架构做权衡的人,譬如需要选择一些工具去解决某个领域的特定问题。退一步,如果你不需要做这些决定,本书也可以帮助你更好地理解这些技术的优缺点。

阅读本书,最好了解一些请求/响应型(Web)系统原理,有一些后端开发经验,熟悉一些常见的网络协议(譬如 TCP、HTTP ),这将会对阅读有很大帮助,至于你熟悉何种编程语言倒没有太大关系。

若以下条件适用你,可能会从本书收益:

勘误

由于作者的认知局限,难免产生各种各样的错误。

致谢

总字数:1922
Last Updated:
Contributors: isno