高逼格运维指南:Google SRE是如何工做的?

 

引言数据库

SRE是Site Reliability Engineer的简称,从名字能够看出Google的SRE不仅是作Operation方面的工做,更可能是保障整个Google服务的稳定性。SRE不接触底层硬件如服务器,这也是高逼格的由来:服务器

Google 数据中心的硬件层面的维护工做是交给technician来作的,technician通常不须要有大学学历。多线程

SWE是SoftWare Egineer的简称,即软件工程师(负责软件服务的开发、测试、发布)。架构

SWE更新的程序代码(下文称为server),只有在SRE赞成后才能上线发布。所以,SRE在Google工程师团队中地位很是高!咱们下面将分别介绍。运维

备注:我本人是SWE,本文是从SWE的角度看SRE,个人老朋友@孙宇聪同窗是原Google SRE,他会从另外一个角度来阐述此主题,敬请期待哦。分布式

1. SRE 职责工具

SRE在Google不负责某个服务的上线、部署,SRE主要是保障服务的可靠性和性能,同时负责数据中心资源分配,为重要服务预留资源。oop

如上文所受,和SRE想对应的是SWE(软件开发工程师),负责具体的开发工做。性能

举个例子,我以前在Google的互联网广告部门,咱们team负责的server是收集用户数据用于广告精准投放,这个server的开发、测试、上线部署等工做,都是由SWE来完成。测试

SRE不负责server的具体实现,SRE主要负责在server出现宕机等紧急事故时,作出快速响应,尽快恢复server,减小服务掉线带来的损失。

备注:这里的server是指服务器端程序,而不是物理服务器。在Google,SWE和SRE都无权接触物理服务器。

2. SRE 要求

由于SRE的职责是保障服务的稳定和性能,因此在SRE接手某个server以前,对server的性能和稳定性都有必定的要求,好比server出现报警的次数不能超过必定的频率,server对CPU、内存的消耗不能超过预设的指标。

只有server彻底知足SRE的要求之后,SRE才会接手这个server:

当server出现问题时,SRE会先紧急修复,恢复服务,而后SRE会和SWE沟通,最终SWE来完全修复server的bug。

同时,对server的重大更新,SWE都要提早通知SRE,作好各类准备工做,才能发布新版server:

为了能让SRE能接手server,SWE要根据SRE的要求,对server作大量的调优。首先SRE会给出各类性能指标,好比,服务响应延迟、资源使用量等等,再者SRE会要求SWE给出一些server评测结果,诸如压力测试结果、端到端测试结果等等,同时,SRE也会帮助SWE作一些性能问题排查。

因此SRE在Google地位很高,SWE为了让server成功上线,都想法跟SRE保持好关系。

我举个具体的例子来讲明,在Google,SWE是如何跟SRE配合工做来上线server的。

咱们team对所负责的server进行了代码重构,重构以后,要通过SRE赞成,才可以上线重构后的server。

为此,咱们team的SWE要向SRE证实,重构后的server对资源的开销没有增长,即CPU、内存、硬盘、带宽消耗没有增长,重构后的server性能没有下降,即端到端服务响应延迟、QPS、对压力测试的响应等这些性能指标没有下降:

当时对server代码重构以后,server有个性能指标一直达不到SRE的要求。这个指标是contention,也就是多线程状况下,对竞争资源的等待延迟。重构server以后,contention这项指标变得很高,说明多线程状况下,对竞争资源的等待变长。

咱们排查好久找不到具体缘由,由于SWE没有在代码中显式使用不少mutex,而后请SRE出面帮忙。

SRE使用Google内部的图形化profiling工具,cpprof,帮咱们查找缘由。

找到两个方面的缘由:

tc_malloc在多线程状况下频繁请求内存,形成contention变高;

大量使用hash_map,hash_map没有预先分配足够内存空间,形成对底层tc_malloc调用过多。

3. SRE 工做内容

简而言之,Google的SRE不是作底层硬件维护,而是负责Google各类服务的性能和稳定性。换句话说,Google的SRE保证软件层面的性能和稳定性,包括软件基础构架和应用服务。

SRE须要对Google内部各类软件基础构架(Infrastructure)很是了解,并且SRE通常具备很强的排查问题、debug、快速恢复server的能力。

我列举一些常见的Google软件基础构架的例子:

Borg:分布式任务管理系统,

Borgmon:强大的监控报警系统;

BigTable:分布式Key/Value存储系统;

Google File System:分布式文件系统;

PubSub:分布式消息队列系统;

MapReduce:分布式大数据批处理系统;

F1:分布式数据库;

ECatcher:日志收集检索系统;

Stubby:Google的RPC实现;

Proto Buffer:数据序列化存储协议以及RPC协议;

Chubby:提供相似Zookeeper的服务。

Google还有更多的软件基础构架系统:Megastore、Spanner、Mustang等等,我没有用过,因此不熟悉。

4. 运维将来发展方向

我我的以为,在云计算时代,运维工程师会慢慢向Google的SRE这种角色发展,远离底层硬件,更多靠近软件基础架构层面,帮助企业客户打造强大的软件基础构架。

企业客户有了强大的软件基础构架之后,可以更好应对业务的复杂多变的需求,帮助企业客户快速发展业务。

另外我我的观点,为何Google的产品给人感受技术含量高?

并不见得是Google的SWE比其余Microsoft、LinkedIn、Facebook的工程师能力强多少,主要是由于Google的软件基础构架(详见上文)很是强大,有了很强大的基础构架,再作出强大的产品就很方便了。

Google内部各类软件基础构架,基本上知足了各类常见分布式功能需求,极大地方便了SWE作业务开发。

换句话说,在Google作开发,SWE基本上是专一业务逻辑,应用服务系统(server)的性能主要由底层软件基础构架来保证。

————我是分割线————

下面就是本次分享的互动环节整理:

问题1:SRE参与软件基础项目的开发吗?

SRE通常不作开发。好比Google的BigTable有专门的开发团队,也有专门的SRE团队保障BigTable server的性能和稳定性。

问题2:通常运维工具,或者监控,告警工具,哪一个团队开发?

SRE用的大型管理工具应该是专门的团队开发,好比Borgmon是Google的监控报警工具,很复杂,应该是专门的团队开发,SRE会大量使用Borgmon。

问题3:基础软件架构有能够参考的开源产品吗?

Google内部常见的软件基础构架都有开源对应的版本,好比Zookeeper对应Chubby,HDFS对应Google File System,HBase对应BigTable,Hadoop对应MapReduce,等等。

问题4:还有SRE会约束一些项目的性能指标,好比CPU和内存的使用阈值,这些值是从哪里得来的?或者说根据哪些规则来定制的?

SRE负责Google的数据中心资源分配,因此一些重要server的资源是SRE预留分配好的。对CPU、内存等资源的分配,SRE按照历史经验以及server的业务增加预期来制定。

此外Google数据中内心运行的任务有优先级,高优先级的任务会抢占低优先级任务的资源,重要的server通常优先级很高,离线任务优先级比较低,我的开发测试任务优先级最低。

相关文章
相关标签/搜索