6

MTSC专题系列——酷家乐线上稳定性保障体系实践

 10 months ago
source link: https://tech.kujiale.com/mtsczhuan-ti-xi-lie-ku-jia-le-xian-shang-wen-ding-xing-bao-zhang-ti-xi-shi-jian/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本次分享将从酷家乐面临的稳定性问题和挑战,在稳定性保障上的工作思路,建设实践,保障体系,价值经验等几个方面,与大家一起分享交流。稳定性工作是一个非常复杂的工作,希望通过这次分享交流,我们可以一起持续探索这个领域的最佳实践。

image.png

一. 问题和挑战

随着用户体量变大和系统复杂度变高,酷家乐稳定性建设难度也越来越大。从酷家乐历年故障原因类型分析中可以看到,系统功能缺陷,系统设计缺陷,流程问题占比较高,接近80%。其中包括很多历史债,以及各种新的故障类型,在业务&架构变得更复杂后,稳定性建设工作进入到了“深水区”。在经过了仔细地复盘后,我们发现了非常多的问题,集中体现在:

image-1.png

既然有这么多的问题和挑战,那么其他大厂是怎么做的呢?稳定性保障在很多“大厂”已经建设多年,在云原生观测,故障快速恢复&自愈,平台系统建设,智能化&移动化&数字化运营,以及完善的流程规范&度量&考核等各方面都形成了相对健全的稳定性保障体系。

而对比“大厂”,酷家乐在这些方面的建设相对落后较多。面临着业务监控建设缓慢,故障监控发现率低;快速恢复故障手段单一,恢复时间长;稳定性平台零散不成体系,缺少开发资源;流程和度量不统一,考核要求低等一系列挑战。

image-2.png

二.酷家乐稳定性工作思路针对这么多的问题和挑战,酷家乐的稳定性建设工作思路分别从组织管理,流程建设,数据运营&文化建设,系统&能力建设等四方面自上而下,循序渐进地做到日常工作中。

1.从组织管理出发,每年都要制定稳定性目标(比如:高P故障个数,故障平均恢复时长,高P警报个数,故障分等),从CTO到各业务线技术总监,再到研发经理&一线技术人员,自上而下的为结果负责。同时由CTO授权稳定性委员会对各业务线的稳定性工作运作进行监管和追踪,明确各角色职责,做到权责利统一。

2.完善流程规范,重新梳理和优化稳定性相关流程,确定流程负责人,明确流程指标,并进行宣讲和实践,让流程能真正运作起来。在线下跑通跑顺流程后,以流程指导系统建设,逐步将流程固化到IT系统(避免建设资源的浪费)。比如最基本的故障应急流程,谁来拉群组织应急,谁来协调资源,谁来同步信息,都要有明确的流程规范,以及IT系统支撑高效运转。关于应急流程,我会在下面再具体展开来讲。

3.从流程中提炼出核心结果指标和关键过程指标,定期自上而下的通晒稳定性目标数据,运营指标,驱动业务线改进,形成文化&氛围。比如我们会把故障分,故障恢复时长,故障监控发现率等通过周报,群内推送等方式通晒,自上而下的追踪和分析这些数据。包括做的好的业务线的一些最佳实践分享,以及定期组织一些演练比赛等等。

4.在指标数据推动各业务线同学分析改进的过程中,我们会将实践中的能力和经验沉淀到稳定性相关平台建设中。慢慢从单点突破,到由点带面,逐步形成体系能力。比如,通过故障原因分析,发现变更故障多,就重点抓变更管控系统建设,在业务高峰期,严格控制核心业务系统发布窗口等。再比如发现大家应急能力和预案不足,组织学习应急经验和实践,在提升能力的同时,也完善各种应急操作系统功能。

当然稳定性有很强的技术相关性,本次分享主要侧重点在整体体系的实践,所以会从整体角度来分享。

这四个步骤,相对直接借鉴“大厂”的体系化建设经验,搭建各种系统平台能力,会更“轻”一些,从成本上也能很好的控制。先从组织和流程能力双管齐下,通过数据运营和指标驱动,然后再逐步地完成系统和能力建设,有着先轻后重,先看效果,后建能力,低成本,重管理,抓指标的特点。

image-3.png

三.酷家乐稳定性建设实践

下面我们就具体展开来讲酷家乐的稳定性建设实践。
1.意识问题

