第七章 Google的自动化系统的演进
一、自动化在 SRE 工作中的定位
对于SRE而言,自动化是一种力量倍增器,但不是万能药。当然,对力量的倍增并不能改变力量用在哪的准确性: 草率地进行自动化可能在解决问题的同时产生出其他问题。因此,虽然我们认为在大多数情况下以软件为基础的自动化是优于手动操作的,但是比这两个选择更好的方案是一个不需要这些的--系统设计一个自治的系统。或者换一种方式来看,自动化的价值不仅来源于它所做的事情,还包括对其的明智应用。
“手动操作” 和 “软件自动化” 均不是最优解,“自治系统”才是最终目标。
二、自动化的价值
1. 一致性:解决重复性的琐事
早期的系统管理员一般负责运维一系列的物理机或软件,并且非常习惯于在履行职责的过程中手动执行各种操作。这种手动执行任务的方式对于整个组织和实际执行的人都不友好。当手动执行数百次动作时,不可能保证每次都用同样的方式进行: 没有人能像机器一样永远保持一致。这种不可避免的不一致性会导致错误、疏漏、数据质量的问题和可靠性问题。所以在这个范畴内,一致性地执行范围明确、步骤已知的程序--是自动化的首要价值。(计划任务、本地运维)
2. 平台性:从 “单一工具” 升级为 “可扩展的能力载体”
自动化不仅仅提供一致性。通过正确地设计和实现,自动化的系统可以提供一个可以扩展的、广泛适用的,甚至可能带来额外收益的平台。平台可能能比人类更持续或者更频繁地运行任务,甚至完成一些对于人类而言并不方便执行的任务。(自动化运维平台)
3. 修复速度更快:缩短故障影响时间
(MySQL、Redis自动主从切换、故障转移)
4. 行动速度更快:支撑业务快速迭代
(自动化部署发布、自动运维拉起进程)
5. 节省时间:释放 SRE 的 “创造性精力”
(自动扩缩容、自动化中间件部署)
自动化将 SRE 从 “手动扩缩容、中间件部署” 等重复工作中解放,从而有更多的精力去做更有价值的事情(如设计更可靠的架构、优化系统性能)。
三、自动化的演进遵循以下阶段
1)没有自动化:手动将数据库主进程在多个位置之间转移。
2)外部维护的系统特定的自动化系统:SRE在他或她的主目录中保存了一份故障转移脚本。
3)外部维护的通用的自动化系统:SRE将数据库支持添加到了每个人都在使用的“通用故障转移”脚本中。
4)内部维护的系统特定的自动化:数据库自己发布故障转移脚本。
5)不需要任何自动化的系统:数据库注意到问题发生,在无须人工干预的情况下进行故障转移。
四、自动化的终极目标
1. 自动化是“力量倍增器”,但非“万能药”
自动化能将SRE从重复劳动中解放,大幅提升效率与稳定性,这是其“力量倍增”的核心价值。但若为了自动化而自动化,缺乏对场景的精准判断(比如没理清问题本质就盲目套用自动化逻辑),反而会制造新隐患风险。所以在推进自动化前必须先做“价值与准确性判断”——明确自动化要解决的核心问题,判断其是否能更高效、准确地达成目标,而非盲目追求“无人干预”的形式。
2. 从“软件自动化”到“系统自治”
Google 的自治系统并非 “后期加自动化脚本”,而是在系统设计初期就融入 “运维思维”。从手动到程序自动,从基础自动化到系统自治,反映出SRE的追求不止于“工具优化”,更在于“系统本质的升级”。这启示我们:架构设计阶段就要为系统的“自主性”“自愈性”进行考量,实现从“被动解决问题”到“主动预防问题”的思维升级。就好比系统的降级(账户降级)、熔断、(SG)限流、重试等系统设计中的自动化处理。
3. 自动化的核心是“人的判断力”
自动化工具再强大,也需要人判断“何时用、怎么用”。SRE不仅要懂技术、会搭建自动化系统,更要具备“系统思维”与“判断力”。理解业务场景、系统特性,才能让自动化真正成为“助力”而非“鸡肋”。
读书感悟:
读完这一章,更多的体会到不能将 “自动化” 视为简单的 “技术工具集合”,而是理解为 “与业务共成长的运维体系”。Google 的自动化演进之路也启示我们:自动化不是一步到位的 “终点”,而是随业务规模、技术能力逐步迭代的 “过程”—— 从解决痛点的自动化脚本,到保障稳定的流程自动化,再到预测风险的AI智能自动化,每一步都紧扣 “降本、提效、稳服务” 的核心目标。未来在工作中,我们要遵循从 “人力替系统做事”,到 “工具替系统做事”,最终到 “系统自己做事” 的过程,让系统实现 “自治”,彻底摆脱对外部人力和自动化工具的依赖,真正实现无人干预的自动化运维体系,让系统具备“自治能力”,从而更高效地支撑业务长期稳定发展。