前言
我的职业生涯始于图像处理。我曾在休斯飞机公司(Hughes Aircraft)的导弹系统部工作,研究红外图像处理,处理边缘检测和帧与帧之间的关联。(这些功能在如今的手机应用上无处不见,这都要归功于20世纪80年代的研究!)
我们在图像处理中常用的计算之一是标准差。我从来不羞怯于提出问题,而我早年经常问的一个问题就是关于标准差的。我的一个同事总是会写下以下内容:
我知道这是标准差的公式。真见鬼,三个月过去了,这个公式我大概已经写了六遍。我真正想问的是:“在这种情况下,标准差究竟意味着什么?”实际上,标准差是用来定义什么是“正常的”,这样我们可以寻找离群值。如果我正在计算标准差,然后发现了超出正常值范围的情况,那么是否表示我的传感器可能出现了故障,并且我需要舍弃这一帧图像,还是表示它暴露了潜在敌人的行动?
所有这些与云原生有什么关系?没有。但这一切与模式有关。正如你所见,我虽然知道这个模式(标准差计算),但是由于当时缺乏经验,所以不知道何时以及为什么要使用它。
在本书中,我将向你介绍云原生应用程序的多种架构模式,是的,我将向你展示许多的“公式”,但是为了说明何时及为何使用这些模式,我会在介绍上下文环境上花费更多的时间。实际上,模式通常并不那么困难(例如,第9章介绍的请求重试模式很容易实现),困难的是决定何时应用某个模式,以及如何正确地应用该模式。在应用这些模式时,你需要了解很多的上下文环境,并且坦率地说,这些环境有可能很复杂。
那么上下文环境是什么呢?从根本上来说,它是一个分布式系统。当我三十多年前开始工作时,并不认识很多从事分布式系统工作的人,在大学也没有学过分布式系统的课程。没错,虽然人们在这个领域中工作,但说实话,这是一个非常小的领域。
如今,绝大多数软件都是分布式系统。软件的某些部分在浏览器中运行,而另一些部分在服务器上运行,或者我敢说,在一大堆服务器上运行。这些服务器可能在你公司的数据中心运行,也可能在俄勒冈州普莱恩维尔的一个数据中心运行,或者同时在两地运行。所有这些都是通过网络(可能是互联网)进行通信的,而且软件的数据也很可能是分布式的。简单地说,云原生软件是一个分布式的系统。此外,事情在不断变化—服务器正在不断下架,网络经常中断(即便是非常短暂的中断),存储设备可能会在没有任何警告的情况下崩溃—即使是这样,我们依然希望软件能够继续正常运行。这是一个非常具有挑战性的环境。
但是这完全是可控制的!本书的目的就是帮助你理解这种上下文环境,并为你提供一些工具,让你成为一名精通云原生的架构师和开发人员。
我从来没有像现在这样感受到如此剧烈的脑力激荡。这在很大程度上是因为技术领域正在发生重大变化,而云原生就是这个变化的核心。我绝对热爱我所从事的工作,我希望每个人,尤其是你,也能像我一样喜欢编写软件。这就是我编写这本书的原因:我想与你分享整个行业正在面临的那些疯狂而又酷炫的问题,帮助你踏上解决这些问题的旅程。我很荣幸有机会与你一起踏上云原生之旅,哪怕是在其中扮演一个小小的配角。