

1 前言
Latency(请求响应的延迟时间,严选内部常用rt代称之,rt=ResponseTime) Error(请求的错误响应率,严选内部常用5xx代称之,其实定义上还包括了各种exception) Throughput(吞吐量) Accuracy(准确性) Freshness(实时性) ……
3 系统建设
3.1 原始理论的本土化
选定最适合严选的SLI,考虑到严选(电商)核心业务的技术实现都是各式各样的Webapp在线服务(主站、活动、交易、供应链、分销、等,主要基于HTTP和RPC协议),黄金指标选定了Latency(rt)和Error(5xx)这两个。为何是这两个?rt变大就是接口响应变慢了,5xx变多就是接口功能异常了,这二者都将导致本服务的服务质量和调用方体感的直接下降,是衡量HTTP&RPC的最佳黄金指标。 SLO规则是要求每个严选微服务为服务整体和本服务1~10个核心业务接口(很多公司的SLO实践只支持针对服务整体而不支持对接口粒度配SLO的)的2个黄金指标分别都配置上去。假如一个微服务有5个核心接口,那么它将配置上1×2+5×2=12条SLO。SLO的阈值需要经过充分推演和评审,并且不能超过某条基线,如L1服务的接口响应时间不能超过2秒(否则用户体感会很差)。 
EB选择宕机总时长的形式(时间预算),而不是失败请求总量(数量预算)。由系统每天凌晨自动遍历本服务前一天的全部请求(时间上覆盖365×7×24,周末/夜间/节假日亦包含),每一个请求都计算一遍SLO,任一SLO不满足则标记该请求为异常请求。待前一天全部异常请求都找出来后,将它们在一个自然天的[00:00:00.000, 23:59:59.999]时间轴上垂直去重(确保同一个请求不会被多次计算,也确保发生多个异常请求的同一时刻只被算为一份)后计算出当天一共产生了多长时间的Downtime(当天里最少0毫秒,最多24小时),用于扣减EB。 SLA的评定周期仅开放月和季度两个可选(系统实现其实是支持了周、月、季度、年等多种自然周期,但周和年不开放出来),SLA可用率目标则限定在[80%, 99.999%]区间内有限的几个离散值可选,不允许设置92.3%这种“奇奇怪怪”的SLA。要求L1服务的SLA不得低于L2,以此类推,服务等级越高,要求设置越高的SLA承诺。每个微服务必须为自己设置SLA,SLA一旦设置好了就意味着本周期的EB总预算是确定不变的了,修改SLA也是下个周期才生效。每天系统在自动扣减好EB之后,会判断其本周期SLA是否已经不能达成。 定期发送服务周报和产品月报邮件,向研发运维团队告知统计数据、达成情况和一些明显异常,定期组织复盘。SRE和服务/产品负责人也将参照这些数据作为决策依据(如服务拆分、线上扩容等)。同时,革命不能完全靠主动,需要探索SLA不达成的一些惩罚性措施(如发布增加审批人等)。 要求严选全部L1-L3 HTTP服务(都是重要服务,L1是重中之重)都设置SLA和SLO,并且必须有准出评审(研发+运维+负责人),不能随便配,随便改。 考虑到系统不成熟等阶段性原因,向服务开放EB申诉功能,如生产环境全链路摸高压测可能会导致服务线上变慢或者出现5xx报错,进而产生Downtime(因为严选是直接压线上,接口变慢变5xx是可能被真实用户感知到的,是真真切切的线上质量下降)。

3.2 基于严选DevOps的系统实现
CMDB:明确了产品/服务定义,明确了服务编码(如yanxuan-xxx)和服务等级(L1-L3、未定级)、明确了各角色负责人、等等,大大减轻SLA/SLO规范的术语定义成本和沟通成本。 APM:提供了服务运行时的丰富指标的自动化收集,最主要就是Java应用基于javaagent所捕获的请求真实数据,如一个请求当时的路径是什么(Path可对应到接口)、哪里来怎么来(Trace)、要去调用哪个服务、发生在什么时间、rt时间多少(具体到毫秒)、响应码是多少(200/4xx/5xx)、是否有抛出异常(Exception)、等等,系统里有了这些数据,SLO的判断才有从谈起。 数仓/计算:每天的海量的APM数据和大量的严选微服务的接入,都带来了巨大的SLO计算成本,一天的计算体量大约是7+亿(一天APM请求数量) × 700+(个微服务) × 10(每个微服务平均配10条SLO),这么大的计算量必须要求APM请求数据接入数据仓库并配以大数据平台的离线计算框架,只有这样才跑得动SLO的自动化计算。 用户界面:入口放在服务治理平台SNest上,用户可在此配置SLA、配置SLO、EB速算表、查看达成情况、EB申诉、等等,主要是平台统一收口,降低接入和使用成本,并通过页面交互来确保一些规范约束点的有效落地(如L1服务SLA不得低于99.9%)。

