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运维解密》,点此链接可在博文视点官网查看此书。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
SRE之道:创造软件系统来维护系统运行的更多相关文章
- 使用python+django+twistd 开发自己的操作和维护系统的一个
许多开源操作系统和维护系统,例nagios.zabbix.cati等等,但是,当他们得到的时间自己的个性化操作和维护需求,始终无力! 最近的一项研究python.因此,我们认为python+djang ...
- 用可道云kodexplorer在dedecms系统网站上秒建私人网盘
国内草根站长用的最多的一款建站源程序就是dedecms,通常是通过FTP或者服务器面板自带的文件管理器来上传下载的.FTP可视性.体验都相对差一点,且需要事先安装FTP软件,更换环境后的站点管理上有很 ...
- 操作系统篇-hello world(免系统运行程序)
|| 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.前言 今天起开始分享关于操作系统的相关知识,本人也是菜鸟一个,正处于学习阶段,这整个操作系统篇也是我边学习边总结的一些结果,希 ...
- linux 系统运行级别及修改[转]
Linux运行级别从0-6,共7个. 0:关机.不能将系统缺省运行级别设置为0,否则无法启动. 1:单用户模式,只允许root用户对系统进行维护. 2:多用户模式,但不能使用NFS(相当于Window ...
- aix 系统运行级别
运行级别 在操作系统上运行维护之前,或者修改系统运行级别之前,需检查各种不同的运行级别.运行级别是一个软件配置,只允许一组选定的进程存在. 识别系统运行级别 本节描述如何识别系统正运行在什么样的运行级 ...
- [Spark内核] 第35课:打通 Spark 系统运行内幕机制循环流程
本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是從后往前划分的,执行的时候是從前往后执行的,每 ...
- 打通 Spark 系统运行内幕机制循环流程
本课主题 打通 Spark 系统运行内幕机制循环流程 引言 通过 DAGScheduelr 面向整个 Job,然后划分成不同的 Stage,Stage 是从后往前划分的,执行的时候是從前往后执行的,每 ...
- Linux 系统运行着许多子系统和应用程序。您可以使用系统日志记录从启动时就收集有关运行中系统的数据。有时
概述 在本教程中,您将学习以下内容: 配置 syslog 守护程序 了解标准设施.优先级和操作 配置日志轮换 了解 rsyslog 和 syslog-ng 系统内部发生了什么 Linux 系统运行着许 ...
- 第14章 Linux启动管理(1)_系统运行级别
1. CentOS 6.x 启动管理 (1)系统运行级别 ①运行级别 运行级别 含义 0 关机 1 单用户模式,可以想象为Windows的安全模式,主要用于系统修复.(但不是Linux的安全模式) 2 ...
随机推荐
- Shell脚本小技巧收集
1.使用python快速搭建一个web服务器 访问端口8000 python -m SimpleHTTPServer 2.获取文件大小 stat -c %s $file stat --printf=' ...
- Linux时间转标准时间
[root@nhserver2 ~]# date -d '1970-1-1 0:0:0 GMT + 1394592071 seconds'Wed Mar 12 10:41:11 CST 2014
- Python字符串详解
字符串 作用: 名字,性别,国籍,地址等描述信息 定义: 在单引号.双引号.三引号内,由一串字符组成 优先掌握的操作: 按索引取值(正向取+反向取):只能取 切片(顾头不顾尾,步长) 长度len 成员 ...
- python简单分布式demo
A服务器是master,B服务器为worker, A服务器上执行taskManger.py # coding:utf-8 import random,time,Queue from multiproc ...
- [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈
觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...
- Java数据库设计14个技巧
Java数据库设计14个技巧 1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体.在特殊情况下,它们可能是一对 ...
- Java对正则表达式的支持(一)
Java对正则表达式的支持主要体现在String.Pattern.Matcher和Scanner类. 1.Pattern.Matcher 先看一个Pattern和Matcher类使用正则表达式的例子. ...
- 洛谷 [P3033] 牛的障碍
利用二分图匹配求最大独立集 本题的边一定平行于坐标轴,且同向的线段一定不重合,这是经典的二分图建图方法,本题要求的是最大不重合的线段数,那就是求二分图的最大独立集,最大独立集=总点数-最大匹配数. 本 ...
- BZOJ 1483: [HNOI2009]梦幻布丁 [链表启发式合并]
1483: [HNOI2009]梦幻布丁 题意:一个带颜色序列,一种颜色合并到另一种,询问有多少颜色段 一种颜色开一个链表,每次遍历小的合并到大的里,顺带维护答案 等等,合并方向有规定? 令col[x ...
- Flask-Moment----探索
前言: Flask-Moment在所有的flask扩展中算是相对简单的一个了,但是还是有很多需要理解的地方.那么今天就跟着笔者一起,来学习一下flask-moment在flask项目中的应用. 首先 ...