在近期的DevOps Enterprise Summit伦敦大会上,Google客户可靠性工程师Stephen Thorne做演讲澄清了SRE(站点可靠性工程,Site Reliability Engineering)的概念,并指出为什么很多企业并不了解SRE的基本前提和优点的原因所在(此处可下载演讲幻灯pdf文件)。Thorne在一些企业中看到的主要误解,在于将SLO(服务级别目标,service level objectives)和SLA(服务级别协议,service level agreements)混为一谈。SLO侧重于早期的故障检测,而SLA通常用做已发生故障的经济补偿,它不强制错误预算(error budgets),也不会让SRE团队花费至少一半的精力去改进系统和工具,而是让人们继续疲于奔命,因此也称为在生产环境中“灭火”。
Thorne补充说,SLO是先期发现问题的基础,理想情况是先于客户感受到问题的影响。好的SLO应符合客户的输出(例如服务可用性、响应时间等),从而反映出一个系统(行为)是否满足用户的需求。系统监视资源的使用情况(例如CPU利用率、网络吞吐量等),但这些度量本身不应做为SLO。Thorne认为,“如果客户满意,那么就满足SLO”。Google的一些典型SLO包括:
另一方面,SLA通常在客户已对服务产生不满意时才发挥作用,因此SLA并不会主动提高系统的可靠性。此外,SLA可能会引发错误的行为。例如,如果同时面对一个两小时修复电子邮件问题的SLA和一个一天内修复生产系统严重问题的的SLA,按规程会导致首先处理一个(或多个)电子邮件问题。但是很显然,生产系统出现的问题应该得到优先处理。
Thorne警告说,仅定义SLO是不够的。错误预算策略是通过设置明晰的操作规则(而非货币补偿),在系统接近于SLO的阈值之前达成SLO。一旦系统无法满足用户的需求,SLO也可以最大限度减少运维和开发之间的对抗。Thorne指出,“错误预算是存在于完美可靠性与SLO之间的差距”。Google的典型错误预算政策是,一旦应用用尽其错误预算(例如,本月已超出43分钟的宕机时间预算),就禁止启动新功能;或者根据前期事故后分析(post-mortem analysis)所给出的更正操作,专门建立一个Sprint。
然而Thorne强调指出,一些适用于Google的做法并非适用于每个组织。“SRE需要SLO,结果是在可接受的失败水平与必要的成本和交付速度之间取得平衡”。准确的SLO和政策必须适用于特定的组织,而不是复制和粘贴Google的做法,并且应该是聚焦于不断改善客户体验,而不是设定一些可能适得其反的崇高目标或严厉惩罚。Thorne在演讲中给出了一个例子,一个组织在努力降低推荐系统的处理时间。原先用户平均在6小时后回访网站,才会看到这些推荐情况。一个适当的SLO将在6小时内处理所有建议,这意味着务可以省下三位解决响应时间慢“问题”的非全职工程师工作。
Thorne提出SRE的第三个关键问题,即SRE团队应能够平衡日常(通常是无计划的)运维和规划工作间的工作量,以降低人员的操劳(也称为“灭火”)。在Google,这意味着至少有50%的SRE是用于项目工作,包括尽早研判新系统的架构,发现其中的弹性反模式(resiliency anti-pattern),并避免此后更多的操劳;改进监控,自动执行重复的任务,或协调故障后纠正措施的实施。
Thorne进一步明确给出了一些实现SRE的反模式。例如,在并未率先让SRE原则和机制(SLO、错误预算政策和平衡工作负载)落地的情况下,仅是将运营团队重新命名为SRE团队,或仅是雇佣一些SRE工程师。
Thorne认为SRE的成功实施之路具有5个关键步骤:
Google在将自身的经验教训汇总为《SRE宝典——Google生产系统是如何运维的》一书之前,就已在企业内部开发并扩展SRE原则达数年之久。Throne提及,Google将于月末推出相应的《SRE工作手册》一书。
领取专属 10元无门槛券
私享最新 技术干货