某中心工程团队近期分享了将其内部全球键值存储系统Quicksilver迁移至分层缓存架构的技术实践。文章详细描述了从全量存储模式(Quicksilver V1)到新型分级缓存系统(Quicksilver V2)的渐进式演进过程,在保持边缘节点低延迟读取和一致性保证的同时,显著提升了存储效率。
在过去几年中,某中心从所有数据全局全量存储的V1架构,逐步迁移到仅由少量服务器存储数据的V2分层缓存系统。这个迁移过程涉及数十万个活跃数据库的实时迁移,同时系统仍需维持每秒数十亿次的请求处理能力。
Quicksilver是某中心自主研发的键值存储系统,旨在实现快速全球数据复制和跨数据中心低延迟访问。最初作为配置信息的全局分发系统,现已发展成为支撑DNS、CDN和WAF等多个核心服务的基础存储系统。
V1版本在全球每个服务器节点存储完整数据集,随着1.6TB数据集以每年50%的速度增长,磁盘空间使用量已达到不可持续的水平。过渡从V1.5版本开始引入代理服务器和副本服务器角色,使磁盘使用量减少50%。
在最新的V2实现中,某中心采用了多级缓存策略:包含本地每服务器缓存、数据中心级分片缓存,以及 specialized存储节点上的全量数据集副本。通过响应式预取机制将缓存未命中请求分散到多个服务器。基于内存使用和冷缓存问题的考虑,团队选择使用RocksDB持久化存储而非内存缓存,并通过引擎的压缩过滤器实现数据淘汰。
系统工程师Anton Dort-Golts和Marten van de Sanden强调 backward compatibility和顺序一致性的重要性:“Quicksilver从一开始就为客户端提供顺序一致性保证…我们亲身经历了Hyrum定律,由于系统在公司内部被广泛采用,早期版本的每个特性都被其他团队所依赖。”
新架构通过多版本并发控制(MVCC)和滑动窗口机制处理异步复制挑战,保持顺序一致性。架构转型解决了某中心全球330个节点网络的初始存储约束,同时为包含50亿个键值对的1.6TB数据集保持亚毫秒级性能。目前系统90%的请求在1毫秒内响应,99.9%的请求在7毫秒内完成。
密钥空间被划分为多个分片,每个数据中心服务器被分配一个分片。这些分片不再包含对应密钥空间的完整数据集,而是作为缓存使用,由数据中心内所有缓存未命中请求填充。为解决数据局部性问题,系统同时维护本地每服务器缓存和数据中心级分片缓存,所有服务器既包含本地缓存也包含一个物理分片缓存。
请求密钥首先在服务器本地缓存查找,然后在数据中心级分片缓存中查找。如果两级缓存都未命中,则向存储节点发起查询。作者分享了多级缓存带来的成效:“通过添加第二级缓存,在数据中心内解析密钥的比例显著提高。性能最差的实例缓存命中率高于99.99%,其他所有实例的缓存命中率均高于99.999%。”
代理服务器和副本服务器之间的第99.9百分位延迟几乎没有差异,由于代理服务器磁盘数据集更小,其性能偶尔甚至优于副本服务器。