Google App Engine 上的 Django 应用程序是如何构建的?

How is a Django app on Google App Engine structured?

我已经通读了 Google 关于 App Engine 的所有文档和各种其他博客文章,但我仍然对 Django 应用程序的结构没有清晰的认识 运行应用引擎。

据我所知,App Engine 实例附加到一个 SQL 数据库,Google 提供自动缩放和自动负载平衡,将根据当前情况复制您的 SQL 数据库加载。

这在 Django python 代码中意味着什么?部署 Django 应用程序似乎只需要 运行 glcoud app deploy。如果 App Engine 实例的 SQL 数据库实时自动扩展和复制,Django 应用程序是否与它们一起复制?还是所有 HTTPS 请求都将通过单个 Django 应用程序,无论复制如何?

此外,Django 后端代码物理上 拥抱它所连接的数据库吗?

  1. 据我所知,App 引擎实例附加到一个 SQL 数据库。

App Engine 实例不附加任何东西。您还需要使用 MySQL 或 Postgres 部署 Cloud SQL 实例,然后使用 Cloud SQL 代理将您的应用程序连接到该实例。使用 Cloud SQL 不是强制性的,您也可以 运行 MySQL 在 Compute Engine 甚至第三方平台上,但您需要确定将其连接到您的应用

  1. Google 提供 auto-scaling 和自动负载平衡,将根据当前负载复制您的 SQL 数据库。

如前所述here You cannot autoscale a database instance, neither in Cloud SQL nor in any other infrastructure support. What Google Cloud SQL provides you is with a fully managed instance, this means that you don't have to worry about backups, patches, and fixes. Also, Cloud SQL provides you with High availability in the case of your instance fails to reduce a lot the downtime of your application, also provides you with an easy way to add read replicas,提高读取操作的性能。

  1. 这在 Django python 代码中意味着什么?可能您想看看 Github sample and the running Django on App Engine quickstart.

  2. 部署 Django 应用程序似乎只需要 运行 glcoud app deploy。这并不准确,您可以 运行 glcoud app deploy 将任何有效的应用程序部署到 App Engine,在 python 中,最小应用程序需要一个 main.py 文件,一个 requirements.txt , 和一个 app.yaml 文档。对于 Django,您需要您的有效 Django 应用程序 + 您的 app.yaml 文件(查看第 3 点中的 git 存储库)

  3. 如果 App Engine 实例的 SQL 数据库在 real-time 中自动扩展和复制,Django 应用是否会与它们一起复制? 同样,没有这样的 App Engine SQL 数据库。数据库实例将 运行 独立于您在 App Engine 中的应用程序。当您的 App Engine 应用程序 auto-scales 您的云 SQL 实例(或计算引擎,如果您决定这样做)将保持原样,它是 App Engine 的 "agnostic" 及其行为与 App Engine 相同,您的 App Engine 实例不知道您的云 SQL 的复制行为。您将在它们之间来回发送请求。

  4. 或者无论复制如何,所有 HTTPS 请求都会通过单个 Django 应用程序吗? 您可以在 App Engine 运行 中同时拥有多个实例,它们将通过 Cloud SQL proxy 而不是 HTTP 请求在您的 Cloud SQL 数据库中来回发送请求。

  5. 此外,Django 后端代码是否在物理上拥抱它所连接的数据库?同样,您的 Django/App 引擎应用程序是一回事,您的云 SQL 数据库是另一回事,它们将通过云 SQL 代理相互通信。所以没有拥抱或身体接触,只是“社交距离

希望对您有所帮助