构建一个更好且可扩展的数据迁移系统

主要观点:

  • 介绍了新的 Rust 网络框架 rwf 及其处理数据库迁移的方式,指出其存在的问题,引出对更好的数据迁移解决方案的思考。
  • 定义了数据库、应用、大型数据库等术语,明确了迁移的定义和要求,如 timeless、scalable、easy to use、可证明正确性等。
  • 以 GitLab 为例,说明其在数据库迁移方面面临的问题,如传统方法不再适用、代码复用困难、监控困难等。
  • 分析了现有解决方案面临的问题,如假设迁移是 timeless 的但实际并非如此、缺乏对扩展性的理解、缺乏推动更好解决方案的项目、不同项目需求不同等。
  • 提出了更好的解决方案,包括迁移必须是函数、针对特定 VCS 修订运行迁移、将迁移分为预部署和后部署迁移、提供处理大型数据迁移的手段、使测试迁移容易等。

关键信息:

  • rwf 生成向前和向后迁移的 SQL 文件,基于迁移方向评估文件。
  • GitLab 数据库规模增长导致传统迁移方法不再适用,采取了拆分迁移、定义独立类等措施。
  • 现有迁移系统存在假设迁移 timeless 但实际不然、缺乏对扩展性理解等问题。
  • 更好的解决方案包括迁移为函数、针对 VCS 修订运行、拆分迁移、处理大型数据迁移、易于测试迁移等。

重要细节:

  • GitLab 数据库从 2015 年的 200 - 300GiB 增长到 2021 年的 1 - 2TiB,曾因意外删除整个生产数据库而使数据库大小为零。
  • 现有迁移系统在处理复杂迁移时会出现代码重复、依赖不稳定、缺乏测试等问题。
  • 更好的解决方案中,迁移函数应提供双向操作,可针对特定 VCS 修订运行,拆分迁移以适应不同阶段,具备处理大型数据迁移的能力和易于测试的手段。
阅读 11
0 条评论