
很多做稳定性保障的同行应该都遇到过这样一个尴尬场景业务方指着监控大屏问你“系统到底稳不稳”你只能凭经验说“还行”“最近还行”。但“还行”是什么水平跟去年比是进步还是退步跟同行业的平均水平比又处在什么位置这些问题单靠感觉和经验是答不上来的。2022年分布式系统稳定性沙龙上信通院对外解读的分布式系统稳定性度量模型其实就是冲着这个痛点去的。它把“稳定”从一个模糊的形容词拆解成一套可以量化、可以对比、可以追责的指标体系。这篇博客我就以这次沙龙的解读为主线结合我自己在稳定性保障、SRE落地和全链路压测中的实际经验把这个模型掰开揉碎讲清楚——它到底度量什么、指标怎么算、口径有哪些坑、团队里怎么落地。不管你是刚接触稳定性的运维新人还是已经在搞SLO和混沌工程的资深从业者这篇文章都能给你一些可以直接用上的东西。1. 为什么我们需要一套“可量化”的稳定性模型1.1 分布式系统的稳定性为什么越来越难讲清楚过去做单体应用的时候稳定性问题相对简单进程还在不在、数据库连不连得上、磁盘满没满基本就这些。但服务拆成分布式架构之后情况完全不同了。一个用户请求要经过网关、多个微服务、缓存、消息队列、数据库任何一环抖动整条链路都可能出问题。更麻烦的是分布式系统里故障是传染的——一个服务慢下来会把依赖它的所有服务都拖慢甚至引发雪崩。这种复杂度带来的直接后果就是稳定性问题的“归因”越来越难。线上出故障了到底是代码问题、配置问题、容量问题还是依赖的外部服务问题很多时候不是单一原因而是多个因素叠加。如果你没有一个统一的度量框架就很难回答“这次故障到底有多严重”“我们离目标还差多少”“哪个环节最该优先投入治理”。1.2 从“感觉稳定”到“数据稳定”的转变我见过不少团队稳定性工作做得很辛苦但成果很难量化。值班同学熬了几个通宵处理故障到了月度汇报的时候只能说“本月处理了X起事故”“系统可用性大约在99.95%左右”。这个“大约”就很成问题——因为没有统一口径不同的人算出来的可用性可能完全不一样。信通院这个度量模型的价值本质上是给行业一个“通用语言”。它试图回答三个核心问题度量什么稳定性的维度怎么划分是全还是偏怎么度量每个维度的指标定义、计算口径是什么度量结果怎么用如何指导容量规划、发布策略、故障治理有了这套通用语言团队内部可以对齐目标行业之间可以横向对比供应商宣称的“稳定性”也有了一个可以校验的标尺。这点对于整个行业的良性发展价值非常大。2. 信通院稳定性度量模型的核心设计拆解2.1 模型的核心维度划分逻辑按照沙龙现场的解读思路这个模型并不是凭空造出来的而是把业界在SRE、可观测性、容量工程和混沌工程等领域已经验证过的方法论重新做了结构化整合。整体上模型把稳定性拆解为四个相互关联的维度可用性、容量、性能、韧性。这四个维度不是并列的摆设而是有内在逻辑的。可用性回答的是“服务能不能用”的问题是最基础的底线性能回答的是“好不好用”的问题一个服务虽然可用但延迟从100ms飙到3秒用户体感就是不可用容量回答的是“够不够用”的问题流量翻倍时系统还能不能扛住韧性回答的是“坏了能不能快速恢复”的问题即使前面三个维度都做得不错故障还是不可避免韧性强弱决定了故障的影响半径和恢复速度。这四者互相钩稽性能恶化到一定程度就是容量问题容量被打满必然导致可用性下降韧性不足则会让一次小故障演变成大事故。把稳定性拆成这四个维度比单看“几个9”要全面得多。2.2 每个维度的指标体系怎么映射到实际场景接着说说每个维度在实操层面具体对应哪些东西。可用性维度核心指标是SLA/SLO达成率、请求成功率、故障时长等。这个维度最贴近用户感知也是业务方最容易理解的。性能维度核心指标是延迟特别是P95、P99这类高分段延迟、吞吐量、错误率。注意这里特别强调高分段延迟因为分布式系统里平均延迟的“平均”两个字会掩盖大量问题——99%的请求都很快但1%的慢请求全部集中在数据库连接池上这1%就是压垮系统的前兆。容量维度核心指标是资源水位CPU、内存、磁盘、连接数、队列长度、饱和度、扩容响应时间。容量问题的难点在于预判等水位打满再扩容往往已经晚了。韧性维度核心指标是故障恢复时间MTTR、故障影响半径、自愈能力、演练通过率。韧性这个维度以前很少被放进正式的度量体系里但它恰恰是分布式系统最需要补强的一环。我自己的理解是这四个维度更像是一张稳定性健康度体检表而不是一个单一的分数。体检表的意义在于告诉你哪个脏器有问题而不是给你一个“健康指数95分”就完事了。3. 关键指标的计算口径与落地方法3.1 可用性指标从三个九到五个九的口径陷阱可用性指标的常见公式是可用性 (总时间 - 不可用时间) / 总时间 × 100%。看起来很简单但口径稍微不一样结果就天差地别。首先是“不可用”怎么定义。是按整个服务完全不可用来算还是按错误率超过阈值的时间段来算比如一个服务从凌晨2点到2点10分持续有5%的请求报错这10分钟算不算不可用时间有的团队会把这10分钟折算成“部分可用”有的团队干脆不计入。信通院模型在多处强调了关键时段、核心链路的可用性要单独度量这个思路我非常认同——凌晨低峰期的10分钟抖动和白天高峰期的10分钟抖动影响面完全不是一个量级。其次是“统计窗口”。用月度窗口还是年度窗口结果差别也很大。月可用性99.95%意味着一个月大约21.6分钟不可用而年可用性99.95%意味着一年大约4.38小时不可用。很多团队的SLO是按年度目标定的但复盘是按月度做的这就导致月初大家不紧张月底发现错误预算烧完了才开始紧急冻结发布。一个重要提示如果你在制定SLO建议把年度目标换算成月度错误预算然后按周跟踪消耗速度。99.9%可用性对应的年度错误预算是8.76小时月度是43.8分钟每周大约10分钟。这个换算关系建议每个SRE都刻在脑子里。3.2 性能指标为什么P99比平均值更有意义性能维度最常用的指标是延迟分位数。这里我多说几句为什么不能用平均延迟。平均延迟在分布式系统里几乎没有参考价值原因在于延迟分布极度不均匀。某个实例的GC停顿、网络重传、队列排队都会产生极长的尾延迟。一个请求耗时5秒会把100个请求的平均耗时从100ms拉到150ms但P99可能纹丝不动。反过来也一样——P99从180ms涨到500ms平均值可能才从100ms涨到105ms看起来“一切正常”。所以我强烈建议团队在监控系统里把P50、P95、P99、P999四条线都画出来并且重点关注P99和P999的趋势。P99上探通常意味着某个依赖开始出现间歇性抖动P999上探往往是链路中某个环节即将饱和的预警。如果等到平均值明显恶化故障通常已经发生了。另外延迟指标一定要按场景拆分。用户登录链路的P99和批量任务调度的P99是完全不同的两个指标混在一起就会互相掩盖。我踩过这个坑——把核心接口和异步任务的延迟放在同一个看板里结果核心接口P99已经飙到800ms了看板的平均值还没过200ms因为异步任务只要不超时就都算成功拉低了整体数据。3.3 容量指标水位线不是一成不变的容量维度的核心是“水位”。水位怎么定不是简单看CPU超过70%就报警。不同系统的瓶颈资源不一样——有的系统CPU先打满有的系统内存先耗尽有的系统是数据库连接数和文件句柄先到上限还有的系统是消息队列的积压长度先失控。实操中的做法是先找到系统的瓶颈资源再给瓶颈资源定水位线。判断方法就是做压测。通过全链路压测或单服务压测逐步增加负载观察哪个资源最先接近上限那个资源就是系统的短板。水位线也应该围绕短板资源来设。我之前负责的一个核心交易系统CPU一直很闲但数据库连接池经常被打满。当时如果按照“CPU水位70%报警”的传统逻辑系统永远不会有告警直到连接池彻底耗尽、数据库拒绝新连接故障才爆发。后来我们把数据库连接池使用率作为核心容量指标紧急上线程池隔离和排队机制才把问题压住。这个经验在信通院模型里也有对应——容量维度强调多资源维度综合判断识别真正的瓶颈资源。容量维度还有一个容易忽略的指标扩容响应时间。从流量突增到完成扩容需要多长时间在云原生环境下这个指标通常可以做到分钟级但如果还是人工走工单申请资源的流程可能需要小时级。扩容响应时间决定了系统承受突发流量的上限我建议把它作为一个独立的容量指标来管理和演练。3.4 韧性指标怎么度量“坏掉之后的事”韧性维度是传统监控体系里最容易被忽视的。很多团队的稳定性度量止步于监控告警至于“坏了之后多久能恢复”“故障影响半径怎么控制”“下次能不能更快恢复”基本没有量化数据。度量韧性常见的手段是故障注入和混沌工程。具体做法包括随机kill一个Pod实例观察服务是否继续正常响应给某个依赖接口注入300ms延迟观察链路是否出现超时雪崩强制一台机器断网验证流量调度和故障转移能力模拟数据库主库宕机验证读写分离和主从切换是否自动完成。这些演练不能“演过就算”而是要产出量化指标故障发现时间、定位时间、决策时间、恢复时间、数据丢失量等。这些指标汇总起来就形成了韧性维度的核心度量——MTTD平均发现时间、MTTR平均恢复时间、影响半径。一个心得韧性演练的频率比规模更重要。每月做一次小范围的随机故障注入比半年做一次“全链路大阅兵”效果要好。前者能让团队保持警觉后者往往为了“表演成功”而提前做了大量准备失去了演练的真实意义。4. 度量模型在团队中的落地路径4.1 指标采集与数据治理是地基很多团队拿到一个度量模型第一反应是“先把指标算出来”。但实际落地的第一步应该是先把数据底座打好否则算出来的指标就是一堆不可信的垃圾数据。具体来说落地度量模型之前需要保证以下几点指标口径统一QPS怎么计是按入口流量算还是按业务处理量算成功率是HTTP 2xx算成功还是业务码为0才算成功这些口径必须在全团队形成数据字典否则各部门算出来的数字根本对不上。数据覆盖完整不仅有监控指标还要有日志、链路追踪数据三者能关联起来。出问题的时候能快速从指标下钻到日志和链路。数据存储够用指标数据至少保留6到12个月这样才能做季节性的趋势对比判断“今年相比去年同期稳定性是否有提升”。我见过一个团队引进了很先进的监控平台但指标只保留30天。到了做季度稳定性报告的时候想对比年初的数据发现早就被清理了最后只能凭记忆补。这个教训说明度量模型能不能发挥作用很大程度上取决于你愿不愿意在数据基础设施上花成本。4.2 从指标到运营稳定性闭环怎么转起来度量模型不是出一个报表就结束了关键在于把度量结果接回日常运营。我建议的落地节奏是月度稳定性复盘以度量模型四个维度的指标为骨架逐项过数据偏离基线的指标就是下个月的治理重点。SLO与发布准入联动错误预算消耗过快时自动限制低风险变更的发布。这是把度量结果直接转化为行为约束比单纯发通报有效得多。故障复盘与韧性演练计划挂钩每次故障复盘后识别出的薄弱点要排入下个月的故障注入演练计划用演练结果验证改进是否有效。跨团队对比用统一的度量模型给不同业务线做稳定性横向对比建立起内部竞争机制。这套闭环走起来之后度量模型就从“事后算账”的工具变成了“事前预测、事中管控、事后改进”的管理体系。我个人的观察是能落地闭环的团队和只做报表的团队半年后的稳定性差异会非常明显。4.3 不同规模团队的落地策略差异不是所有团队都需要一步到位。我把落地策略按团队规模分了三档小团队10人以下非核心系统先从可用性和性能两个维度做起。监控好请求成功率、延迟、错误率这几个核心指标定一条简单的SLO就够用了。容量和韧性的完整度量可以先放一放等系统发展起来了再补。中型团队核心业务系统四个维度全部铺开。容量维度至少要有核心链路的压测数据和水位监控韧性维度至少有月度故障演练。这个阶段SLO必须官方化跟复盘和发布流程绑定。大型团队平台型、超大规模除了四个维度还需要做按业务领域拆分度量——每个核心业务线独立计算可用性、容量等指标。同时要把度量数据做成公司级稳定性看板供管理层决策使用。实际上我见过的成功案例都有一个共同点没有追求一步到位。都是先用上两三个月把数据底座和口径对齐搞定然后逐个维度上线指标等团队消化了再推下一个维度。贪多嚼不烂反而容易让度量体系变成一堆没人看的图表。5. 常见问题与排查技巧实录5.1 指标明明很好看但线上还是事故不断这是落地度量模型最常见的困惑。看板上的可用性是99.98%P99延迟也很平滑结果突然来一波线上故障被打得措手不及。问题出在哪大概率是以下几个原因之一度量维度不全只监控了可用性和性能没有覆盖容量。流量突增时连接池被打爆性能指标的监控根本没有相关维度。统计粒度太粗把整个集群的指标求平均掩盖了单实例的异常。集群整体可用性99.99%但某台机器可能已经反复重启很多次了。SLO定义偏离用户路径监控的是内部健康检查接口而用户实际使用的核心接口不在覆盖范围内。排查建议对照度量模型四个维度逐个排查是否都有覆盖把整体指标下钻到实例维度看看是否存在“局部恶化”被“全局平均”掩盖的情况确认SLO覆盖的是真实用户链路。5.2 跨团队之间度量口径互相“打架”A团队说系统可用性99.99%B团队说A系统的可用性只有99.9%两边用的数据源都说是“线上真实数据”。这种情况在公司里太常见了。口径不一致的地方主要在这几个方面失败判定标准不同A团队用HTTP状态码B团队用业务异常码而很多业务异常其实是HTTP 200返回错误码。采样范围不同一个统计了全部流量一个只统计了Web端流量。时间口径不同一个按自然日统计一个按滚动24小时统计。解决办法只有一个在公司层面建立指标数据字典明确每个指标的含义、计算逻辑、数据来源并把它做成一个可检索的文档或平台。跨团队复盘时引用的任何指标都必须在字典里能查到。这个问题不解决度量模型推行得越广扯皮越多。5.3 告警要么太吵、要么该响不响告警是度量模型触达一线人员的核心通道但告警配置不当会让整个体系失信。太吵了on-call同学会直接把告警屏蔽该响不响则事故扩大化。我的建议是告警分级与度量维度结合。可用性维度如请求成功率低于SLO和容量维度如连接池使用率超过90%直接走P0/P1紧急告警性能维度如P99超过基线1.5倍持续5分钟走P2标准告警韧性维度的演练失败进工单系统跟踪不发是告警。另外告警规则不要一次配完就指望一劳永逸每季度至少review一次阈值。系统规模变了、容量水位变了、业务流量画像变了阈值都需要跟着调。5.4 模型推下去了但团队觉得是“形式主义”这个问题我见得太多了。度量模型推行半年报表出了五六期但大家觉得就是在“填表格”——稳定性该差还是差。出现这种情况通常是因为度量结果没有跟实际的资源投入、发布策略、绩效评估挂钩。要让度量模型真正发挥作用必须把度量的结果转化成行动项。哪条链路可用性不达标就要投入人力和资源去治理哪个服务的错误预算烧得太快就要限制它的发布频率。不能把度量当成统计工作而要把度量当成管理工具。只要度量结果能左右资源的流向团队就自然会重视起来。6. 个人实操中的几点补充体会写到这里再分享几个没法塞进上面章节的零碎经验都是实战里趟出来的。第一个经验是度量模型一定要跟成本一起看。稳定性不是越高越好而是要在稳定性和成本之间找平衡。可用性从99.9%提升到99.99%可能要增加一倍的机器资源和运维投入这个ROI值不值得每个团队都要有自己的判断。信通院模型给了度量方法但“稳定性目标定多少”这件事是需要结合业务体量和成本模型来定的。第二个经验是不要把稳定性度量变成纯技术指标的游戏。用户感知到的“稳定”是业务层面的下单成不成功、视频卡不卡、页面能不能打开。技术指标要尽量向业务语言转化。比如把“可用性99.95%”翻译成“每月大约有22分钟用户可能无法下单”业务方就能瞬间听懂后续讨论目标优先级也会顺畅很多。第三个经验是关于定期审视模型本身。业务的架构在演进度量模型也要跟着迭代。比如业务全面上云后弹性扩缩容能力就成了新的关键指标这个在传统物理机时代是不存在的。每年做一次度量模型本身的评审看看哪些指标已经失去意义哪些新的稳定性风险没有被覆盖这个动作很有必要。最后想说稳定性度量模型的价值不在于给你一个“看起来专业”的分数而在于让稳定性工作从“凭感觉驱动”变成“数据驱动”。如果你所在团队正在为“系统到底稳不稳”这个问题争论不休不妨参照信通院这个模型先把可用性、性能、容量、韧性四个维度的指标拉起来。不用追求一步到位但一定要动起来。数据有了讨论才有依据改进才有方向。