生产者责任定义:角色、承诺与SLA/SLO设定

数据契约这件事,说白了就是让生产者和消费者之间有个白纸黑字的约定。但很多团队一开始就搞错了重点——他们光顾着定义契约格式,却忘了最核心的问题:生产者到底该承担什么责任?

我见过不少项目,契约写得漂漂亮亮,一上线就崩。为什么?因为生产者根本不清楚自己该承诺什么,能承诺什么。今天我们就来把这个事情掰扯清楚。

生产者的三大核心职责

生产者不是只管把数据扔出去就完事了。我个人习惯把生产者职责拆成三个层次:

  • 数据交付责任:按时、按量把数据送到消费者手里。这不是废话——我遇到过生产者凌晨跑批,结果ETL挂了没人管,消费者早上八点一看报表全是空的。
  • 数据质量责任:保证数据的准确性、完整性、一致性。你想想看,消费者基于你的数据做决策,如果数据是错的,那责任算谁的?
  • 变更通知责任:任何Schema变更、字段废弃、语义调整,必须提前通知。我曾经在一个金融项目里,生产者偷偷把字段类型从string改成了int,下游所有解析脚本全部报错——那叫一个惨。

关键原则:生产者责任不是无限责任。契约里写清楚什么该管、什么不该管,比什么都重要。

数据质量承诺:别开空头支票

很多团队在数据质量承诺上犯的错,就是承诺得太满。什么「数据100%准确」「零延迟」——你信吗?反正我不信。

我建议用可量化的指标来做承诺:

质量维度 指标示例 常见承诺值
完整性 字段非空率 ≥ 99.5%
准确性 数据与源系统一致率 ≥ 99.9%
及时性 数据产出时间 每日 08:00 前
一致性 跨分区数据不冲突 100%
唯一性 主键无重复 100%

我的经验:承诺值别拍脑袋定。先跑三个月历史数据,看看实际能达到什么水平,再往上加一点点余量。我曾经见过一个团队承诺99.99%的准确性,结果实际只有97%,每个月都被消费者投诉——何必呢?

SLA与SLO:到底有什么区别?

这两个概念经常被混用。我简单解释一下:

  • SLO(Service Level Objective):你给自己定的目标。比如「99.9%的情况下,数据在8点前产出」。
  • SLA(Service Level Agreement):你跟消费者签的协议。比如「如果数据延迟超过30分钟,赔偿消费者10%的月费」。

说白了,SLO是内部指标,SLA是外部承诺。SLO可以定得高一点,逼自己进步;SLA要留有余地,别把自己逼死。

SLA/SLO设定的四个步骤

我一般按这个流程来:

  1. 识别关键指标:跟消费者聊,他们最在意什么?延迟?准确性?还是数据量?
  2. 收集基线数据:跑至少一个月的生产数据,看看当前水平。没有基线就定SLA,那是耍流氓。
  3. 设定SLO目标:在基线基础上加10%-20%的余量。比如基线是95%,SLO可以定97%。
  4. 协商SLA条款:跟消费者谈,哪些指标要进SLA,违约怎么处理。记住,SLA是双向的——消费者也有义务及时反馈。

避坑指南:我曾经在一个项目中,SLA里写了「数据延迟超过1小时算违约」,但没定义「延迟」怎么算。结果生产者说从ETL开始算,消费者说从数据落地算——吵了两个月。所以,指标定义必须精确到计算口径。

一个完整的SLA示例

拿一个电商订单数据表来举例:

数据契约:order_daily_summary
生产者:数据平台团队
消费者:BI团队、推荐团队

SLO目标:
- 数据产出时间:每日 07:30 前(P99)
- 数据完整性:核心字段非空率 ≥ 99.5%
- 数据准确性:与源系统一致率 ≥ 99.9%
- 主键唯一性:100%

SLA承诺:
- 若数据产出时间超过 08:00,每次赔偿消费者 2 小时工时
- 若核心字段非空率低于 99%,触发紧急修复流程
- 若数据一致率低于 99.5%,需在 4 小时内完成修复并重跑

变更通知:
- Schema变更:提前 5 个工作日通知
- 字段废弃:提前 10 个工作日通知
- 紧急变更:需在变更后 24 小时内补发通知

责任对齐的SVG框架图

下面这张图,把生产者责任、质量承诺、SLA/SLO的关系串起来了:

生产者责任对齐框架 生产者角色 数据交付责任 数据质量责任 变更通知责任 数据质量承诺(可量化指标) 完整性 ≥ 99.5% 准确性 ≥ 99.9% 及时性 08:00前 一致性 100% 唯一性 100% SLO(内部目标) SLA(外部协议) P99 07:30前产出 核心字段非空率≥99.5% 延迟超30分钟赔偿 一致率低于99.5%修复 SLO是给自己定的目标,SLA是给消费者的承诺——前者可以激进,后者必须保守

设定SLA/SLO时常见的坑

做了这么多年,我踩过的坑不少。挑几个典型的说说:

  • 指标太多:恨不得把20个指标都写进SLA。结果呢?运维成本翻倍,消费者也记不住。我建议SLA里不超过5个核心指标。
  • 忽略异常场景:SLA里只写了正常情况,没写「数据源故障」「上游系统宕机」怎么办。嗯,真出了事,扯皮就开始了。
  • 没有监控验证:SLA定得再好,没有监控就是废纸。我见过一个团队,SLA里写了「99.9%可用性」,结果连可用性怎么监控都没部署——你说这SLA有啥用?
  • 一次性定死:SLA不是刻在石头上的。业务变了、系统升级了,SLA也要跟着调整。我建议每季度review一次。

特别提醒:SLA里一定要写清楚「不可抗力」条款。我经历过一次云服务商大规模故障,所有数据延迟了6小时。如果SLA里没有免责条款,那赔偿金额能把团队赔破产。

小结一下

生产者责任定义这件事,说白了就是三句话:

  • 知道自己该干什么——交付、质量、变更通知,一个都不能少
  • 知道自己能承诺什么——用数据说话,别拍脑袋
  • 知道自己该怎么承诺——SLO逼自己进步,SLA给消费者保障