为啥在 Google App Engine 上使用 Django?
Posted
技术标签:
【中文标题】为啥在 Google App Engine 上使用 Django?【英文标题】:Why use Django on Google App Engine?为什么在 Google App Engine 上使用 Django? 【发布时间】:2010-12-28 10:34:29 【问题描述】:在研究 Google App Engine (GAE) 时,很明显使用 Django 在 GAE 上使用 Python 进行开发非常流行。我一直在网上搜索有关使用 Django 的成本和收益的信息,以了解 为什么 它如此受欢迎。虽然我已经能够找到关于如何在 GAE 上运行 Django 以及这样做的各种方法的各种资源,但我还没有找到任何关于为什么的比较分析em> Django 比使用 Google 提供的 webapp 框架更可取。
明确地说,为什么在 GAE 上使用 Django 对于具有 Django 现有技能集的开发人员(毫无疑问是大多数 Python Web 开发人员)或 Django 中现有代码(使用 GAE 更像是一种移植)非常有用锻炼)。然而,我的团队正在评估 GAE 是否用于一个全新的项目,而我们现有的经验是使用 TurboGears,而不是 Django。
当 BigTable 库已经取代了 Django 的 ORM,会话和身份验证必然会发生变化,并且 Django 的模板(如果需要)在不使用整个 Django 堆栈的情况下可用时,很难确定为什么 Django 对开发团队有利。
最后,很明显,使用 Django 确实具有提供“退出策略”的优势,如果我们以后想摆脱 GAE 并需要一个平台来针对外流。
我非常感谢您指出为什么使用 Django 比在 GAE 上使用 webapp 更好。我也完全没有使用 Django 的经验,因此详细说明适用于 GAE 的较小功能和/或便利对我来说也很有价值。
【问题讨论】:
天哪,特里布拉德肖写代码? Django 是有益的,因为它很棒。就是这样。 :) 我也是 Google 应用引擎的新手,即使在 2018 年,这也是一个非常完善的问题(尽管 Django ORM 现在似乎在 GAE 上得到了更好的支持)。 :) 【参考方案1】:如果您确定 GAE 适合您,Django 可能不是您的正确选择。这两种技术的优势并不一致——你完全失去了很多 Django 在 GAE 上的精彩 orm,如果你使用它,你编写的代码并不直接适合 bigtable 和 GAE 的工作方式。
GAE 的优点在于,它通过强制您编写可轻松从头开始扩展的代码来获得出色的可扩展性。你不能做一些扩展性很差的事情(当然,你仍然可以编写扩展性很差的代码,但是你可以避免一些陷阱)。权衡的是,如果您使用的是为不同环境设计的 Django 之类的东西,那么您实际上最终会围绕框架进行编码。
如果您发现自己因任何原因离开 GAE,那么投资于基础架构就会给您带来麻烦。为 bigtable 编码意味着迁移到不同的架构将更加困难(尽管 apache 项目正在努力使用 Hadoop 项目的 HBase 组件为您解决这个问题)。从 GAE 过渡仍然需要大量工作。
除了作为 Google 产品和很酷的流行语之外,使用 GAE 的驱动力是什么?使用诸如 mediatemple 的产品进行扩展对您来说不太可能是有原因的吗?您确定 GAE 的扩展方式适合您的应用吗?如果您希望达到该性能领域,那么成本与专用服务器相比如何?与更传统的负载平衡服务器设置相比,您能否使用 GAE 提供的工具很好地解决您的问题?
所有这一切,除非您绝对肯定需要 GAE 提供的边界荒谬的扩展,否则我个人建议不要让该特定服务构建您选择的框架。我喜欢 Django,所以我会说你应该使用它,但不要在 GAE 上使用。
编辑(2010 年 6 月): 作为稍后对此评论的更新: Google 宣布了 GAE 的类似 sql 的功能,这些功能不是免费的,但可以让您轻松执行诸如运行 SQL 样式的命令以生成数据报告等操作。
此外,GAE 查询语言即将发生变化,这将使复杂的查询变得更加容易。观看 Google I/O 2010 的视频。
此外,在 Summer of Code 2010 项目期间正在进行的工作应该为 django 核心带来 no-sql 支持,并且通过扩展,使使用 GAE 变得更加容易。
GAE 作为托管平台变得越来越有吸引力。
编辑(2011 年 8 月):
Google 刚刚通过更改定价结构显着提高了该平台大多数用户的成本。锁定问题已经得到改善(如果您的应用程序足够大,您可以部署 apache 替代方案),但对于大多数应用程序来说,运行服务器或 VPS 部署更便宜。
很少有人真正遇到大数据问题。 “哦,我的创业公司有一天可能会扩大规模”不是大数据问题。立即构建并使用标准工具将其推出。
【讨论】:
感谢保罗的周到回复。我们之所以评估 GAE,主要是因为成本模型与我们提出的商业计划非常吻合。从免费开始,然后使用非常精细的成本模型逐步扩展的能力非常有吸引力。此外,我们不期望将来需要从 GAE 迁移或迁移,并且该项目的平台锁定是可以接受的。我在我的问题中加入了“退出策略”评论,主要是为了在发布这个问题之前对我通过阅读和研究所学到的知识进行相当全面的了解。再次感谢! 您如何评价开发时间成本?与使用 Bigtable 相比,Django 的优点之一是您花在定义数据模型上的时间更少。 Bigtable 迫使您在能够使用它之前更清楚自己的用法。使用“普通”sql 时,某些查询要容易得多。 小心不要过度捏硬币。免费很好,但服务很快确实要花真钱。如果您正在享受“免费”服务级别,请将其托管在您已经付费的其他服务器/主机上。如果您要进入非免费级别的服务,那么就成本而言,您可以轻松扩展的 VPS 每月 20 美元是噪音。 tbradshaw,不要忘记考虑需要在数据集上运行临时报告的频率。我参与了一个不断增长的社交应用程序,而 GAE 正在成为……我不会说是一场噩梦,但从我们的数据中获取知识是非常耗费资源的。在 Google 清除旧日志和扫描所有数据所需的极端长度之间,它使报告方式比 SQL 数据库更昂贵。这是我开始时没有考虑的成本。其次,如果您真的成长并开始赚钱,那么您在备份方面失去的控制权就是一个因素。 对于锁定问题,请查看 AppScale,它是 Google App Engine 的克隆。自从 GAE 首次问世以来,我们就一直在该平台上工作,并且有很多用户使用它来生产 Python 和 Java 应用程序。您可以直接访问它运行的机器,因此您可以更好地控制基础架构。 github.com/AppScale/appscale.git【参考方案2】:我们在我们的 appengine 实例上使用 django,主要是在我们必须为用户提供实际网站时。它有一个很棒的模板引擎、url 路由和所有内置的请求/响应/错误处理。所以即使我们不能使用神奇的 orm/admin 东西,它也有很多用处。
对于 api 服务,我们在 webob
之上构建了一些非常简单的东西。它更轻量级,因为它不需要 django 提供的所有功能,因此在某些情况下速度更快。
【讨论】:
谢谢科恩。我对 Django 的吸引力的部分困惑源于这样的想法,即 url 路由和请求/响应/错误处理也是提供的 webapp 的功能,并且模板引擎可以在没有 Django 的情况下使用,也可以与 webapp 一起使用。我弄错了吗? Django 提供这些服务是否比 webapp 框架更好? 我会说它们在 django 中更加广泛和灵活。所以如果你真的需要它会更好:-) 我想这就是我正在寻找的答案! Django 在很大程度上对 webapp 来说是多余的,但在它们共享的功能中,Django 以更灵活和健壮的方式实现。看起来这肯定是一个“边缘”的决定,但我认为所有其他的建议,加上你的,都是一个令人信服的答案。谢谢。 也不支持用 C 编写的 Python 模块。【参考方案3】:我在 GAE 上做过很多项目。一些在 django 中,一些在它们的正常框架中。
对于小事,我通常使用它们的正常框架来简单和快速。喜欢http://stdicon.com、http://yaml-online-parser.appspot.com/ 或http://text-twist.appspot.com/。
对于大型项目,我使用 django 来利用所有不错的中间件和插件。喜欢http://metaward.com。
基本上我的试金石是这需要我超过 2 周的时间来编写并成为一个真正的软件项目吗?如果是这样,请使用 django 来获取插件。
它还有一个额外的好处,如果您的项目非常不适合 BigTable,那么您可以快速移植(就像我所做的 Is BigTable slow or am I dumb?)
【讨论】:
+1,bigtable 对某些类型的项目和查询不利。这对于 Google 所做的事情来说很棒,但对于您想做的事情可能会很糟糕。 谢谢保罗!您能否将我链接到描述在 GAE 上工作的 Django 中间件和插件的任何资源?如果有对我们的项目有用的附加组件,那肯定是使用 Django 而不是 webapp 的理由。更明显有用的(如会话和身份验证)似乎具有明确的 Django ORM 依赖关系。 基本上任何没有models.py的插件都可以正常工作。如果他们有models.py,您可能可以对bigtable 进行1 对1 转换,如果您愿意,仍然可以使用它。我使用的一些是 django_annoying、django_debug_toolbar,以及来自 contrib 部分的 csrf、humanize,当然还有 admin。【参考方案4】:我认为所有这些答案都有些过时了。
现在你可以使用Google Cloud SQL
Django 是一个流行的第三方 Python Web 框架。 耦合时 使用 Google Cloud SQL,可以完全支持其所有功能 通过在 App Engine 上运行的应用程序。支持使用谷歌云 使用 Django 的 SQL 由自定义 Django 数据库后端提供,该后端 包装 Django 的 mysql 后端。
https://cloud.google.com/python/django/appengine
另一个新消息是,PostgreSQL 已提供 BETA 支持
【讨论】:
【参考方案5】:我有使用 Django 而不是 GAE 的经验。根据我使用 Django 的经验,这是一个非常简单的设置,并且就 Web 项目而言,部署过程非常简单。当然,我必须学习 Python 才能真正掌握好东西,但最终我会在项目中再次使用它。这几乎是 2 年前达到 1.0 之前,所以我的知识有点过时了。
如果您担心更换平台,那么我想这将是一个更好的选择。
【讨论】:
感谢您的快速回复!虽然我同意 Django 是一个可以快速上手的框架,但这并不是我们真正关心的问题。我们有四位经验丰富的 Python 开发人员,具有 Web 开发背景,因此开始使用任何框架都将是快速而轻松的。但问题仍然存在,当在 GAE 上选择 Django 和 webapp 时,哪个更好?为什么? @Woot4Moo 如果没有 GAE 经验,您是否将其部署到,我是 GAE 新手,但价格让我很困惑,随机收取费用,我在想 pythonanywhere,你能通过我吗有什么建议吗?【参考方案6】:我无法回答这个问题,但您可能想研究一下 web2py。它在许多方面类似于 Django,但它的数据库抽象层在 GAE 上工作并支持大部分 GAE 功能(不是全部,但我们试图赶上)。这样,如果 GAE 非常适合您,如果不适合,您可以将您的代码移动到不同的数据库(SQLite、MySQL、PostgreSQL、Oracle、MSSQL、FireBird、DB2、Informix、Ingres 以及 - 很快 - Sybase 和 MongoDB )。
【讨论】:
【参考方案7】:如果您决定在 GAE 之外运行您的应用程序,您仍然可以使用 Django。使用 GAE 网络应用程序你不会真的那么幸运
【讨论】:
谢谢,虽然我在最初的问题中准确地提到了这一点:“最后,很明显,如果我们以后想离开 GAE 并需要,使用 Django 确实具有提供“退出策略”的优势一个针对外流的平台。”【参考方案8】:我对 Google App 引擎开发还很陌生,但 Django 提供的接口确实比默认的接口好得多。好处将取决于您在应用引擎上运行 Django 所使用的内容。 Google App Engine Helper for Django 允许您使用 Google App Engine 的全部功能以及一些 Django 功能。
Django non-rel 尝试提供尽可能多的 Django 功能,但在应用程序引擎上运行以获得可能的额外可扩展性。特别是,它包括 Django 模型(Django 的核心功能之一),但由于关系数据库和 bigtable 之间的差异,这是一个泄漏的抽象。很可能会在功能和效率方面进行权衡,并且错误和怪癖的数量也会增加。当然,在问题中描述的情况下,这可能是值得的,但否则强烈建议您在开始时使用帮助程序,因为您可以选择稍后转向纯应用程序引擎或 Django non-rel。此外,如果您确实切换到 Django non-rel,那么如果 Django 抽象中断,您对应用程序引擎如何工作的更多了解将会很有用 - 如果您交换其他方式。
【讨论】:
以上是关于为啥在 Google App Engine 上使用 Django?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Google App Engine 文档强调 JDO 而不是 JPA?
为啥 Google 删除了运行 Python 3.7 的 App Engine 的 Image API?
Google App Engine 和 Django 模板:为啥这两种情况不同?
在 Google-App-Engine 中使用 HSQLDB
如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?