首先,我们看下我们面临的第一个问题,意识问题。这里的每个问题,背后都是一个个故障,这些结论都是通过深入的故障复盘总结出来的。

线上意识薄弱

发布时和发布后,需要做业务观测,看业务表现,日志,监控,客诉反馈等。但有一次变更,发布后没有做观测,连最基本的告警报出来,都没及时处理,本来当天晚上可以及时发现解决的,硬是等到第二天早上用户批量反馈后,才开始解决。

管理不重视日常应用运维能力

研发忙于日常业务需求,针对基本的应急能力,平常不重视学习和演练。真正发生故障时,手忙脚乱,忙中出错。

比如某次故障,前端有个bug,导致请求流量翻倍,本来应该能通过限流快速解决,但错误的执行了切换集群,导致问题扩大化,本来只是打开慢,现在直接挂掉。

责任不清晰

部分同学的行为缺乏敬畏,认为出现故障很正常,修复就好了,反正也没有明确的责任要求。

比如某次故障,开发做一个线上配置变更,在没有完全搞清楚配置操作的影响范围的情况下,随意地执行了配置操作,直接导致线上所有文案类配置显示大量错误,导致各种用户投诉。

image-4.png

稳定性组织保障-三级责任制

针对上述问题,为了保障稳定性,各产品线、各敏捷组,都需要在OKR中背负一部分稳定性指标,并明确地将其完成度纳入绩效考核中。

稳定性建设工作需要多方配合,涉及到开发,测试,SRE,运维,监控团队,中间件团队等各个角色的协作和配合。因此,需要从组织管理的角度,思考如何更好地让相关方能在各自的领域完成工作的同时,又能高效配合,共同为结果负责。
首先,明确稳定性保障工作的主体为各业务研发团队。各业务团队研发总监,研发经理等要以身作则,与CTO自上而下一起承担稳定性结果指标,作为绩效考核的依据。在组织保障层面构建出 “总监->研发经理→应用Owner/一线研发”的三级责任制。

其次,酷家乐创造性地建设了“稳定性委员会”的横向虚拟组织,由CTO和各技术总监授权,挑选横向团队中的精英骨干组成稳定性委员会,运作稳定性日常工作。包括流程规范的制定,监管,问责,追踪各业务线稳定性工作等。

image-5.png

稳定性文化建设

有了组织保障之后,再配合文化意识建设等氛围的营造,往往能达到事半功倍的效果。

a.稳定性宣传针对稳定性目标和各种考核结果指标,定期通过海报,周报,月报等期刊通晒数据,以及同步最新的稳定性工作建设进展。同时,定期组织各种专项活动,比如突袭演练活动,让各业务线锻炼团队应急能力,验证服务容灾预案的合理性,提升团队应急止血速度,以及问题定位能力,选出故障应急最强战队,营造氛围。

b.稳定性培训&分享上面提到的各种应急能力和意识(怎么处理监控告警,怎么快速执行预案恢复故障),需要通过各种培训分享来推广落地,尤其是新人培训,必须要纳入到新人的入职培训体系中,并组织理论考试和实操考试(演练)。

此外,各业务线在稳定性方面做的好的方面,也要鼓励他们写出最佳实践的文档,在研发内部分享,推广到其他业务线使用。

c.稳定性奖针对做的好的同学和团队,设定稳定性奖项:从稳定性盘点,演练,应急监控,预案,复盘等事前,事中,事后各方面设置奖项,鼓励做的好的团队。

d.稳定性惩:对于违反红线等情况,实行绩效考核,以及研发内部通报批评等。

image-6.png

实际结果和价值
经过一段时间的治理:线上故障的平均响应时长大大降低,研发同学对警告的敏感度提升非常明显。在业务线和公司的整体应急警告处理群,都能有序的执行和运作起来。

image-7.png

2.流程机制问题

第二个大问题:流程机制问题。

1.流程不完善

很多流程缺失,导致很多稳定性工作变的很混乱。比如提到的数据变更类操作,在发生那次故障以前,完全没有流程和规范要求技术同学应该怎么做。除了流程缺失外,有一些流程也只是停留在文档上,出现无人维护,无人推动和无法落地等情况。没有人为流程结果负责。

比如有一次故障,做线上的批量数据更新,竟然没有按照数据变更流程去做数据的备份,出错之后无法短时间快速回滚,一堆开发花了4个小时重新修复了数据。

