
用分片架构解决噪音邻居问题

多租户平台或混合负载数据处理中,一个租户的突发流量或故障会拖垮整个管道,这就是“噪音邻居”问题。传统单体架构下,所有租户共用一条巨型数据流,一个数据库实例出问题就会产生背压,导致全局延迟甚至 SLA 违约。故障爆炸半径 100%,资源必须按最差租户配置,成本浪费严重,全局 SLA 几乎无法维持。
解决方案是分片 Hub-and-Spoke 架构,将路由与执行解耦。Hub 是一个轻量级数据流任务,只负责从统一源解析租户 ID 或业务域,然后把数据分发到独立的隔离缓冲区(如 Pub/Sub 主题)。缓冲区起减震作用,防止下游慢速写入倒灌回源。Spoke 是多个独立的小型数据流实例,按工作负载分类部署:高优先级租户用专用管道配高资源;中小租户共享管道以优化成本;复杂业务逻辑分离到单独领域专用管道,隔离代码变更影响。
对比传统单体,新架构的故障隔离效果显著:爆炸半径从 100% 降至 <5%(仅影响单个 Spoke);资源可独立按租户负载伸缩,不再全局扩缩;维护时更新一个领域不影响其他。
实施中有三个关键优化:死信队列(DLQ)——不要让一条 SQL 异常卡住整条管道,失败记录转入 BigQuery 或 GCS 后续分析;严格的连接池管理——使用线程安全单例,每个 worker 最大连接池设为 1-2,避免自动扩缩时耗尽数据库连接;异步 I/O——用 GroupIntoBatches 变换缓冲写入,减少连接开销和数据库延迟。


