`

SRE之道:创造软件系统来维护系统运行

阅读更多

引言:本文作者Ben Treynor Sloss,Google 运维团队的高级副总裁,SRE 名称的发明者,在这里提供了他对SRE 的定义。 
本文选自《SRE:Google运维解密》。

  大家都知道, 计算机软件系统离开人通常是无法自主运行的。那么,究竟应该如何去运维一个日趋复杂的大型分布式计算系统呢?雇佣系统管理员(sysadmin)运维复杂的计算机系统,是行业内一直以来的普遍做法。而Google 的解决之道是——SRE。 
  SRE 团队通过雇佣软件工程师,创造软件系统来维护系统运行以替代传统模型中的人工操作。 
  SRE 究竟是如何在Google 起源的呢? 其实我的答案非常简单:SRE 就是让软件工程师来设计一个新型运维团队的结果。当我在2003 年加入Google 的时候,我的任务就是领导一个由7 名软件工程师组成的“生产环境维护组”。当时,我的整个职业生涯都专注于软件工程,所以很自然,我按照自己最习惯的工作方式和管理方式来组建了这个团队。 
  时过境迁,当年的7 人团队已经成长为公司内部1000 余人的SRE 团队,但是SRE 团队的指导理念和工作方式还是基本保持了我最初的想法。 
  SRE 方法论中的主要模块,就是SRE 团队的构成。每个SRE 团队里基本上有两类工程师。 
  第一类,团队中 50%~60% 是标准的软件工程师,具体来讲,就是那些能够正常通过Google 软件工程师招聘流程的人。第二类,其他40%~50% 则是一些基本满足Google软件工程师标准(具备85%~99% 所要求的技能),但是同时具有一定程度的其他技术能力的工程师。 目前来看, UNIX 系统内部细节和1~3 层网络知识是Google 最看重的两类额外的技术能力。 
  除此之外, 所有的SRE 团队成员都必须非常愿意、也非常相信用软件工程方法可以解决复杂的运维问题。Google 一直密切关注这两类候选人在招聘通过之后在SRE 团队中的表现,但是到目前为止还没有发现他们在工作上和成绩上的显著差异。事实上,由于两类工程师技术背景互补,SRE 团队经常能够寻找到全新的、高效的解决问题的方法。 
按照这个标准来招聘和管理SRE 团队,我们很快发现SRE 团队成员具有如下特点: 
  (a) 对重复性、手工性的操作有天然的排斥感。 
  (b) 有足够的技术能力快速开发出软件系统以替代手工操作。 
  同时,SRE 团队和产品研发部门在学术和工作背景上非常相似。因此,从本质上来说,SRE 就是在用软件工程的思维和方法论完成以前由系统管理员团队手动完成的任务。这些SRE 倾向于通过设计、构建自动化工具来取代人工操作。 
  SRE 模型成功的关键在于对工程的关注。如果没有持续的、工程化的解决方案,运维的压力就会不断增加,团队也就需要更多的人来完成工作。传统的Ops 团队的大小基本与所服务的产品负载呈线性同步增长。如果一个产品非常成功,用户流量越来越大,就需要更多的团队成员来重复进行同样的事情。 
  为了避免这一点,负责运维这个服务的团队必须有足够的时间编程,否则他们就会被运维工作所淹没。因此,Google 为整个SRE 团队所做的所有传统运维工作设立了一个50% 的上限值。传统运维工作包括:工单处理、手工操作等。设立这样一个上限值确保了SRE 团队有足够的时间改进所维护的服务,将其变得更稳定和更易于维护。这个上限值并不是目标值。随着时间推移,SRE 团队应该倾向于将基本的运维工作全部消除,全力投入在研发任务上。因为整个系统应该可以自主运行,可以自动修复问题。我们的终极目标是推动整个系统趋向于无人化运行,而不仅仅是自动化某些人工流程。当然,在实际运行中,服务规模的不断扩张和新功能的上线已经让SRE 够忙了! 
  Google 的经验法则是,SRE 团队必须将50% 的精力花在真实的开发工作上。那么我们是如何确保每个团队都是这样做的呢?首先,我们必须不断地度量每个团队的工作时间分配。依靠这个数据,SRE 管理层会对在开发工作上投入时间不够的团队进行调整。通常,管理层会要求该团队将一些常见的运维工作交还给产品研发部门操作,或者从产品研发部门抽调人力参与团队轮值值班工作。此外,还可以停止该SRE 团队的一切新增运维工作。只有管理层主动维护每个SRE 团队的工作平衡,我们才能保障他们有足够的时间和精力去进行真正有创造性的、自主的研发工作,同时,这也保障了SRE 团队有足够的运维经验,从而让他们设计出切实解决问题的系统。 
  我们发现 Google SRE 模型在运维大规模复杂系统时有很多优势。由于SRE 在调整Google 系统的过程中常常直接参与开发、修改代码,SRE 文化在公司内部基本代表了一种快速、创新、拥抱变化的文化。实践证明,SRE 团队运行、维护、改进一个复杂系统所需要的成员数量与系统部署规模呈非线性增长。而运维同样的系统,用传统的系统管理员模型维护则需要更多数量的人。最后,SRE 模型不仅消除了传统模型中研发团队和运维团队的冲突焦点,反而促进了整个产品部门水平的整体提高。因为SRE 团队和研发团队之间的成员可以自由流动,整个产品部门的人员都有机会学习和参与大规模运维部署活动,从中获得平时难以获得的宝贵知识。普通的开发人员有多少机会能将自己的程序同时跑在100 万个CPU 的分布式系统上呢? 
  虽然SRE 模型带来了一些优势,但也存在一些问题。Google 面对的一个持久性的难题就是如何招聘合适的SRE。首先SRE 要和产品研发部门招聘传统的软件开发工程师竞争。 
  其次,由于SRE 要求同时具备多项技能,市场上具有相关从业背景和经验的人就更少了。由于SRE 模型也比较新,行业内关于如何建立和维护SRE 团队的相关信息并不多。最后,SRE 团队建立之后,由于SRE 模型中为了提高可靠性需要采取一些与常规做法违背的做法,所以需要强有力的管理层支持才能推行下去。例如:由于一个季度内的错误预算耗尽而停止发布新功能的决定,可能需要管理层的支持才能让产品研发部门重视起来。 
  本文选自《SRE:Google运维解密》,点此链接可在博文视点官网查看此书。 
                      图片描述

  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                 图片描述

分享到:
评论

相关推荐

    base_library.zip

    本文将深入解析“base_library.zip”中包含的一些关键Python核心模块,这些模块是Python运行的基础,包括`codecs`、`locale`、`_collections_abc`、`functools`、`enum`、`sre_parse`、`traceback`、`weakref`、`...

    全国计算机等级考试二级openGauss数据库程序设计样题解析

    主要内容涵盖单选题和操作题两大部分。单选题涉及openGauss数据库的基本概念、数据模型、SQL语法、事务管理和用户权限等方面的知识点。操作题则围绕一个名为bookdb的图书购买信息数据库展开,具体任务包括插入图书信息、更新顾客信息、删除购买记录、查询特定图书信息以及创建视图、存储过程和触发器等实际操作。每道题目均附带详细的解题步骤和最终答案。

    新建 Microsoft Word 文档 (9).docx

    新建 Microsoft Word 文档 (9).docx

    Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z

    Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z

    三菱PLC FX5U控制四轴伺服系统:硬件配置、参数设置及运动控制详解

    内容概要:本文详细介绍了使用三菱PLC FX5U控制四轴伺服系统的全过程,涵盖硬件配置、电气接线、参数设置以及运动控制逻辑。硬件方面,选用三菱FX5U-64MT作为主控制器,搭配四个MR-JE-20A伺服驱动器和其他必要组件。软件部分则深入探讨了轴参数初始化、原点回归、多轴联动、HMI界面设计及报警处理等关键技术环节。特别针对旋转轴的特殊处理进行了详细说明,如双速原点回归、绝对定位指令的应用等。此外,还提供了调试经验和优化技巧,确保系统的高精度和平稳运行。 适合人群:从事自动化控制系统设计、调试的技术人员,尤其是对三菱PLC和伺服系统有一定了解的研发人员。 使用场景及目标:适用于工业自动化领域的四轴伺服控制系统开发,旨在帮助工程师掌握从硬件选型到软件编程的一整套解决方案,提高项目的成功率和技术水平。 其他说明:文中附有多份参考资料,包括完整的程序文件、界面工程、CAD接线图和伺服参数清单,便于读者进行实际操作和验证。

    分阶段学习:先掌握基础,再深入细分领域 理论与实践结合:学完算法后立刻用代码实现 保持持续学习:AI技术迭代快,需跟踪最新进展

    分阶段学习:先掌握基础,再深入细分领域。 理论与实践结合:学完算法后立刻用代码实现。 保持持续学习:AI技术迭代快,需跟踪最新进展。

    电子硬件课程设计-Word文档

    电子硬件课程设计

    智慧农贸信息化管理平台.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

    脚本-压测相关-zyx编写

    脚本-压测相关-zyx编写

    jspm机房预约系统lw+ppt.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

    app.mobileconfig

    app.mobileconfig

    基于MotorCAD的2极12槽永磁直流有刷电机设计与优化教程

    内容概要:本文详细介绍了使用MotorCAD进行2极12槽永磁直流有刷电机的设计与优化方法。首先,通过Python脚本设置电机的基本参数,如外径、轴向长度、额定转速等。接着,深入探讨了磁钢选型、绕组设置、电磁仿真、热分析等多个关键技术环节。针对常见的设计难题,如齿槽转矩、磁钢充磁方向、绕组跨距等提供了具体的解决方案。同时,还分享了一些提高仿真精度和优化性能的实用技巧,如参数扫描、FEA计算、热管理等。最后,通过实测数据分析验证了设计方案的有效性。 适合人群:电机设计工程师、高校相关专业师生、对电机设计感兴趣的开发者。 使用场景及目标:适用于需要精确设计和优化小型永磁直流有刷电机的场合,帮助用户掌握MotorCAD的具体应用,提高设计效率和产品质量。 其他说明:文中提供的Python和VB脚本示例有助于自动化参数设置和批量处理任务,减少重复劳动。此外,还强调了在设计过程中需要注意的关键技术和常见陷阱,确保设计方案的可行性和可靠性。

    三相逆变器基于PI闭环与解耦控制的MATLAB仿真实现

    内容概要:本文详细介绍了三相逆变器在MATLAB/Simulink环境下的PI闭环控制及解耦控制的实现方法。首先,通过坐标变换将三相电流从静止坐标系转换到旋转坐标系,确保功率守恒并实时更新转子位置角。接着,实现了带有抗饱和处理的PI控制器,防止积分风-up现象。然后,针对d轴和q轴之间的耦合问题,引入了解耦控制,通过低通滤波和交叉耦合项来稳定系统。此外,还讨论了PWM生成模块的死区时间和仿真结果的验证方法,强调了参数调试的重要性和具体策略。 适合人群:电力电子工程师、自动化控制领域的研究人员以及对三相逆变器控制感兴趣的高校师生。 使用场景及目标:适用于需要深入了解三相逆变器控制原理和技术实现的研究项目或工程应用。主要目标是掌握PI控制器的设计、解耦控制的应用及其在MATLAB/Simulink中的仿真实现。 其他说明:文中提供了详细的代码示例和调试技巧,帮助读者更好地理解和实践相关理论。同时提醒读者,仿真成功并不代表实际硬件运行无误,建议在实验过程中准备必要的保护措施。

    58面经面试过程和题目.txt

    58面经面试过程和题目.txt

    OceanBase OBCP 实验指导手册V1.3

    OceanBase OBCP 实验指导手册V1.3

    ABB喷涂机器人IRC5P与PLC Profinet通讯配置及程序号启动详解

    内容概要:本文详细介绍了ABB喷涂机器人IRC5P与PLC通过Profinet通讯进行程序号启动的具体步骤和注意事项。主要内容涵盖Profinet通讯的基本配置,包括设备名称、IP地址设置,RAPID代码编写,任务声明,信号映射,以及调试技巧。文中还分享了许多实际调试中的经验和常见错误,如大小写敏感、IP地址分配、程序号有效性和信号防抖处理等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是负责机器人与PLC通讯配置的技术人员。 使用场景及目标:帮助技术人员正确配置ABB喷涂机器人IRC5P与PLC之间的Profinet通讯,确保程序号能够顺利启动,避免常见的配置错误和调试难题。 其他说明:文章强调了硬件和软件配置相结合的重要性,并提供了详细的代码示例和调试建议,有助于提高系统的稳定性和可靠性。

    电子硬件课后习题题目及要求.docx

    电子硬件课后习题题目及要求.docx

    亲测开源好用的红盟云发卡源码对接支付宝等支持一件搭建

    亲测开源好用的红盟云发卡源码对接支付宝等支持一件搭建,方便建立自己的发卡平台,源码全部开源无加密,可方便而开使用。 测试环境:php7.2+mysql+宝塔面板 安装教程: ①设置public运行目录 ②设置thinkphp伪静态 ③访问域名填写数据库信息根据提示安装

    Delphi 12.3控件之MiTeC-System-Information-Component-Suite-15.1.0-Full-Source.7z

    Delphi 12.3控件之MiTeC_System_Information_Component_Suite_15.1.0_Full_Source.7z

    Delphi 12.3控件之StyleControls 5.80.7z

    Delphi 12.3控件之StyleControls 5.80.7z

Global site tag (gtag.js) - Google Analytics