1. 数据契约治理概述
数据契约这个概念,说白了就是给数据交互双方定个规矩。你想想看,一个系统往另一个系统传数据,格式对不对?字段够不够?谁负责修?这些都得有个白纸黑字的约定。我做了十几年数据架构,见过太多因为没定好契约导致的线上事故。
1.1 数据契约的定义
数据契约,本质上是一份技术协议。它规定了数据提供方和数据消费方之间的接口规范。包括字段名、数据类型、取值范围、更新频率、可用性承诺等等。
举个例子,一个订单系统要给数据分析平台提供数据。契约里会写明:
- 订单ID是字符串,长度不超过32位
- 订单金额是Decimal(10,2),单位是元
- 每天凌晨2点前完成T-1数据同步
- 可用性不低于99.9%
我个人习惯把数据契约分成三个层次:
| 层次 | 内容 | 典型工具 |
|---|---|---|
| 语法层 | 字段名、类型、长度、枚举值 | Avro、Protobuf、JSON Schema |
| 语义层 | 业务含义、度量单位、数据来源 | 数据字典、业务术语表 |
| 服务层 | SLA、可用性、延迟、安全策略 | API Gateway、契约注册中心 |
嗯,这里要注意。语法层是基础,但真正容易出问题的是语义层。我在项目中遇到过,两个团队对「活跃用户」的定义完全不同——一个按登录算,一个按下单算。这种歧义,光靠字段定义是解决不了的。
1.2 治理的必要性
为什么要治理?因为没治理的契约,就是一团乱麻。
我曾经接手过一个数据平台,光订单相关的接口就有17个版本。有的用JSON,有的用XML,有的字段名叫order_id,有的叫orderId,还有的叫oid。消费方根本不知道该信谁。
数据契约治理要解决的核心问题有三个:
- 兼容性——提供方升级接口时,不能把消费方搞挂
- 可见性——谁在用我的数据?我用谁的数据?一目了然
- 可追溯——出了问题,能快速定位是提供方改了字段,还是消费方用错了版本
核心观点:数据契约治理不是限制创新,而是给创新划跑道。没有跑道的飞机,飞得再快也落不了地。
你想想看,一个微服务架构里,服务间调用依赖数据契约。如果契约随意变更,整个调用链都可能断裂。我见过最惨的一次,上游改了字段类型从int变成string,下游没感知,结果批量任务跑了三小时全失败。
1.3 兼容策略的核心目标
兼容策略,说白了就是解决「变」与「稳」的矛盾。数据提供方要迭代,消费方要稳定。怎么平衡?
我个人把兼容策略的目标归纳为四点:
- 向前兼容——新版本的提供方,能服务旧版本的消费方
- 向后兼容——旧版本的提供方,能服务新版本的消费方
- 无损迁移——版本切换过程中,数据不丢、服务不停
- 可回滚——出问题时,能快速切回旧版本
实战建议:刚开始做契约治理时,别追求完美。先定一个最小可行契约,把字段名、类型、必填/可选这三个要素管住。其他的,慢慢补。
我曾经在一个金融项目里,团队非要搞一套完美的契约体系。结果搞了三个月,业务方等不及,自己用Excel传数据了。嗯,这就是过度治理的教训。
下面这张图,是我常用的数据契约治理框架。它把兼容策略放在核心位置,上下衔接定义层和执行层。
避坑指南:我曾经在一个电商平台推行契约治理,一开始就要求所有接口必须100%兼容。结果业务方抱怨「改个字段要审批三天」。后来我调整策略——核心接口严格管控,非核心接口放宽约束。这才把治理推下去。
总结一下这节的内容。数据契约治理不是搞一堆文档锁在柜子里,而是建立一套让数据提供方和消费方能顺畅协作的机制。兼容策略就是这套机制的核心——它决定了你能在「变」的路上走多远,同时不让「稳」的底线失守。