【问题标题】:How to make Django migrations on Google Cloud Platform?如何在 Google Cloud Platform 上进行 Django 迁移?
【发布时间】:2018-07-27 06:24:53
【问题描述】:

我想在 Google App Engine 上托管我的应用程序,并为数据库提供一个 Google SQL 实例。该应用程序的主要部分是使用 Django Rest Framework 构建的 API。当我需要修改数据库的架构时,我向 Google Cloud Support 询问了在生产环境中进行迁移的最佳做法。由于我是 Web 开发新手,也许这里的任何专家都有类似的经验,并且可以验证建议的过程是否是我真正可以遵循的?

对于数据库迁移最佳实践,您可以为 Cloud SQL 数据库创建一个单独的开发/测试/备份实例。例如,假设您的生产数据库实例是 DB1,创建一个名为 DB2 的开发实例,其中包含 DB1 的所有表。之后,将您的应用程序配置为临时指向 DB2 实例。请确保两个实例同步并更新。然后,部署指向 DB2 的应用程序的新版本,以便您可以更新 DB1(添加新表、列)作为生产环境中的官方数据库实例。然后您可以再次将其指向 DB1 并更新 DB2。

【问题讨论】:

    标签: django google-app-engine google-cloud-platform google-cloud-sql


    【解决方案1】:

    拥有第二个 CloudSQL 来执行迁移确实是一个很好的做法。我建议:

    1. 部署新的 App Engine 版本,它使用新的 db 架构,但尚未将流量定向到它(使用 gcloud app deploy --no-promote
    2. 克隆您的 CloudSQL 实例以创建一个新实例,您将在其中运行迁移
    3. 在本地机器上,配置Cloud SQL Proxy 指向这个新的CloudSQL 实例并运行python manage.py migrate
    4. 迁移完成后,将流量定向到新的 App Engine 版本。

    在生产环境中,当您执行步骤 2 到 4 时,您的新 CloudSQL 实例将缺少写入第一个实例的数据。完全避免这种情况的最简单解决方案是在迁移期间停止您的 App Engine 应用。但是,如果您无法承受一些停机时间,则需要在克隆第一个实例后跟踪对它所做的更改,并将这些更改手动应用于新实例。

    【讨论】:

    • 感谢您的回答。将牢记此蓝图。
    • 在复制的数据库上执行迁移是否值得同步在此过程中写入的更改?当然最好只在实时系统上执行迁移而不是安排停机时间?
    • 这是一个非常低效的解决方案。一个数据库可能有数 TB 大,并且每小时可能会进行数次部署。
    【解决方案2】:

    我认为建议的解决方案的替代方案是创建 read replica 并将您的应用流量定向到只读副本,同时在写入实例上执行此类迁移。

    请注意,这需要快速迁移。

    它也可以是夜间操作或在站点可以进行维护的低流量期间。

    有关更多高可用性应用程序,您可能想查看 https://www.braintreepayments.com/blog/ruby-conf-australia-high-availability-at-braintree/

    【讨论】:

      猜你喜欢
      • 2020-04-08
      • 2020-05-03
      • 2020-06-14
      • 2021-11-15
      • 1970-01-01
      • 2021-06-27
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多