2.流程执行不到位

在故障应急时,各自为战,信息不通畅。比如有次故障应急,没有统一的指挥和协调,不同业务线的好几个同学大量做隔离和扩容操作,将原本负载偏高的机器再次推满,本来故障已经快恢复了,因为这些操作反而导致故障又恶化了,且恢复时间也变长了。

此外,我们的复盘流程规范对怎么做复盘做了非常明确的要求,部分开发同学在做复盘文档时出现分析不深入,改进措施无法避免再次发生等情况。比如在故障原因的分析方面,没有分析从故障引入到恢复的全部过程,而只是停留在表面上的技术原因。在原因分析不全面的情况下,制定出的改进措施可想而知效果也不会太好。导致故障的管理没有闭环。

image-8.png

流程建设实践----以应急流程为切入点

针对上述问题,我们整体上盘点了稳定性相关的流程规范,下面就应急流程举例说明。

线上应急作为稳定性保障的重要日常工作,应急效果的好坏直接关系到是否能快速恢复故障,以及降低故障对用户体验造成的影响。因此,在流程建设中,以线上故障应急流程为切入点,我们重点梳理和优化了该流程,打造技术支持&SRE值守&业务线值班长owner机制。让值班长owner故障应急全流程,在响应,判断,通告,拉群,升级,解决,验证等各个关键节点,以降低损失,恢复线上业务为第一优先级,做到有序高效地应急。

image-9.png

流程管理机制和指标建设
从应急流程切入后,由点及面的扩展相关流程建设,比如故障等级定义,监控&巡检规范,封网流程规范,发布规范,演练流程规范,变更红线规范等等一系列稳定性配套流程规范。

同时,在流程中,明确各种稳定性关键结果指标,比如故障分,故障恢复时长,故障监控发现率,故障复盘分,演练分等,以便做目标管理和考核。
在流程和指标建设中,需要特别注意以下两点:

1.每个流程都要有owner,为流程结果负责;定期更新和维护流程,并持续推动流程落地,做好监督和检查。最后,通过IT系统固化流程,做到自动或强制执行。避免流程成为摆设,无法落地。

2.稳定性关键结果指标,一定要从CTO到研发自上而下的负责,落到绩效考核结果中。

image-10.png

意识&流程机制建设概况
总结:针对上面提到的这些组织管理和流程能力的痛点,酷家乐进行了一系列针对性的措施。确认以稳定性委员会作为日常运营和监管的重要组织,明确各角色职责和流程规范。设立稳定性目标和各种结果指标,营造由CTO到一线研发自上而下的为稳定性结果负责的考核要求和文化氛围。以月报期刊,红黑榜,各种奖惩等手段,强化所有同学的稳定性意识。相对来说,成本适中,收效明显。

image-11.png

3.能力问题
第三个问题:能力问题。

能力问题,是一个较大的问题,包括告警的治理和闭环能力, 应急处理和改进能力,变更管控的能力等等。

image-12.png

1.能力痛点-----告警治理能力
为什么要做SRE监控值守和巡检?

通过观察酷家乐的高P告警数量,发现平均每天有180+的高P告警。对研发同学来说,每天跟进和处理这么多的告警,是有一定的压力的。另一方面,也说明我们的系统处于亚健康状态,需要不断的优化和治理。

此外,很多告警&巡检发现的问题,因无人跟进或排查难度大等原因,导致有一些问题没有被彻底解决,成为线上故障的隐患。

最后,做监控值守&巡检,最主要还是为了提前&主动发现和解决问题,避免因处理不及时导致故障。

image-13.png

监控值守&巡检闭环
a.基于上面提到的问题,SRE和监控团队的同学,打造了一整套的监控和巡检体系。梳理监控&巡检流程规范,打造7*24小时监控值守,聚合高P疑似故障告警,推送到公司监控大群,提前发现和解决隐患,并建立警报事件跟进排查出根因&改进。

b.针对云服务器,中间件,网络,应用等系统自动每日巡检,对发现的异常,创建任务确定优先级,并指派到对应的研发负责人跟进解决。

c.每日汇总高P告警数量,重点警告概述&分析,以及线上业务量情况等,形成SRE日报,每日推送到研发大群。

