背景
最近帮客户做 SaaS 续费方案,对方销售拿着我们的状态页截图说:"你们 99.95% 的可用性,能不能直接写进合同?" 我愣了三秒——我们内部 SLO 是 99.9%,对外一直只写"SLA 99.9%(月度可用性低于此值按 SLA 条款补偿)",从来没把 SLO 本身往外抛。
这一幕让我突然意识到:我们团队内部对 SLO / SLA 的口径其实从来没对齐过。技术同学眼里 SLO 是"我们要达到的目标",销售眼里 SLO 是"我们敢承诺的数字",法务眼里 SLO 是"写进合同就变成违约金的锚"。三种理解,一个词。
常见分歧(我见过的三种流派)
流派 A:全公开,信任即产品。 "用户敢下单的前提是知道你会不会宕机。把 SLO 写进官网、写进合同、甚至把 error budget 都公开,反而是最强的信任背书。你看 StatusPage.io 那一堆公司,谁不是把错误率挂在门口?"
流派 B:SLO 是内部指标,对外只露 SLA,且要留缓冲。 "SLO 是给自己立的目标,SLA 才是对外的法律承诺。两者差 0.1~0.5% 是常态,因为 SLO 是"我们想做到",SLA 是"做不到就赔钱"。把 SLO 直接当 SLA 卖,等于把工程目标变成了财务负债。"
流派 C:状态页透明化,但数字本身不承诺。 "把每一次宕机的时间线、影响面、复盘结论都公开(像 AWS、Cloudflare 那样),但官网不写"我们承诺 99.9%"——公开"我们做了什么",而不是"我们承诺什么"。信任来自透明度,不是来自一个数字。"
我的倾向(先抛出来挨打)
我偏 流派 B + C 的混合:
- 对内:SLO 严格用,error budget 是工程决策的硬约束(烧光就不上功能、优先还债);
- 对外:合同里只写 SLA,且 SLA = SLO - 缓冲(比如 SLO 99.9%,SLA 99.5%),避免"目标即承诺";
- 状态页:公开每次事件的时间线 / 影响面 / 复盘,但不公开"我们的 SLO 是 X%"——因为用户没有能力也没有义务理解 SLO 和 SLA 的差别,公开 SLO 只会让一次 99.91% 的月份变成公关事故。
理由:SLO 的本质是工程目标的刻度尺,不是商业承诺的锚。把刻度尺挂在门口,等于把尺子变成了秤——用户拿秤去称你的重量,你就被动了。
想听大家在什么场景下怎么选
想听听各位的真实经历,特别是有分歧的:
- 你所在的公司 / 团队,是"对内 SLO、对外 SLA",还是"SLO 直接对客"?如果直接对客,踩过什么坑(比如某个月 99.91% 被用户拿去做文章)?
- SLA 的补偿条款你们怎么设计?按"每分钟"还是按"整月打折"?有没有出现过"补偿比收入还多"的极端情况?
- 状态页透明度做到什么程度?事件复盘要不要公开?公开到"哪一行代码 / 哪个组件"这个颗粒度,会不会反而给攻击者送情报?
- 有没有遇到过"用户要求把 SLO 写进合同"的情况?你怎么谈下来的?
不预设答案,就想听听不同行业、不同规模下的真实取舍。