系统中有四种类型的订单,A、B、C、D,原本它们是单独的业务,在微服务架构中也是单独的服务,都有各自的业务表。现在业务希望在客户端的一个页面按照订单的时间来进行排序展示。
一、开始
这是一个典型的数据聚合需求,常用的解决方案如下
| 方案 | 实时性 | 开发成本 | 查询性能 | 架构清晰度 | 描述 |
|---|---|---|---|---|---|
| 方案一:BFF 聚合层 | 实时 | 中 | 差 | ★★★★★ | 在客户端服务查询一个用户的所有数据,然后内存分组展示 |
| 方案二:服务扩展 | 实时 | 低 | 中 | ★★ | 相当于让A服务做聚合层了 |
| 方案三:CQRS 读模型 | 最终一致 | 高 | 高 | ★★★★ | 维护一个就诊订单数据 |
| 方案四:网关聚合 | 实时 | 中 | 中 | ★★★★ | 和方案一类似 |
| 方案五:方案一+方案四 | 实时+最终一致 | 极高 | 高 | ★★★★ | 1. 进行中的就数据用方案一 2. 历史中的数据用方案四 |