d.持续跟踪创建的任务,根除告警和巡检发现的问题,并完善全链路监控系统和监控诊断定位系统。

image-14.png
image-15.png

监控和巡检发现的问题会创建相应的任务,根据优先级和任务归属,指定给对应的研发owner,并要求在规定时间解决。定期会通晒解决数据情况。

image-16.png

2.能力痛点-----应急能力
a.应急协同

分工不明确,不知道应急的时候应该做什么。

b.信息同步

故障期间,各个群内消息杂乱,容易漏掉关键故障进展信息。

c.复盘管理

故障复盘信息没有平台统一存放,散落在各个文档,不方便查看和回顾。

image-17.png

a.应急响应能力:
一键拉群&一键外呼,发送故障通告信息到公司应急群。定期更新故障通告,保障信息同步通畅。

image-18.png

3.能力痛点-----变更管控能力
随着业务的快速发展,系统之间的依赖耦合也越来越复杂。历年来酷家乐出现了多次因为A业务的变更导致B业务线上异常而出现故障。此类问题出现,都是有一方做了线上变更导致另外一方异常,并且排查的时候受影响方影响,比较难在第一时间快速定位到是哪方的变更导致,尤其是涉及一些线上配置变更的问题。

经过梳理和分析酷家乐线上变更数量和相关系统,发现以下几个痛点:

  • 变更数量多:平均每天350+变更量。
  • 变更系统多:涉及到12+变更系统,包括发布,配置,数据变更,运维操作等。
  • 定位变更难:故障时,无法快速定位到对应变更,无法快速准确的回滚。
image-19.png
image-20.png

变更和监控,巡检,故障应急,封网能力建设
因此,在变更管控方面我们做了以下几方面的事情:

  • 线上变更统一收口:将酷家乐95%以上的变更系统接入到变更管理系统。
  • 变更打通监控告警:在告警中展示最近变更情况。
  • 变更打通巡检:收到变更消息后及时触发线上巡检能力,利用线上自动化测试能力和及早发现线上问题能力。
  • 变更打通故障应急:在故障发生时,及时拉特定时间范围内特定服务的变更数据推送到故障分析群,辅助故障定位和快速恢复。
  • 核心系统的发布接入封网管控:封网期间,推送封网信息到各核心发布变更平台,禁止线上变更。业务高峰期的高危变更推送提醒。
image-21.png

真正执行封网管控之后,从源头管控了无序变更导致的故障。

image-22.png

1.为什么要做故障演练

衡量稳定性工作做的好不好,最直接的方式就是多搞演练。

通过演练,至少可以有以下作用:

1.故障突袭、联合演练:以战养兵, 提升DevOps能力。处理问题的人是否熟练?沟通机制是否有疏漏?

2.架构容灾测试:主备切换、负载均衡,限流降级&熔断等手段的时效和效果,容灾手段本身健壮性如何。

3.预案等措施在故障发生时是否真的有效?

4.监控报警:报警的有无、提示消息是否准确。5.故障action验收。

image-23.png

2.演练平台建设

沉淀通用的故障场景,以可控成本将故障重现,以持续性的演练来暴露问题,不断验证和推动系统、工具、流程、人员能力的提升。

从前期准备,故障注入,演练期间,复盘等四个阶段展示了突袭演练的流程。

image-24.png

演练运营:

1.前期准备

分析历史故障,演练场景设计,活动方案和玩法制定,奖品准备,活动前期宣传和预热,报名等。

2.活动执行

每周执行突袭活动,演练后进行复盘&打分,通晒数据&营造氛围。

3.活动颁奖

根据打分评选优胜队伍,组织颁奖仪式,邀请CTO等颁奖嘉宾,活动总结复盘和推送。

image-25.png

四.酷家乐稳定性保障体系总结

image-26.png

最后:价值和经验

通过上面一整套体系化的治理和建设,我们的高P故障恢复时间缩短30%,高P告警准确率90%+,巡检发现和解决问题数量100+,改进措施完成率99%,90%以上变更系统接入变更管控。

除了本身对酷家乐的价值,对于其他公司实践可以从以下几个方面借鉴:

1.组织管理,自上而下的重视程度。

2.抓流程建设&流程owner落地。

3.重视文化建设&营造氛围。

4.以流程指导系统建设。

5.持续建设&将稳定性做到日常。

image-27.png
image-28.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK