生产者责任定义:角色、承诺与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设定的四个步骤
我一般按这个流程来:
- 识别关键指标:跟消费者聊,他们最在意什么?延迟?准确性?还是数据量?
- 收集基线数据:跑至少一个月的生产数据,看看当前水平。没有基线就定SLA,那是耍流氓。
- 设定SLO目标:在基线基础上加10%-20%的余量。比如基线是95%,SLO可以定97%。
- 协商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的关系串起来了:
设定SLA/SLO时常见的坑
做了这么多年,我踩过的坑不少。挑几个典型的说说:
- 指标太多:恨不得把20个指标都写进SLA。结果呢?运维成本翻倍,消费者也记不住。我建议SLA里不超过5个核心指标。
- 忽略异常场景:SLA里只写了正常情况,没写「数据源故障」「上游系统宕机」怎么办。嗯,真出了事,扯皮就开始了。
- 没有监控验证:SLA定得再好,没有监控就是废纸。我见过一个团队,SLA里写了「99.9%可用性」,结果连可用性怎么监控都没部署——你说这SLA有啥用?
- 一次性定死:SLA不是刻在石头上的。业务变了、系统升级了,SLA也要跟着调整。我建议每季度review一次。
特别提醒:SLA里一定要写清楚「不可抗力」条款。我经历过一次云服务商大规模故障,所有数据延迟了6小时。如果SLA里没有免责条款,那赔偿金额能把团队赔破产。
小结一下
生产者责任定义这件事,说白了就是三句话:
- 知道自己该干什么——交付、质量、变更通知,一个都不能少
- 知道自己能承诺什么——用数据说话,别拍脑袋
- 知道自己该怎么承诺——SLO逼自己进步,SLA给消费者保障