镜像:读的人都读镜像
数据源留在原地,发布端只推变化;断了,页面看得见。

本课目标
读完这一课,你将能够
- 说出「镜像」和「直连」的区别,以及发布端在其中做什么
- 按数据源的类型,选「源头推送」还是「增量探针」
- 说出数据源断了,为什么页面上能看得出来
原件留在原地
镜像不是把数据复制一份放着不管。它是数据源在 Semantic 里的只读映像:发布端装在数据源旁边,只出站,发现变化才把一批数据推上来;Semantic 按顺序落账,几秒内通知订阅它的应用。应用、智能体和 SQL 读的都是这一份。
- 01数据源ERP、MES、OA,只读
- 02发布端变了才推,只能往一条数据流发布
- 03变化账按序落账,保存最新状态
- 04对象绑定成订单、工单这样的对象
- 05读的人应用、智能体、SQL 读同一份
关键是「读得多,变得少」。一个数据源被几十个脚本各查一遍,多数查询的结论都是「没变」。镜像把几十份查询收成一份增量,数据源也不再被轮流敲。
怎样发现变化
发布端之后的链路,对所有数据源都一样;不同的只是怎么知道「变了」。能推送就推送;源头推不了,才在数据源旁边放一个便宜的增量探针。
| 最好:源头推送 | 其次:增量探针 | |
|---|---|---|
| SAP | 业务事件、IDoc / 变更指针 | 按录入时间或计数器增量读 |
| SQL Server | Change Tracking / CDC(DBA 开启一次) | rowversion 或更新时间水位;都没有时,对「当天范围」做汇总指纹 |
| PostgreSQL | 逻辑复制、LISTEN / NOTIFY | 只读热备:按复制位置门控,限频查询 |
| 金蝶 / 用友 / SaaS ERP | 开放平台 webhook、业务事件订阅 | 开放 API 按修改时间增量拉 |
| OA | 流程节点动作调 HTTP | 按流程表的修改时间水位 |
| 企业微信 / 钉钉 / 邮件 | 事件回调、Stream 模式、IMAP IDLE | — |
探针也有讲究:只问「有没有变」(水位、版本号),变了才取明细;一个探针服务所有订阅者,不是每个看板一个。
断了,要看得见
直连加定时任务最危险的一点是静默:数据源断了,脚本照样「跑完了」,页面停在昨天。镜像反过来——每条数据流都带着发布端的健康状态。
在线 / 离线
发布端每 30 秒一次心跳;90 秒没有,订阅端就看到「离线」。
正常 / 部分异常 / 连不上数据源
适配器每一轮自报健康。数据源不通时,页面可以直接写「数据可能不是最新」。
不丢、不重
发布失败带着幂等 id 重试;订阅端断线后按序号续传。
定期校准
每 6 小时一次全量校准,纠正长时间累积的偏差。
别把镜像用歪
- 探针查明细:探针每一轮都全量取数再比对,它就成了新的定时任务。探针只问「有没有变」,变了才取明细。
- 一个看板一个发布端:一个数据源一条数据流,多个应用订阅;不要每个看板各装一个。
- 拿镜像做要求精确的决定:镜像有延迟,通常是几秒到几分钟。要一锤定音的操作,回到数据源确认。
- 把明细全推上来:数据流只收声明过的字段;证件号、银行卡、密码这类字段直接拒绝。
要点
- 镜像是数据源在 Semantic 里的只读映像:原件留在原地,读的人都读镜像。
- 能推送就推送;源头推不了,才用便宜的增量探针,且只问「有没有变」。
- 一个数据源一条数据流,多个应用订阅,不是每个看板一个发布端。
- 数据流带着发布端的健康状态:断了,页面看得见,不再静默变旧。
练一练
给一个数据源设计镜像
选你最常被读的那个数据源。
写下它有什么变化信号:推送事件、Change Tracking 或 CDC、更新时间水位,还是都没有。
对最重要的一块看板,写出你能接受的最长延迟,单位用秒或分钟。
写出发布端离线两分钟时,页面上应该显示什么,谁会收到通知。
小测
选一个答案,马上看解析。
Q1数据源不支持推送,只有一列「最后更新时间」。发布端应该怎么做?
水位加增量是最便宜的探针。全表比对就成了新的定时任务,各自去查则回到了直连。
Q2看板上出现「数据可能不是最新」,说明什么?
数据流带着发布端的健康状态,正是为了让「断了」不再是静默的。
Q3为什么一个数据源只需要一条数据流?
订阅是共享的。多装发布端等于把「每个看板各查一遍」搬进了镜像里。