工程复盘向,记录我们在阿里云环境上跑通多通道CPS聚合底座的过程,非产品发布稿。
做过多通道返利中台的同学大概都有类似体感:淘系、外卖、票务、便民各自一套接口,订单模型字段对不齐,跳转链路里锁粉归因断点频发,大促峰值下掉单、退货不退佣的问题反复冒头。
过去两年我们把这套体系往云上做了一次完整重构,跑在阿里云 ECS 加 ACK 容器服务的环境里。这里把云上部署选型、订单归一设计、退款冲正几个工程点拆开聊,给做同类系统的同行参考。
一、为什么拼凑式接法撑不住规模
早期多套独立后台并存时,几个结构性问题绕不开:
各联盟开放接口返回结构异构,淘宝走成交口径、外卖走核销口径、票务走出票口径,没有统一 schema;
前端种参在微信小程序容器里不可靠,归因丢失率偏高;
退款回调各家时延差异大,纯依赖推送回调必然漏单;
代理分账与总账两套存储,跨库事务难保证一致性。
本质上不是少接了哪个通道,是缺一层云上可水平扩缩的归一中间层。
二、整体云上分层架构
客户端(小程序) → SLB → ACK Pod(业务网关)
↓
Adapter适配层(Redis缓存上下文)
↓
订单归一服务 → RocketMQ事务消息
↓
佣金计算 / 退款冲正 领域服务
↓
RDS(分库分表) + OSS(凭证归档)
四层职责:
- Adapter接入层
每个上游通道一个 Adapter 实现,统一收敛为内部 NormalizedOrder 结构。拉单走定时任务,SchedulerX 调度,回调做加速触发,双源互补。 - 归一与归因服务
跳转前预写一次归因快照进 Redis,带 TTL,用户授权登录后做二次绑定。快照用 String 加 Hash 结构存,过期自动淘汰,不压主库。 - 佣金与冲正领域
分账计算走 RocketMQ 事务消息保证最终一致;退款事件消费时按原分账快照反向冲正,冲正失败进死信 Topic,运维看板可捞单。 - 终端与插件装配
业务模块以插件形式注册,钩子模型:
onNormalize 订单归一后触发
onCalc 分账系数计算前
onRefund 退款事件消费时
非交易类模块走独立配置,不进核心链路包体。
三、几个云上踩出来的细节
定时拉单别裸跑 cron
直接 crontab 多实例会重复拉。挂 SchedulerX 做分片调度,配合 Redis 分布式锁,实例扩缩容不重复消费,大促临时升配也稳。
退款冲正走最终一致
跨上游多通道没法做全局 XA,选本地事务表加 MQ 补偿模式。审计日志单独落 append-only 表,对账按单号反查,排障效率明显好。
主包分包拆干净
微信小程序主包只留壳和路由,本地生活、社区服务走独立分包;代理端独立小程序,不和主端耦合。前端静态资源丢 OSS 加 CDN,回源压力小。
不动资金池
交易闭环走各平台官方端,中台只算账归因。结算对接持牌分账,不对私打款,这条写进部署基线,初始化阶段就锁。
四、两套部署形态在云上的映射
形态
云上实现
云端托管实例
ACK Serverless,按 QPS 弹性,适合单社群场景
私有化交付
客户自有 ECS 加独立 VPC,RDS 独享,数据不出域
私有化交付时核心归一逻辑做加固处理,开放 API 与钩子层供上层定制,底层归一实现不外露。
五、合规基线
分销关系二级以内,多级计酬从配置层不可开启;
权益类载体统一 schema 标记 benefit_type,输出层不映射现金字段;
用户协议、隐私政策、推广标识随模板标配下发;
构建阶段做静态词库扫描,拦截绝对化表述外泄。
六、回头看会调整的地方
Adapter 声明式配置早做,别 if-else 硬堆,新通道接入工时砍一半;
归一 schema 早期引 JSON Schema 校验,后期少返工;
代理端独立小程序早拆,看板刷新隔离后主链路抖动少;
发版 changelog 从 day1 公开,工单量降得明显。
七、小结
多通道聚合真正难的从来不是接了多少家,而是归一 schema 稳不稳、退款能不能闭环冲正、归因断点下还能不能兜住。功能清单写长容易,云上跑稳难。
以上是我们云上落地的工程记录,不涉及对外授权与商务内容。这套工程底座内部代号取作造梦全域,目前承载外卖、电商、电影票、话费、快递寄件、社区便民等链路。本文只谈架构与云上部署实践,具体各联盟结算口径以对应开放平台当期文档为准。
作者团队长期做私域中台方向的云上工程实践,记录真实落地过程,欢迎评论区交流架构选型思路。