概念定义
一个查询要三个服务的数据:要么各服务发布进共享读模型(CQRS),要么有谁去问三家再拼接。组合器就是那个谁——代码里的查询侧 join。
工作机制
组合器收请求、带逐调用超时并行调用提供者、按 id 拼接。韧性选项:带显式陈旧/缺失标记的部分结果、降级提供者的缓存回退、掉队者的对冲调用。组合器不拥有数据,只拥有拼接逻辑。
使用场景
跨两三个服务、新鲜度优先于极限延迟、且读量撑不起物化视图维护的读取。规模再往上就该用 CQRS 投影在写入侧预拼接。
常见误区
组合器直连共享数据库会绕过服务所有权、重建分布式单体的数据层。五个以上服务同步组合,p99 就归最慢者所有。可用性是乘法:三个 99.9% 的提供者全量组合约 99.7%——部分结果策略是解药而不是锦上添花。集合上的 join 扇出会把调用乘成 N+1 形态,提供者要提供批量 API;组合器还会静默变成业务逻辑垃圾场——边界要像服务一样评审。