1. SLA 基础概念:特征平台的定海神针

大家好,我是老赵。今天咱们聊聊特征平台 SLA 那些事儿。

很多人一听到 SLA、SLO、SLI 就头大,觉得这是运维团队搞出来的概念游戏。其实不然。我在一线摸爬滚打这么多年,见过太多因为 SLA 没定义清楚导致的线上事故。说白了,SLA 就是你和用户之间的一纸契约——你承诺提供什么水平的服务,用户据此决定是否信任你。

1.1 什么是 SLA?

SLA,全称 Service Level Agreement,服务等级协议。它是一份正式约定,明确了服务提供方(比如特征平台团队)和服务消费方(比如推荐算法团队)之间的责任边界。

举个例子。我负责的特征平台承诺:特征查询接口的月度可用性不低于 99.9%,单次查询 P99 延迟不超过 50ms。这就是一份典型的 SLA 条款。

核心要点:SLA 不是技术指标,而是商业承诺。它背后往往有赔偿条款、升级流程和沟通机制。

1.2 SLA、SLO 与 SLI 的区别

这三个概念经常被混用,但它们的层次完全不同。我习惯用一个比喻来解释:

  • SLI(Service Level Indicator)——仪表盘上的读数。比如“过去 5 分钟特征查询的平均延迟是 32ms”。
  • SLO(Service Level Objective)——你给自己定的目标。比如“P99 延迟要保持在 50ms 以内”。
  • SLA(Service Level Agreement)——对外公布的承诺。比如“月度可用性 99.9%,否则退还 10% 费用”。

你看,SLI 是原始数据,SLO 是内部目标,SLA 是外部契约。三者的关系可以用下面这张图来理解:

SLA / SLO / SLI 三层模型 SLI(服务等级指标) 原始测量数据:延迟、错误率、吞吐量、可用性 SLO(服务等级目标) 内部目标:P99 延迟 ≤ 50ms,可用性 ≥ 99.9% SLA(服务等级协议) 对外承诺:月度可用性 99.9%,含赔偿条款 SLI → SLO → SLA:从原始数据到内部目标再到外部承诺的逐层抽象

我的经验:很多团队只盯着 SLA 看,忽略了 SLO 的日常管理。我建议把 SLO 设得比 SLA 更严格——比如 SLA 承诺 99.9%,SLO 就定 99.95%。这样即使 SLO 偶尔被突破,SLA 依然安全。

1.3 特征平台为什么需要 SLA?

这个问题我问过不少刚入行的同学。有人说“为了考核”,有人说“为了追责”。这些都对,但不够本质。

特征平台是机器学习基础设施的核心组件。它负责生产、存储、分发特征数据。一旦出问题,影响的是下游所有模型推理和训练任务。我经历过一次特征延迟事故,导致推荐系统用了过时特征,线上 CTR 掉了 15%,花了整整两天才恢复。

特征平台需要 SLA 的原因有三:

  1. 依赖链太长——一个特征可能被几十个模型使用,出问题就是雪崩效应。
  2. 数据时效性敏感——特征过期几分钟,模型效果可能就大打折扣。
  3. 排障成本高——没有 SLA 基线,你根本不知道“正常”是什么样,出了问题也无从对比。

避坑指南:我曾经见过一个团队,上线特征平台半年都没定义 SLA。结果每次出故障,算法团队和平台团队互相甩锅。后来花了两个月才把 SLA 补上,但信任已经受损了。记住:SLA 不是用来限制你的,是用来保护你的。

1.4 常见的特征服务 SLA 指标

特征平台的 SLA 指标和其他在线服务有相似之处,但也有自己的特色。我整理了一张常用指标表:

指标类别 指标名称 典型 SLO 说明
可用性 服务可用率 ≥ 99.9% 特征查询接口的正常响应比例
延迟 P99 查询延迟 ≤ 50ms 最慢的 1% 请求的响应时间
延迟 P50 查询延迟 ≤ 10ms 半数请求的响应时间,反映典型体验
准确性 特征值正确率 ≥ 99.99% 返回的特征值与预期一致的比例
时效性 特征新鲜度 ≤ 5min 特征从产生到可查询的最大延迟
吞吐量 QPS 达标率 ≥ 设计容量的 80% 实际吞吐与设计容量的比值
数据完整性 特征覆盖率 ≥ 99.9% 请求的特征中成功返回的比例

这里我想特别强调一下特征新鲜度这个指标。很多团队只关注延迟和可用性,忽略了特征的新鲜度。但你想,如果推荐模型用的特征是 30 分钟前的用户行为,而用户已经浏览了新内容,那推荐结果肯定不准。我见过一个案例,特征新鲜度从 2 分钟退化到 15 分钟,模型 AUC 直接掉了 0.03。

核心原则:特征平台的 SLA 指标必须覆盖“能不能用”(可用性)、“快不快”(延迟)、“准不准”(准确性)、“新不新”(时效性)四个维度。缺一个,你的 SLA 就是不完整的。

1.5 如何制定合理的 SLA 目标?

制定 SLA 不是拍脑袋。我一般遵循以下步骤:

  • 第一步:收集历史数据——至少回顾过去 3-6 个月的线上表现,找到各项指标的基线。
  • 第二步:对齐业务需求——和算法团队、产品团队沟通,了解他们对延迟、新鲜度的真实容忍度。
  • 第三步:设定 SLO 缓冲区——SLO 要比 SLA 严格 10%-20%,给自己留余量。
  • 第四步:定义测量方式——明确用什么工具、什么粒度、什么窗口来测量 SLI。
  • 第五步:建立告警和升级机制——SLO 被突破时谁负责处理,SLA 被突破时如何赔偿。

嗯,这里要注意一点:SLA 不是越严格越好。我见过有人把 SLA 定到 99.999%,结果为了达到这个目标,团队投入了 80% 的精力在冗余和容灾上,反而没时间做功能迭代。说白了,SLA 要匹配业务价值,不是炫技。

我的建议:刚开始做特征平台 SLA 的团队,先定 99.9% 可用性 + P99 50ms 延迟 + 5 分钟新鲜度。跑两三个月,根据实际表现再调整。别一上来就追求五个九,那是大厂才玩得起的游戏。

好了,这一章的内容就到这里。SLA 是特征平台保障的基石,后面的章节我们会深入每个指标的监控和实现细节。记住:没有 SLA 的特征平台,就像没有仪表盘的飞机——你敢飞,乘客可不敢坐。