Agoda将其一级酒店价格缓存从采用72个分片的Microsoft SQL Server部署迁移至内存数据存储系统DragonflyDB,以应对持续增长的读写量并简化扩容。该缓存存储约1.5TB易变价格数据,每秒处理约30万次读取和150万次写入。迁移后,Agoda报告P99读取延迟改善约八倍,DragonflyDB在每秒约30万请求时P99延迟约为8毫秒。
原有架构需由应用程序在72个SQL Server分片之间路由,扩容须按预先规定的硬件增量进行,并手动重新映射分片和迁移数据。团队在2024年初将硬件容量翻倍后,不到一年又接近容量上限,同时还需单独的清理进程删除过期供应商数据。Agoda首席工程师Clarkson Chang表示,继续为SQL Server增加资源并非可行或有成本效益的长期策略。
团队基于真实工作负载而非公开基准评估DragonflyDB。其无共享多线程架构、Redis兼容性、基于集群的扩容方式和内置键过期功能,与大量使用MGET和SET的价格缓存工作负载相吻合。Agoda先用memtier_benchmark复现接近生产环境的1:6读写比例及平均涉及10个键的MGET操作,随后分阶段迁移:先部署1TB实例存储热数据,再改为每集群三分片设计并扩展至完整1.5TB数据集,最终集群每秒处理约160万次写入,P99延迟约10毫秒。
切换流量前,Agoda引入双重读取,SQL Server继续服务请求,Price API异步从DragonflyDB获取数据,通过检查供应商数量和价格数据长度输出Prometheus指标,两个维度一致率均超99.9%。随后通过A/B实验逐步迁移客户流量,几周后100%流量完成迁移,SQL Server读写路径停用。故障处理方面,每个应用Pod依据本地五分钟观测数据独立比较两个集群缓存命中率,差异达10个百分点即标记某集群不可读,恢复需差异缩小至3个百分点以内;一次故障模拟中约40个Pod在两分钟内完成故障切换,无需人工干预。