ZGateway:在ZippyDB前部署代理的经验与教训

ZGateway:在ZippyDB前部署代理的经验与教训

💡 原文英文,约3200词,阅读约需12分钟。
📝

内容提要

Meta推出ZGateway代理层,置于ZippyDB键值存储前,统一客户端流量。它通过连接管理、请求批处理、负载均衡和准入控制,将百万级客户端与数据库的密集连接网格压缩为可控层级,降低约97%连接数,支持跨区域容灾,并计划未来实现全流量统一及AI驱动的智能运维。

🔎

延伸解读

代理层为何能大幅降低连接数

文章用“球与箱”模型解释了连接数下降的数学原理:直接访问时,每个客户端需连接其访问的所有分片所在主机,形成密集的网状连接;而引入ZGateway后,客户端只需连接就近的代理,数据库主机也只接受代理的连接。模型估算显示,每个主机的连接数可减少约97%至98%,总持久连接数也下降约19倍。关键在于,连接数不再随客户端规模线性增长,而是由代理层可控的规模决定。

批处理与合并的额外价值

ZGateway的批处理不仅能降低开销,还能应对热点键问题:当多个客户端同时请求同一键时,代理可合并为一次后端读取,避免热点键引发对单个副本的流量冲击。此外,代理层能跨客户端合并请求,这是客户端库无法实现的,因此Meta得以淘汰脆弱的客户端批处理库。批处理还通过延迟窗口平滑微突发流量,并因按QPS计费而帮助租户节省配额。

准入控制与负载均衡的实践

ZGateway采用判别式负载丢弃(DLS)实现租户隔离:每个租户有独立桶,按优先级轮询,当某租户过载时仅丢弃其自身请求,不影响其他租户。在CPU超过90%的受控过载测试中,约1350个活跃租户桶中仅6个被丢弃,其余租户的请求执行率达99.9%。负载均衡方面,由于代理无状态,控制平面根据CPU使用率动态调整权重,并采用自适应策略应对不同状态,如热点或任务抖动。

跨区域容灾与未来演进

ZGateway通过全局路由、大区域和环三种机制实现跨区域故障转移,避免区域级故障时本地排队而浪费健康容量。未来计划包括:用AI代理自动调优启发式参数、将部分网关与数据库主机共置以减少延迟、以及拆分多进程以增强故障隔离。这些方向旨在将ZGateway从智能层转变为可编程层,实现更灵活的控制和部署。

Q&A

ZGateway是什么?它在Meta的ZippyDB架构中扮演什么角色?

ZGateway是Meta在ZippyDB键值存储前引入的代理层,用于统一客户端流量。它位于ZippyDB客户端和数据库(ZServer)之间,通过连接管理、请求批处理、负载均衡和准入控制等功能,将百万级客户端与数据库的密集连接网格压缩为可控层级,降低约97%的连接数,并支持跨区域容灾。

为什么ZippyDB需要引入代理层?直接访问模式存在哪些问题?

直接访问模式下,每个客户端需要连接到它需要的每个数据库主机,形成密集的多对多TLS连接网格。这导致资源浪费(每个连接消耗内存、CPU和文件描述符),并且随着客户端数量增长,数据库主机的入站连接数线性增加,可能引发连接风暴,导致主机崩溃(如文件描述符耗尽和OOM)。代理层可以解耦客户端和数据库,将连接网格压缩为可控的两跳,提高可靠性和可管理性。

ZGateway如何实现连接数的显著降低?具体能降低多少?

ZGateway通过将客户端与数据库的直接连接改为客户端到代理、代理到数据库的两跳结构,使得每个客户端只需维护到区域代理的粘性连接池,而数据库主机只看到来自代理层的连接。根据模型估算,每个主机的连接数减少了约97-98%,端到端总持久连接数也下降了约19倍。

ZGateway的请求批处理和合并(coalescing)机制是如何工作的?它带来了哪些好处?

ZGateway的共享批处理器按用例和物理分片对发往同一目的地的请求进行分组,合并为一个后端RPC。同时,如果多个调用者同时请求相同键,网关只获取一次并广播结果。这减少了后端请求数量,降低了QPS和CPU开销,平滑了微突发流量,并避免了热键导致的惊群效应。此外,批处理还帮助客户节省速率限制配额,并允许移除客户端侧的批处理库。

ZGateway如何实现租户隔离和准入控制?

ZGateway使用判别性负载丢弃(DLS)机制实现租户隔离。每个请求映射到按用例和优先级划分的租户桶,桶以轮询方式排空。当某个租户过载时,其桶填满并丢弃多余请求,而其他租户不受影响。此外,还有CPU并发控制器和内存处理器来防止资源耗尽。在测试中,即使CPU超过90%,只有6个真正的噪声邻居被丢弃,其他租户的请求成功率保持在99.9%。

ZGateway如何支持跨区域容灾?

ZGateway通过三种机制支持跨区域容灾:全局路由(构建跨区域路由表,使饱和的区域故障转移到健康区域)、大区域(将地理上接近的区域分组,使溢出流量就近处理)和环(明确声明哪些区域互为备份及比例)。这些机制通过百分比旋钮按层和区域启用,并且故障转移信号基于更敏锐的指标,以便在区域过载前触发。

ZGateway未来有哪些发展方向?

ZGateway的未来方向包括:1)AI代理驱动的启发式调优,将控制循环和参数暴露为结构化控制面,让AI代理监控和调整;2)与ZServer共置,将部分网关功能下推到数据库主机附近以减少延迟;3)多进程网关,将不同职责分离到独立进程以实现故障隔离。这些方向旨在将ZGateway从智能层转变为可编程层。

🏷️

标签

➡️

继续阅读