Agoda将一级酒店价格缓存迁移至DragonflyDB,性能提升与架构优化

Agoda 将其一级酒店价格缓存从 SQL Server 迁移至 DragonflyDB,旨在应对不断增长的读写需求并简化扩容。此次迁移后,P99 读取延迟改善约八倍,系统处理能力显著提升,同时解决了...

互联网/IT

在数字化转型浪潮中,企业对数据存储系统的性能和可扩展性提出了更高要求。近期,旅游平台 Agoda 宣布将其一级酒店价格缓存系统从 Microsoft SQL Server 迁移到内存数据库解决方案 DragonflyDB。这一迁移不仅提升了系统性能,还优化了整体架构设计。

核心迁移背景

Agoda 的一级酒店价格缓存系统此前采用 SQL Server 部署,由 72 个分片构成。该系统存储约 1.5 TB 的易变价格数据,每秒需处理约 30 万次读取和 150 万次写入操作。然而,随着业务规模的扩大,SQL Server 架构逐渐显现出局限性。团队在不到一年内两次扩容硬件容量,但仍接近性能上限。此外,不断增长的工作负载需要额外的清理进程来删除过期供应商数据,进一步增加了运维复杂度。

迁移决策与技术考量

Agoda 首席工程师 Clarkson Chang 表示,继续为 SQL Server 增加资源已不再具有成本效益。团队根据实际工作负载评估了多种方案,最终选择了 DragonflyDB。DragonflyDB 的无共享、多线程架构,以及 Redis 兼容性、基于集群的扩容方式和内置键过期功能,与 Agoda 的价格缓存工作负载高度契合。

具体而言,DragonflyDB 在以下方面展现出优势:

  • 性能提升:迁移后,P99 读取延迟从原来的水平降低至约 8 毫秒(SQL Server 下约为 64 毫秒),改善约八倍。
  • 简化扩容:无需按预先规定的硬件增量进行扩容,且数据迁移过程更加自动化。
  • 减少运维负担:内置键过期功能替代了原有的清理进程,降低了运维复杂度。

迁移实施过程

为了确保平稳过渡,Agoda 采取了分阶段迁移策略。首先,团队使用 memtier_benchmark 复现接近生产环境的 1:6 读写比例,并测试 MGET 操作的性能。随后,部署了一个 1 TB 的 DragonflyDB 实例用于存储热数据,但随着数据自然增长,团队最终扩展至完整的 1.5 TB 数据集。

在切换客户流量之前,Agoda 引入了双重读取机制。Price API 同时从 SQL Server 和 DragonflyDB 获取数据,并通过 Prometheus 指标检查供应商数量和价格数据长度的一致性。当一致性超过 99.9% 后,团队逐步将流量转移到 DragonflyDB。几周后,100% 的流量完成迁移,SQL Server 的读写路径也随之停用。

故障处理与高可用性

为确保系统的高可用性,Agoda 设计了去中心化的故障检测机制。每个应用程序 Pod 独立比较两个集群的缓存命中率,若出现具有统计显著性的差异,则标记其中一个集群为不可读取。在一次故障模拟中,约 40 个应用程序 Pod 在两分钟内自动完成故障切换,无需人工干预。

技术架构对比

图1 展示了 Agoda 迁移前后的架构对比。左侧为 SQL Server 架构,包含 Price API、消息队列和 Price Writer (SQL) 等组件;右侧为 DragonflyDB 架构,引入了 gRPC Gateway 和 Shadow Cache Hit 机制。通过对比可以看出,DragonflyDB 架构更加简洁高效,减少了中间环节,提升了整体性能。

图2:B-cluster 在补丁期间的缓存命中率变化

性能表现与影响

迁移完成后,Agoda 的价格缓存系统每秒处理约 160 万次写入,P99 延迟约为 10 毫秒。图2 显示了 B-cluster 在补丁期间的缓存命中率变化,表明系统在故障处理过程中仍能保持较高稳定性。

此次迁移不仅显著提升了系统性能,还带来了更灵活的扩容模式,减少了过期数据处理和故障切换维护工作。Agoda 的成功经验为其他企业在面对类似挑战时提供了有价值的参考。

总的来说,Agoda 的这次迁移展示了如何通过选择合适的数据库解决方案,有效应对快速增长的数据需求,并实现架构的现代化升级。这不仅是技术层面的成功案例,也为行业提供了关于数据基础设施优化的宝贵经验。