3.3 主要成果
理论建设有了规范,系统开发有了工具,现在酒酿出来了,别浪费在巷子里,接下去就是运营工作,要到严选技术部门的各个业务板块去布道推广,落地下去。
微服务做出了SLA承诺:“我这个服务每季度可以做到百分之多少的可用”。这是产品负责人对服务自己的一种要求,同时也是对调用方做出的一种承诺; 微服务设置上了一批SLO规则:“我这个服务/这个接口的rt不会大于多少毫秒”、“我这个服务/这个接口的5xx错误率不会大于万分之几”。同理,对服务来说,对内是一种要求(代码足够优化,部署上足够健壮),对外是一种承诺(调用方设置超时参数,评估降级等决策时可参照)。 微服务日常管理和运营:利用SLA和SLO报表,定期复盘,可以发现线上有哪些性能隐患,有依赖风险,有拆分需求,有扩容诉求,等等。









4.1 统一术语,科学管理线上质量
4.2 搅屎棍,暴露服务线上隐患
对于B/C/D三个服务的超时参数是不是合理(此时就可以去看B/C/D的接口SLO所配的阈值了)? 对于E/F/G/H四个服务是否有熔断机制?是否有自动预案? 对于G和H这两个弱依赖是不是可以干脆异步化解耦掉? 我这个服务A是不是太大该进一步微服务拆分成A1/A2/A3了? 等等
4.4 敬畏生产环境
研发团队会更加重视提升代码质量,优化应用架构,优化参数配置,重视框架选型等工作,确保提供一份优秀健壮的代码; 测试团队会重视提升测试质量,定期组织压力测试和故障演练,确保准出到线上环境的是一份高质量的代码制品; 运维团队会更重视提升交付质量,日常操作合法合规,重视容量管理提前扩容,重视监控和巡检,确保线上机器和网络等基础环境是稳定的; 技术委员会会促进零感知发布、异常监控、报警响应、故障恢复等DevOps能力的建设,合力缩短MTTR,并引导系统资源和团队资源向高SLA服务倾斜,优先保障高SLA服务;
不是监控系统。有了SLA/SLO去度量线上质量,不代表你就可以忽视基建监控(硬件/系统/网络监控)、进程监控(APM/日志监控)、业务监控(多个服务多份数据共同组成一个业务行为),弃之不用。 不是无所不能。理论上SLI全集很大,但具体到企业落地时黄金指标就只会选定有限的几个。严选只选了Latency和Error,不代表Throughput、Accuracy、Freshness等其它SLI就没用,只是在综合了技术现状、SLI指标收集成本、ROI等因素考虑之后没被选上而已。对于落选的SLI,就无法为之配置SLO规则,其对应的描述能力就无法用上。 不一定被用好。在严选我们看到很多有着极高追求的服务:有2个服务给自己设置的接口RT阈值是2毫秒(你没看错,是2毫秒,不是20毫秒,也不是2秒)、有3个服务给自己设置的接口Error阈值是万分之1、有4个服务给自己设置的SLA是5个9(嗯,99.999%极限值),对于这些服务来说,随便发生一个网络抖动或者缓存抖动就可能导致守不住,但他们依然选择做勇士,敢于对自己提出高要求。但是,可能你也想到了,这套SLA/SLO的理论和工具里有些细节其实是存在人为操作空间的,如下单接口代码很差那我就故意不给它配SLO规则(我不说你不说,这个接口就漏过去),商品查询接口调用方可以接受500毫秒超时那我就得过且过(虽然我知道经过一定投入去优化是可以提升到200毫秒的,但500阈值对我来说更安全嘛),看到少量Downtime我就视而不见(反正一天只扣一点点,又没扣光我的整个EB预算),等等,这样种种的逃避/作弊行为都会妨碍这套工具的效用发挥到极致。尽管可以通过一些管理手段和规范流程来规避,但提高每位参与者的主动积极性和自觉性,这更重要。
6 小结
7 扩展阅读
Google SRE团队的经验分享: Chapter 2 - Implementing SLOs:https://sre.google/workbook/implementing-slos/ Chapter 4 - Service Level Objectives:https://sre.google/sre-book/service-level-objectives/ 虎牙SRE团队的经验分享: 虎牙直播的SRE实践与思考:https://www.sohu.com/a/218480103_411876 解密SRE的六种能力及虎牙运维实践:https://blog.csdn.net/weixin_33915554/article/details/88706020 一些云厂商官网的SLA承诺: 亚马逊云主机ASW:https://aws.amazon.com/cn/compute/sla/ 阿里云主机ECS:https://help.aliyun.com/document_detail/64695.html 阿里云短信服务:https://help.aliyun.com/document_detail/63935.html 阿里云对象存储OSS:https://help.aliyun.com/document_detail/60175.html


文章转载自严选技术产品团队,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




