Uber将1万亿条记录从DynamoDB迁移至LedgerStore,每年节省600万美元

Uber 迁移支付交易数据至 LedgerStore

Uber 将其支付交易数据从 DynamoDB 和 blob 存储迁移到一个名为 LedgerStore 的定制化数据存储解决方案中。这一迁移旨在降低成本,并简化存储架构。

背景与动机

Uber 在 2017 年构建了其支付平台 Gulfstream,并最初使用 DynamoDB 进行数据存储。由于存储成本上升,Uber 将 DynamoDB 的使用限制为仅存储最近 12 周的数据(热数据),而较旧的数据则存储在 Uber 自建的类似 S3 的服务 TerraBlob 中。

LedgerStore 的构建

为了解决存储成本问题并确保金融交易数据完整性,Uber 开发了 LedgerStore。LedgerStore 是一个不可变的存储解决方案,提供了可验证的数据完整性和正确性保证。它支持强一致性和最终一致性的索引,并通过两阶段提交实现强一致性索引。对于最终一致性索引,LedgerStore 利用其自建的 Docstore 数据库(基于 MySQL 构建的分布式数据库)中的物化视图。

索引管理与查询优化

LedgerStore 支持时间范围索引,以便将旧数据卸载到冷存储中。它从使用 DynamoDB 和 Docstore 存储时间范围索引转向使用 Docstore 数据库,并通过前缀扫描实现高效读取。此外,LedgerStore 自动化了数据重新索引的过程,以便在索引定义发生变化时进行数据重新索引。

迁移过程与挑战

Uber 在迁移数 PB 的金融交易数据到 LedgerStore 时面临了独特挑战。为确保迁移的正确性和 LedgerStore 在生产环境中的性能和可扩展性,Uber 使用了影子验证和离线验证。影子验证通过 Gulfstream 将数据同时写入 DynamoDB 和 LedgerStore,并比较两者的读取数据。离线验证则结合了 Apache Spark 的增量回填作业。

回填过程本身带来了显著问题,因为该过程产生的负载是通常生产负载的十倍,整个过程耗时三个月。工程师们采取了多种措施来控制过程并缓解问题,包括动态速率控制和紧急停止机制。

迁移结果

Uber 在迁移过程中采取了保守的推出策略,并实施了回退机制,即在 LedgerStore 中未找到数据时从 DynamoDB 获取数据。整个迁移成功完成,Uber 在迁移期间和之后未经历任何停机或中断。迁移到 LedgerStore 带来了显著的成本节约,预计每年可节省超过 600 万美元。

后续讨论

这一迁移引发了在 Hacker News 和 Reddit 上的广泛讨论,许多用户讨论了使用云服务与自建解决方案(包括数据库)的优缺点。一些用户质疑推出定制数据存储是否提供了合理的投资回报,考虑到员工工资、维护开销和数据迁移的努力。

总结

Uber 通过迁移到 LedgerStore 实现了显著的成本节约和存储架构的简化。LedgerStore 的设计和迁移过程展示了 Uber 在面对大规模数据处理和存储挑战时的创新和工程能力。

阅读 24
0 条评论