august 发表于 2020-12-5 23:39:46

谷歌自动化系统的演进过程介绍

"黑科技"之外,就只剩自动化和机械化了。—Federico Garcia Lorca(1898-1936),西班牙诗人和剧作家
对于SRE而言,自动化是一种力量倍增器,但不是万能药。当然,对力量的倍增并不能改变力量用在哪的准确性∶草率地进行自动化可能在解决问题的同时产生出其他问题。因此,虽然我们认为在大多数情况下以软件为基础的自动化是优于手动操作的,但是比这两个选择更好的方案是一个不需要这些的系统设计——一个自治的系统。或者换一种方式来看,自动化的价值不仅来源于它所做的事情,还包括对其的明智应用。我们将讨论自动化系统的价值,以及 SRE 对自动化系统的态度的演进历史。
自动化的价值究竟是什么?
一致性在应对系统规模的增加之外,还有许多其他的理由来使用自动化。以大学计算系统为例,许多系统工程师都是从这里开始他们的职业生涯的。具有该背景的系统管理员一般负责运维一系列的物理机或软件,并且非常习惯于在履行职责的过程中手动执行各种操作。一个常见的例子是创建用户账户;其他例子包括单纯的操作职责,如确保备份正确进行、进行故障迁移和一些小的数据修改,例如修改上游DNS服务器的resolcon/,修改DNS服务器的区域数据,以及类似的操作。然而,最终看来,这种手动执行任务的方式对于整个组织和实际执行的人都不好。首先,任何一个人或者一群人执行数百次动作时,不可能保证每次都用同样的方式进行∶没有几个人能像机器一样永远保持一致。这种不可避免的不一致性会导致错误、疏漏、数据质量的问题和可靠性问题。在这个范畴内——一致性地执行范围明确、步骤已知的程序———是自动化的首要价值。
平台性自动化不仅仅提供一致性。通过正确地设计和实现,自动化的系统可以提供一个可以扩展的、广泛适用的,甚至可能带来额外收益的平台。(相对来看,不进行自动化既不符合成本收益,也无法扩展,就像是在系统运维过程中额外交付的税务。)
一个平台同时也将错误集中化了。也就是说,在代码中修复某个错误可以保证该错误被永远修复。一个平台更容易地被扩展,从而执行额外的任务,这比教授人类要容易得多。(有的时候教育人类意识到必须进行某种操作很难)。取决于任务的性质,平台可能能比人类更持续或者更频繁地运行任务,甚至完成一些对于人类而言并不方便执行的任务。此外,一个平台可以 自身的性能指标,也可以帮助你发现流程中以前所不知道的细节,这些细节在平台范围内更容易衡量。
修复速度更快采用自动化系统解决系统中的常见故障,可以带来额外的好处(这常常是 SRE 构建自动化系统的原因)。如果自动化能够始终成功运行,那么就可以降低一些常见故障的平均修复时间(MTTR)。随后,用户可以把时间花在其他任务上,从而提高开发速度。因为用户不再需要花费时间来预防问题发生或者进行(更常见的)事后清理。
在行业内普遍认同的是,在产品生命周期中一个问题越晚被发现,修复代价越高;参见第 17章。一般来说,解决实际生产中出现的问题是最昂贵的,无论是时间还是金钱方面,这意味着,构建一个在问题发生之后马上应对的自动化系统,对于降低系统的总成本非常有利,前提是该系统足够大。
行动速度更快在基础设施中,SRE自动化系统应用广泛。这是因为人类通常不能像机器一样快速反应。例如,故障转移或流量调整对于一个特定的应用程序来说可以被很好地定义,要求一个人间歇性地手动按一个叫"允许系统继续运行"的按钮是没有任何意义的。(确实,有时自动化程序可以最终使一个坏的情况变得更糟,但是这恰恰是将这种程序的范围明确定义的原因。)Google拥有大量的自动化系统;在很多情况下,没有自动化参与我们所支持的服务,这些服务就不能长久运行,因为它们很久之前就超越了人工操作所能管理的门槛。
节省时间最后,节省时间是一个经常被引用的使用自动化的理由。虽然大家经常选择这个依据来支持自动化,但是在很多情况下这种优势不能立即计算出来。工程师对于一个特定的自动化或代码是否值得编写而摇摆不定,不停地比较写该代码所需要花费的精力与不需要手动完成任务所节省的精力。准3这里很容易忽略的一个事实是,一旦你用自动化封装了某个任务,任何人都可以执行它们。因此,时间的节省适用于该自动化适用的所有人。将某个操作与具体操作的人解耦合是很有效的。
Joseph Bironas,负责 Google 数据中心集群上线流程的SRE,有力地提出∶"如果我们持续产生不可自动化的流程和解决方案,我们就继续需要人来进行系统维护。如果我们要雇佣人来做这项工作,就像是在用人类的鲜血、汗水和眼泪养活机器。这就像是一个没有特效但是充满了愤怒的系统管理员的 Matrix 世界。"
页: [1]
查看完整版本: 谷歌自动化系统的演进过程介绍