优府网首页
设为首页
点击进入优府网RSS订阅中心
当前位置:首页 >财经 > 正文

从Google服务的稳定性看技术架构和运维

发布者:纪军伟       分享 评论 投稿
SRE是SiteReliabilityEngineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。SRE不接触底层硬件如服务器。 Google数据中心的硬件层面的维护工作是交给technician来做的,technician一般不需要有大学学历。SWE是SoftWareEgineer的简称,即软件工…

    SRE是Site Reliability Engineer的简称,从名字可以看出Google的SRE不只是做Operation方面的工作,更多是保障整个Google服务的稳定性。SRE不接触底层硬件如服务器。

    

Google 数据中心的硬件层面的维护工作是交给technician来做的,technician一般不需要有大学学历。

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

SWE更新的程序代码(下文称为server),只有在SRE同意后才能上线发布。

1. SRE 职责

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

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一般优先级很高,离线任务优先级比较低,个人开发测试任务优先级最低。


(财经责编:常秀美 )
标签:jjw8610.hi@163.com 2015年08月28日 16:48   [查看原文]  
相关阅读
    请选择您浏览此新闻时的心情
    疑问
    疑问

    0
    难过
    难过

    0
    愤怒
    愤怒

    0
    喜欢
    喜欢

    0
    无聊
    无聊

    0
    鼓掌
    鼓掌

    0
    惊奇
    惊奇

    0
    骂人
    骂人

    0
    (521)
    (521)
    分享到: 投稿
    最新评论
    推荐信息
    资讯 国内 军事 体育 篮球 足球 娱乐 电影 电视 财经 经济 消费 科技 手机 电商 女性 情感 时尚
    文化 历史 文学 旅游 周边 出境 美食 家常 健康 房产 房价 调控 汽车 新车 品牌 教育 视频 博客
    关于优府网联系方式 网站地图服务条款
    版权所有:山西优府信息技术开发有限公司 Copyright 2008-2013 All rights reserved.
    增值电信业务经营许可证广播电视节目制作许可证固定刊物许可证网络文化经营许可证