/blog /sre
转载, 原文地址 读《SRE:Google 运维解密》一点思考
Google 试从解决 Dev 和 Ops 之间的矛盾出发,雇佣软件工程师,创造软件系统来维护系统运行以替代传统运维模型中的人工操作。SRE 团队和产品研发部分在学术和工作背景上非常相似,从本质上将,SRE 就是在用软件工程的思维和方法论完成以前由系统管理员团队手动完成的任务。
SRE 在 Google 不负责某个服务的上线、部署,SRE 主要是保障服务的可靠性和性能,同时负责数据中资源分配,为重要服务预留资源,SRE 并不负责某个业务逻辑的具体编写,主要负责在服务出现宕机等紧急事故时,可以快速作出响应,尽快恢复服务,减少服务掉线而造成的损失。
一般来说,SRE 团队要承担以下几类职责:可用性改进、延迟优化、性能优化、效率优化、变更管理、监控、紧急事物处理以及容量规划与管理。
Tools Don’t create reliability. Humans do. But tools can help.
在减少资源消耗的同时,从可用性和性能层面,提升用户的体验。
Operations should NOT be a part of SRE missions. Operation is a way to understand production.
在书中对各个职责有较为清晰的说明,感兴趣的朋友去可以翻翻原文,这里就谈一下个人的体会。
语言和工程实现
深入理解开发语言(Java/Golang 等)
业务部门使用开发框架
并发、多线程和锁
资源模型理解:网络、内存、CPU
故障处理能力(分析瓶颈、熟悉相关工具、还原现场、提供方案)
常见业务设计方案,多种并发模型,以及相关 Scalable 设计
各类底层数据库和存储系统的特性和优化
问题定位工具
容量管理
Tracing 链路追踪
Metrics 度量工具
Logging 日志系统
运维架构能力
Linux 精通,理解 Linux 负载模型,资源模型
熟悉常规中间件(MySQL Nginx Redis Mongo ZooKeeper 等),能够调优
Linux 网络调优,网络 IO 模型以及在语言里面实现
资源编排系统(Mesos / Kubernetes)
理论
机器学习中相关理论和典型算法
熟悉分布式理论(Paxos / Raft / BigTable / MapReduce / Spanner 等),能够为场景决策合适方案
资源模型(比如 Queuing Theory、负载方案、雪崩问题)
资源编排系统(Mesos / Kubernetes)
SRE 工程师中大部分是标准的软件工程师,他们擅长使用系统工程的方法去解决基础系统中的问题,同时持续的、工程化的解决问题,使得运维的压力不会随着上层应用的增加而线性增加(通常 20 人的 SRE 团队,可以支持上千研发同学的应用开发)**。**同时 SRE 同学对 Unix 系统内部细节、1~3 层网络比较了解,可以同研发一起分析应用程序性能问题。
系统的元数据应该是系统的架构拓扑图,通过动态、准确的更新元数据可以将采集到的 Event、Message、Metric 等数据映射到真实环境中去,并能通过各种手段进行系统健康程度的诊断,是的自动化监控和管理成为可能。
为了让庞大系统的运行效率提高,要不断的优化系统中的热点,并将系统中的热点服务扩展、升级、重构成为一个组建化的服务,这也是 SRE 中解耦系统的方法。不仅如此,SRE 对各个服务的可用性进行标准化定义,将统一的标准应用到不同的服务中去,将稳定性作为各个服务的重要度量指标,通过上述操作,收拢服务治理问题,提供系统的鲁棒性。
针对 SLO,我们举一个例子来说明以下,
为什么要有 SLO,设置 SLO 的好处是什么呢?
对于客户而言,是可预期的服务质量,可以简化客户端的系统设计
对于服务提供者而言
可预期的服务质量
更好的取舍成本 / 收益
更好的风险控制 (当资源受限的时候)
故障时更快的反应,采取正确措施
注:
四个黄金信号
当平台服务不可用,或访问速度变慢时,往往会影响到产品的整体质量,目前了解到的一些基础监控指标就达到上百种,通常的做法是在这些指标当中需要选取平台或业务比较关注的指标进行监控报警;
Google 的网站可靠性工程师小组(SRE)定义了四个需要监控的关键指标。他们称之为 “四个黄金信号”:延迟(Latency),流量(Traffic),错误(Errors)和饱和度(Saturation)。这四个信号应该是服务级别非常关键部分,因为它们对于提供高可用性的服务至关重要。
如何定义高质量的监控:
明确业务服务的 SLO(应该与该业务提供给客户的期望达成一致),并采用合理的 SLI 来描述;比如计数信息(总量、成功量)、测量信息(同比、环比);
主观上监控应该有丰富的内部状态数据、具备高可观测性条件;客观上具备业务视角,能够快速定位是全局问题还是局部问题;系统本身的鲁棒性,不会因为某个局部问题影响监控的权威性;具备 quota 限制能力,防止出现容量的问题;
报警清理和定期的规则优化,定期进行盘点告警,并优化掉无 SLO 影响的规则;
自动化系统的建设中除了要考虑系统的能力外,还要考虑人在其中所发挥的重要作用,毕竟一旦一些突发的时事件若必须由人来处理,则这时刻人的稳定性和准确性也是需要保证的。微软在 SRE 大会中提出了一个有意思的观点:如果一个系统能够比人做的更好,那人应该知道如何监控这个系统本身。因此,在保证 SLO 的情况下,可以做一些攻防演练(关闭 SRE 系统的 UI 后,SRE 该如何操作?);或构建一个模拟系统,让人来执行系统;并学习故障的复盘报告等。
SRE CONF 2019 传送门:
推荐几篇不错的 Session: