【稳定性】浅谈团队如何做好系统稳定性

京东云开发者
• 阅读 219

背景

稳定性建设需要一系列具体的建设活动推进和落地,这些建设活动涉及人员、机制和文化,全方位的建设活动才能更好地落实建设模式。

一、稳定性保障机制

稳定性涉及团队所有不同水平技术人员、所有系统、研发所有环节、线上时时刻刻,单个技术人员是无法保障好的,必须建立团队流程机制来可持续保障。

人为因素的根源一方面是专业能力不足,经验不足,另一方面很多都是无心之失,所以需要通过流程、规范来保住“底线”,减少人为因素导致的故障。大家严格遵守咱们的各种规范即可(CodeReview规范、发布xbp流程、上线后doublecheck机制)。通过流程和doublecheck机制确保每个人发布不会太差,解决人的因素。永远要记住团队的力量是无穷的,要学会借力。

1、规范先行

稳定性关键还是要靠大家,如何靠大家呢?稳定性工作,规范先行.就是要落地一套稳定性的机制体系,用机制的严格执行来约束大家,不然无法展开。这套机制包括:

方案评审机制:在完成系统的建设或改造方案初稿后,需通过由业务、技术、测试、运维领域组成的团队进行方案评审,才能进一步对方案进行实施。

架构设计规范:概要设计、模块详细设计、API、Domain、数据缓存、容错设计、风险设计等。

代码编写规范:规范覆盖代码基础、日志、配置、多线程、数据库、异常使用等多层面,提升代码质量;

代码评审规范:changelist描述、兼容性、性能、复杂性、团队评审文化等。

代码提测规范:Test单测、代码编译构建、系统运行稳定性等、

代码测试规范:进入稳定性测试阶段,要严格审查系统是否达到测试准入条件,即满足测试实施的所有必要条件,如果未满足,则不开展稳定性测试。在稳定性测试实施结束后,严格检查所有测试准出条件是否满足,如:没有进行中的缺陷等,否则不予测试通过。

预发&引流压测规范:黄金链路必须进行R2引流验证。

发布上线规范:可灰度、可验证、可回滚等

验收规范: 业务、产品验收规范

制定变更规范:提供变更级别、角色职责、活动阶段以及输入输出的详细规定

制定运维操作规范:针对公司日志标准,提供统一的日志排查命令及规范。

报警响应机制:针对运维相关的监控告警制定告警处理流程、告警升级机制

值班及责任判定机制:设置值班制度,每天有技术人员负责值班,值班周期内的所有问题由值班人员治理,不能及时完成的,添加到BUG定期跟踪并统计。在出现生产事件后,由专家团队对该问题进行详细分析,确定问题的发生原因、解决办法后,对该问题进行问责,明确责任团队、责任人、责任承担比例等内容。避免在稳定性治理中产生“囚徒困境”。

故障管理机制:故障管理机制包括规范管理故障响应流程、故障升级机制、故障复盘机制,规范技术人员在应对突发故障时的操作流程,明确职责边界,提升沟通效率,推动故障闭环,提升故障处理效率

2、开发和SER的区别

提到稳定性,先讲个概率SRE(Site Reliability Engineering,站点可靠性/稳定性工程师)

一说到 Software Developer,人们脑子里就能反映出需求评审、编码、调试、测试、上线、修 bug等具体工作内容。那 SRE 呢?SRE与普通的开发工程师(Dev)不同,也与传统的运维工程师(Ops)不同,SRE更接近是两者的结合,也就是2008年末提出的一个概念:DevOps,这个概念最近也越来越流行起来。SRE模型是Google对Dev+Ops模型的一种实践和拓展(可以参考《Google运维解密》一书),SRE这个概念我比较喜欢,因为这个词不简单是两个概念的叠加,而是一种对系统稳定性、高可用、团队持续迭代和持续建设的体系化解决方案;



都是做技术的,很多开发刚刚转向稳定性方面时,有些弯转不过来。 举个例子:对于“问题”,传统的开发人员更多的倾向于是“bug/错误”,而SRE倾向于是一种“风险/故障”,所以,两者对“问题”的处理方法是不一样的:

•开发:了解业务 -> 定位问题 -> 排查问题 -> 解决问题

•SRE:了解业务归属 -> 快速定位问题范围 -> 协调相关人投入排查 -> 评估影响面 -> 决策恢复手段

可见,开发人员面对问题,会首先尝试去探究根因,研究解决方案;而SRE人员首先是评估影响,快速定位,快速止损恢复。目标和侧重点的不同,造成了SRE思考问题的特殊性

所以,成为一名SRE,就一定要从态度和方式上进行转变,切换到一个“团队稳定性负责人”的角度上去思考问题。

3、谈谈个人对SRE的几点要求

1.责任心、细心、耐心

1.负责任是第一要素,主动承担,对报警、工单、线上问题、风险主动响应,不怕吃苦;一个不负责任的人,遇到问题与我无关的人,边界感太强的人,难以做好稳定性的工作;

2.及时、快速的响应,这是最关键的一点,作为一个SRE,能够及时、快速的响应是第一要务,遇到报警、工单、线上问题,能够第一时间冲上去,不要去问是不是自己的,而是要问这个事情的影响是什么,有没有坑,有没有需要优化的风险?

3.主动走到最前面、主动想优化的办法、主动出头解决问题、主动挖掘系统风险薄弱点。

2.不能只做当下,要看到未来的风险,善于总结

3.把机制建立好,切实落地。作为一个SRE,想做到“不出问题”这个基线,关键还是要靠大家。



二、稳定性建设方向

1、地基要打牢

稳定性建设工作重在预防,根据多年的工作经验,至少70%的线上故障都可以通过预防工作来消除。因此,在日常工作中,我们需要投入相应的精力来进行根基建设。所谓的根基建设,就是要把开发、测试和上线这三大流程做到透彻。包括:DesignReview、CodeReview、提测流程、上线流程、引流验证、性能测试等。

2、工作在日常

俗话说养兵一日,用兵一时。稳定性工作不是一蹴而就,而是日常的点点滴滴,一步一个脚印走出来的。

需要团队人人参与、持续完善监控告警、检查每一个告警是否配置、及时消灭线上小隐患。可参考每周的稳定性会议。

梳理: 主动梳理团队的业务时序、核心链路流程、流量地图、依赖风险,通过这个过程明确链路风险,流量水位,时序冗余;

技术债务治理: 主动组织技术债务的风险治理,将梳理出来的风险,以专项的形式治理掉,防患于未然。但需要注意别由于治理而导致线上问题,需要加强引流验证比对

演练: 把风险化成攻击,在没有故障时制造一些可控的故障点,通过演练来提高大家响应的能力和对风险点的认知。

报警: 除了前面说过的主动响应之外,还要经常做报警保险和机制调整,保证报警的准确度和大家对报警的敏感度。同时也要做到不疏忽任何一个点,因为疏忽的点,就可能导致问题。

3、预案是关键

我们需要认识到预案的重要性,并投入相应的精力来进行预案的制定和更新。这样,我们才能更好地应对各种突发情况,保障项目的顺利进行。通过每周的稳定性去深入挖掘每个接口的隐患及不足,比如业务指标是否加上、业务指标是否能真实反馈该接口的特性等。

4、大促特殊场景

系统在大促的稳定性和日常稳定性的区别在哪呢?个人理解核心是两点:

1、 【技术】高并发流量:大促流量峰值是日常的N倍(几十、几百倍),需要具备更高的并发流量处理能力,以保证系统的稳定性这方面。针对这评估好流量,做好容量规划即可。

2、 【业务】业务场景多样化:大促会增加很多日常用不到的场景,很明显的比如预售场景、Promise特殊时效控制、停运降级功能等。针对日常不用,大促才用的功能点。可整理功能点,在大促前1个月模拟大促,业务进行相关功能配置,演练全流程,类似每年大促都进行的预售场景演练。因为每年需求都在迭代增加,难免会影响之前的功能点。这样就可避免大促期间突然使用功能发现不好用的问题

5、执行是王道

其实听复盘会学东西是一方面,最主要是应该问问我们系统是不是也存在这种问题,我该怎么规避或解决这类风险问题,别人暴露的我也存在,应该第一时间去解决,而不是我知道但我不做。

三、前置:扁鹊三兄弟

与扁鹊三兄弟一样,如果想要让稳定性有价值,SRE同学一定不能站到系统的屁股后面等着擦屁股,必须走到前面,看到未来的风险。

既要在发生问题时快速解决问题(做扁鹊)

也要把风险归纳总结,推动解决(做二哥)

还要在系统健康的时候评估链路,发现隐藏的问题(做大哥);

1. 做扁鹊大哥:擅长的是“事前控制”,具有敏锐的洞察力和战略眼光,防患于未然,在系统健康时发现问题。
2. 做扁鹊二哥:擅长的是“事中控制”,具有出手迅速、果断、干练的特点,在系统有隐患时发现问题。
3. 做扁鹊:   擅长的是“事后控制”,是临危受命型的关键人物,在系统发生问题时快速解决问题。
根据《鶡冠子·卷下·世贤第十六》的记载,有一次,魏文王问扁鹊说:“你们家兄弟三人,都精于医术,到底哪一位最好呢?”扁鹊回答说:“长兄最好,中兄次之,我最差。
”魏文王又问:“那么为什么你最出名呢?”扁鹊回答说:“长兄治病,是治病于病情发作之前,由于一般人不知道他事先能铲除病因,所以他的名气无法传出去;
中兄治病,是治病于病情初起时,一般人以为他只能治轻微的小病,所以他的名气只及本乡里;而我是治病于病情严重之时,一般人都看到我在经脉上穿针管放血,在皮肤上敷药等大手术,
所以以为我的医术高明,名气因此响遍全国。”



参考:

公众号普惠出行产品技术:https://mp.weixin.qq.com/s/R2qBQgJCueErBL35ld4KZQ

点赞
收藏
评论区
推荐文章
架构师日记 - 从技术角度揭露电商大促备战的奥秘 | 京东云技术团队
本文从技术角度深入分析了大促备战的背景和重要性,重点介绍了备战期间稳定性保障的相关措施,包括具体的指导方向和落地细节。本文旨在回顾和梳理备战期间的关键步骤,以帮助我们更加从容的应对系统稳定性的挑战。
稳定性建设框架 | 京东物流技术团队
稳定性治理是一个长期的过程,要把稳定性的工作融入到研发过程中,一方面要有意识尽量别埋坑,比如微服务强调中间件隔离,我们就不要混用中间件了,另一方面稳定性问题要一步到位,比如治理超时时间,要有个完整规范定义超时时间,并在研发过程中对新增接口、历史接口都配置合理,且能够动态更新。
【稳定性】稳定性建设之弹性设计 | 京东物流技术团队
弹性设计为系统稳定性建设提供了一种新的视角和方法,它有助于提高系统的可用性、性能和安全性,同时也降低了维护和修复的成本和风险。
京东云开发者 京东云开发者
10个月前
【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队
一、前言性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构分析、流量分析、压测实施和剖解调优等主要环节中,引发对于系统能
京东云开发者 京东云开发者
8个月前
【稳定性】稳定性建设之依赖设计
背景随着分布式微服务的发展,一个普通的应用可能会依赖于许多其他服务,这给系统的限流降级、优化改造等操作带来了困难。在没有明确强弱依赖关系的情况下,我们很难有效地进行这些操作。为了解决这个问题,强弱依赖治理成为了一种科学的手段。通过强弱依赖治理,我们可以持续
京东云开发者 京东云开发者
8个月前
稳定性方法论:可灰度 & 可监控 & 可回滚
业务系统核心目标是挣钱,系统稳定性建设核心是防止丢钱(丢钱逻辑如下图所示),站在公司的角度看,产品功能建设和系统稳定性是同等重要。前段时间写了《》,该文章在稳定性建设的理论和实践基础上,抽象出稳定性治理的框架,希望建立一个稳定性治理的标准动作、最佳实践。但
京东云开发者 京东云开发者
4个月前
万字长文浅谈系统稳定性建设
1.背景京东的期中考试:618即将到来,各个团队都在进行期中考试前的模拟考试:军演压测,故障演练,系统的梳理以检测系统的稳定性以应对高可用,高性能,高并发。我们知道系统的稳定性建设是贯穿整个研发流程:需求阶段,研发阶段,测试阶段,上线阶段,运维阶段;整个流
京东云开发者 京东云开发者
3个月前
当系统闹脾气:用「因果推断」哄稳技术的心
背景系统稳定性问题往往涉及复杂的因果关系。例如,一个系统的崩溃可能由多个因素引起,包括硬件故障、软件bug、业务配置、外部攻击或其他操作不当等。理解这些因素之间的因果关系对于系统稳定性建设至关重要。举个例子:服务雪崩A服务调用B服务之间发生了雪崩效应,原本
京东云开发者 京东云开发者
1个月前
【稳定性】稳定性建设之变更管理
作者:京东物流冯志文背景在软件开发和运维领域,变更管理是一个至关重要的环节。无论是对现有系统的改进、功能的增加还是修复漏洞,变更都是不可避免的。这些变更可能涉及到软件代码的修改、配置的调整、服务器的扩容、三方jar包的变更等等。然而,变更的执行过程往往伴随
京东云开发者 京东云开发者
1个月前
【质量视角】可观测性背景下的质量保障思路
作者:京东保险郑飞背景介绍目前质量团队正在积极建设和完善应用监控能力,旨在能及时发现并解决问题,为线上服务稳定性保驾护航。随着可观测性概念的逐渐普及,监控的建设也有了新的挑战和使命。本文将探讨在可观测性背景下,作为一个测试人员在质量保障中的一些思路和个人思