据MarkTechPost报道,Meta工程团队推出ZGateway,这是一种位于客户端应用与ZippyDB之间的无状态代理层。ZippyDB是Meta使用最广泛的关键值存储,支撑产品元数据、计数器和配置,每秒处理数十亿次操作;ZGateway目前承担其约40%流量,并计划提升至60%以上。

ZGateway最初用于解决超过100万个客户端主机带来的连接膨胀。直接访问模式下,每个ZippyDB客户端都要连接其所需的每个数据库主机;单个客户端可能触及数十万个主机上的数万个分片,典型客户端和数据库主机各自承载数万条TLS连接。空闲连接在两端消耗内存、CPU和文件描述符。重连风暴曾因文件描述符耗尽和内存溢出导致崩溃;一次路由漏洞让每个客户端为每个分片建立连接,整个集群陷入反复重启。由于客户端群由数百个团队拥有,客户端侧修复不现实。

ZGateway位于ZippyDB客户端和ZServer数据库集群之间。据Meta介绍,它每秒处理超过10亿次操作,承载约40%的ZippyDB流量,预计将超过60%,平均用例计算开销约6%。它通过Meta服务网格ServiceRouter以区域层形式被发现,有纯代理和读穿缓存两种形态,引擎是Meta的厚C++ ZippyDB客户端,因此ZGateway本质上是作为托管服务运行的ZippyDB客户端。客户端通过粘性连接向区域ZGateway主机发送请求,后者终止TLS,按用例ACL授权,执行按租户的准入控制和整形,解析分片,在缓存层检查本地缓存,将请求与该分片的其他在途工作批量合并,然后转发给正确副本。响应解复用返回,并记录按用例的指标、追踪和配额使用。

Meta用球入箱模型描述集群扇入扇出。以20个区域、50万个数据库主机、3万个代理主机、100万个客户端和每个客户端5万个分片为模拟数字,每主机连接数下降约97%至98%,总持久连接数减少约19倍。更深的收益在扩展性:直接访问的扇入随客户端数量线性增长,而ZGateway的扇入降至大致等于区域数乘以每主机分片密度,并且独立于客户端和数据库两个集群的规模。

ZGateway还集成多项能力。安全迁移通过按服务和分片前缀限定的配置标志提供百分比爬坡、区域过滤和全局终止开关。判别式负载削减DLS把请求映射到按租户、按优先级划分的桶,并以轮询方式排空。在一次CPU超过90%的受控过载中,约1350个租户桶里只有6个吵闹邻居被削减负载,其余执行了99.9%的请求且零拒绝,有效吞吐保持在97%至98%,机制成本约占8% CPU。读缓存层在进程内服务热读,未命中时对每个键加填充锁,并通过变更数据捕获事件在有界陈旧性契约下保持新鲜。负载均衡器按近期CPU负载反向调整主机的ServiceRouter权重,层内混合约26核至126核主机;全局路由、超级区域和环支持饱和区域层向附近健康容量故障转移。客户端侧事务记账已移入网关,分九个阶段覆盖100%事务流量,未出现可靠性回退。

据MarkTechPost报道,ZGateway无法在Meta之外部署,其价值在于所展示的模式而非可打包产品。跨客户端批处理和合并消除了热键踩踏,并让一些脆弱的客户端库退役。Meta称,代理把数据库扇入从随客户端数量线性增长转变为Meta可控制的有界数量。