【问题标题】:How is a Django app on Google App Engine structured?Google App Engine 上的 Django 应用程序是如何构建的?
【发布时间】:2020-09-30 08:11:01
【问题描述】:

我已经阅读了所有关于 App Engine 的 Google 文档和各种其他博客文章,但对于在 App Engine 上运行的 Django 应用程序的结构,我仍然没有一个清晰的概念。

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

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

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

【问题讨论】:

  • 嗯也许你应该直接联系谷歌我在文档中也找不到它

标签: django google-app-engine google-cloud-platform django-rest-framework cloud-sql-proxy


【解决方案1】:
  1. 据我所知,应用引擎实例附加到一个 SQL 数据库。

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

  1. Google 提供自动扩展和自动负载平衡功能,可根据当前负载复制您的 SQL 数据库。

here 所述,您无法在 Cloud SQL 和任何其他基础架构支持中自动扩展数据库实例。 Google Cloud SQL 为您提供的是完全托管的实例,这意味着您不必担心备份、补丁和修复。此外,Cloud SQL 为您提供High availability 在您的实例失败的情况下大大减少您的应用程序的停机时间,还为您提供了一种简单的方法来添加read replicas,从而提高您的读取操作的性能。

  1. 这对于 Django python 代码意味着什么?可能你想看看Github samplerunning 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 repo)

  3. 如果 App Engine 实例的 SQL 数据库实时自动扩展和复制,Django 应用程序是否与它们一起复制? 同样没有这样的 App Engine SQL 数据库。数据库实例将独立于 App Engine 中的应用程序运行。当您的 App Engine 应用程序自动扩展您的 Cloud SQL 实例(或计算引擎,如果您决定采用这种方式)将保持与以前完全相同,它与 App Engine 及其行为“无关”,对于 App Engine 也是如此,您的 App Engine 实例与 Cloud SQL 的复制行为无关。您将在它们之间建立一个来回发送请求的连接。

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

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

希望对你有帮助

【讨论】:

  • 克里斯,感谢您详尽的回答我现在更了解前提了。但是,由于 Cloud SQL 数据库从不进行任何自动缩放,App Engine 如何根据 Django 应用自动缩放?它是否复制 Django 应用程序并在另一台计算机上运行它?最后,为什么 App Engine 与他们的数据库有社交距离?让他们成对出现不是更快吗?
  • 嗯,App Engine 会自动缩放,因为它会为任何其他应用程序执行此操作。更多流量>更多实例,更少流量>更少实例(仍然一个实例可以服务多个请求)。这意味着 App Engine 在更多实例中运行您的应用程序(仅 App 端)需要时间来服务于流量的增加,然后它将杀死这些实例。现在,如果数据库“物理地”附加到这些实例会发生什么?这意味着每次终止实例时您都会丢失数据。这就是 Cloud SQL 不自动扩缩的原因,因为自动扩缩意味着您将丢失数据。
  • 换句话说,App Engine 面向与Stateless Oriented Apps 一起工作,然后,您将在Stateful databse 中的会话之间持久化数据
  • 另外,请记住,如果您将 App Engine 服务和 Cloud SQL 服务定位在同一区域和地区,则几乎不会因为数据在数据中心之间传输而产生延迟;-D跨度>
  • 这是有道理的。你对克里斯非常有帮助,我祝你一切顺利。
猜你喜欢
  • 2013-12-20
  • 2018-02-06
  • 2015-04-15
  • 2010-12-29
  • 2012-04-26
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多