SRE-Google运维解密-第七章Google的自动化系统的演进
前言
本章是我读这本书以来最具挑战的一章,但也因此内容非常引人入胜。它讲述了Google随着规模扩大,从手动操作维护系统逐步演变为自动化系统,最终发展为自治系统的过程。
除了“黑科技”,剩下的就是自动化与机械化了。
对于SRE而言,自动化是一个力量倍增器,但不是万能药。
自动化的价值 💡
自动化的价值主要体现在以下几点:
一致性 🤖
随着系统规模的扩大,工程师们不得不进行一些机械性、重复性的操作来履行职责。然而,手动执行数百次操作时,很难保证每次都一致,导致错误、疏漏和数据质量问题,影响系统的可靠性并浪费时间。因此,需要自动化来确保一致性,确保每次执行范围明确、步骤已知的程序。这是一致性自动化的首要价值。
平台性 🏗️
自动化系统可以为工程师提供一个可扩展、广泛适用的平台,并可能带来额外收益。通过正确的设计和实现,自动化系统能够大规模应用,从而降低成本、提高效率。平台系统还可以实现集中修复错误,一旦在代码中修复某个错误,所有相关系统都会受益,减少了重复发生相同错误的可能性,从而提高系统的整体稳定性。此外,自动化平台可以持续运行并暴露自身的性能指标,减轻人类的工作负担。
更快的修复速度 🚑
自动化系统能够迅速解决常见故障,无需人工干预,这大大加快了故障修复速度,减少了工作量。书中提到一个指标——MTTR(平均修复时间),自动化系统的优势在于能够在问题发生的瞬间立刻采取行动,降低MTTR,使得工程师能够将更多精力投入到其他更有价值的任务中。对于大规模生产系统,自动化有效减少了人工干预,降低了运营成本。
更快的行动速度 ⚡
自动化系统的反应速度远超人类,尤其是在某些情况下,比如流量调整或故障转移时,自动化系统能够立即采取行动。而人类操作员则需要更多时间进行反应。然而,自动化也存在风险,在某些情况下可能会使问题加剧,因此需要明确自动化程序的适用范围,通过精心设计,使其在特定场景中发挥最佳作用。
节省时间 ⏳
自动化通常被认为是一种节省时间的手段,虽然在短期内这种优势可能不明显,因为开发自动化系统需要投入大量时间和精力。但从长远来看,自动化将任务执行从特定的人手中解放出来,不再需要特定人员来手动操作,大幅提高了效率和灵活性。如果没有自动化,系统将耗费大量的人工精力,最终导致效率低下。
自动化对Google SRE的价值 🌍
Google提供的产品和服务覆盖全球,其规模巨大,不可能依靠效率低下的手动管理方式。因此,Google需要自动化来确保产品和服务的正常运行。一致性、快速性和可靠性是自动化带来的三大优势。
自动化系统的开发:Google在自动化管理系统上投入了大量时间和精力。他们不仅实现了系统操作的自动化,还自动化了系统管理本身,使得在大规模生产环境中的系统管理更加高效。
对技术栈的控制:Google的SRE团队可以完全控制技术栈,从底层硬件到应用层。这使他们能够更轻松地在生产环境中进行管理和维护。
平台化方法:Google不仅致力于逐一自动化系统组件,还致力于创建平台。这种平台化方法使系统在未来更易于扩展和管理。
灵活性和现实情况:尽管Google倾向于全面自动化,但并不是所有系统一开始就设计为可自动化的。一些系统从快速原型开始,可能并未打算长期运行或全面自动化。因此,Google会根据实际情况进行调整。
自动化的应用案例 📊
自动化是一种操作其他软件或系统的“元软件”。本节强调了自动化在运维中的重要性,尤其是在Google这样的大型公司中。自动化不仅节省了时间,还提高了系统的一致性、快速性和可靠性。同时也指出了自动化系统在设计和实施过程中可能面临的挑战,展示了手动化-自动化-自治系统的演变过程。
一个有趣的案例是自治系统Borg,它类似于现在的Kubernetes(k8s),后续可以深入讨论。
可靠性是最基本的功能 🔑
自动化提升了系统的效率和可靠性,但也可能导致管理员逐渐失去对系统的直接控制,特别是在自动化系统本身出现故障时,管理员可能因为缺乏实践经验而无法快速应对。此外,自动化系统的错误可能导致更大规模的影响。然而,对于大规模服务,自动化和自治性仍然是必要的,因为它们能够提高系统的可靠性和弹性。
小结 📜
Google的SRE工程师提出了他们对自动化的建议:
早期执行自动化:自动化应在早期阶段进行,并不限于大规模系统。设计阶段应通过解耦子系统、引入API、减少副作用等措施,使系统更具弹性。
理解大规模故障的风险:自动化系统需要经过充分测试,加入限制措施(例如减慢执行速率以避免错误扩散),并确保系统操作的幂等性。
做好容量规划和备份:确保问题的影响被控制在最小范围内。
自动化是力量倍增器,但使用时需谨慎,理解其局限和风险,确保在适当场景中发挥最大价值。🤖✨