ZGateway:在 ZippyDB 前加一层代理的教训
来自 Meta Engineering · 期号 2026-09-04
摘要
Meta 最广泛使用的键值存储 ZippyDB 面临客户端规模膨胀带来的连接风暴和可靠性瓶颈。 ZGateway 是位于 ZippyDB 客户端与数据库之间的无状态代理层,将百万级客户端与数十万数据库主机之间的密集多对多连接网格,压缩为两段可控的跳转。它目前承载约 40% 的 ZippyDB 流量,仅增加约 6% 的计算开销,预计将增长至 60% 以上。 核心价值在于改变了扩展行为:在直连模式下,数据库主机的入站连接数随客户端数量线性增长;引入代理后,该数字仅取决于区域数量和分片密度,与客户端规模解耦。模型估算显示,单台主机的连接数减少了约 97-98%。 代理层还实现了跨客户端的请求批处理与合并。多个客户端对同一键的并发读取,在网关层合并为一次后端请求,消除了热键场景下的惊群效应。此前依赖客户端侧库实现的批处理方案脆弱且消耗 CPU,现已可退役。 ZGateway 还内置了基于判别式负载丢弃(DLS)的租户隔离机制。在超过 90% CPU 的受控过载测试中,约 1350 个活跃租户桶里只有 6 个实际噪声邻居被限流,其余 1344 个桶的请求零拒绝率。 本文是 Meta 工程团队对 ZGateway 设计思路与落地经验的详细复盘。