为什么要在Google App Engine上使用Django?


88

在研究Google App Engine(GAE)时,很明显,使用Django在基于GAE的Python中进行开发非常流行。我一直在网上搜索有关使用Django的成本和收益的信息,以了解为什么它如此受欢迎。虽然我已经找到了许多有关如何在GAE 上运行Django的资料以及各种实现方法,但是我还没有找到任何比较分析来说明为什么 Django比使用Google提供的webapp框架更可取。

显而易见,对于在Django中具有现有技能的开发人员(毫无疑问是大多数Python网络开发人员)或在Django中具有现有代码的开发人员(在其中使用GAE更像是移植练习),为什么在GAE上使用Django很有用。但是,我的团队正在评估GAE是否可用于全新项目,而我们现有的经验是使用TurboGears,而不是Django。

当BigTable库已替换Django的ORM,会话和身份验证已更改且Django的模板(如果需要)而无需使用整个Django堆栈时,很难确定Django为什么对开发团队有利。

最后,很明显,如果我们以后想离开GAE并需要一个平台来出走,使用Django确实具有提供“退出策略”的优势。

我会非常感谢您指出为什么在GAE上使用Django比使用webapp更好的方法。我也对Django完全没有经验,因此详细介绍适用于GAE的较小功能和/或便利性对我来说也很有价值。


哎呀,特里·布拉德肖写代码吗?
Woot4Moo

4
Django非常有用,因为它很棒。就是这样 :)
贾森主义

我也是Google应用程序引擎的新手,即使在2018年,这也是一个结构非常糟糕的问题(尽管Django ORM似乎现在在GAE上得到了更好的支持)。:)
Divij Sehgal

Answers:


19

我们主要在必须向用户提供实际网站的情况下,在我们的appengine实例上使用django。它具有出色的模板引擎,URL路由和内置的所有请求/响应/错误处理。因此,即使我们不能使用神奇的orm / admin东西,它也有很多用处。

对于api服务,我们在之上构建了一些非常简单的东西webob。它轻巧得多,因为它不需要django提供的所有功能,因此在某些情况下要快一些。


1
谢谢科恩。我对Django的吸引力感到困惑的部分原因是URL路由和请求/响应/错误处理也是所提供的webapp的功能,并且模板引擎可以在没有Django的情况下与webapp一起使用。我错了吗 Django提供的服务是否比webapp框架更好?
特拉维斯·布拉德肖

我想说的是,它们在Django中更加广泛和灵活。因此,如果您确实需要它,那就更好了:-)
Koen Bok

2
我认为这是我正在寻找的答案!Django对于webapp基本上是多余的,但是在Django共享的功能上,它以更灵活,更可靠的方式工作。看来这肯定是“边缘”的决定,但我认为所有其他建议,加上您的建议,都是令人信服的答案。谢谢。
特拉维斯·布拉德肖

1
也不支持用C编写的Python模块。
Ryu_hayabusa 2014年

51

如果您确定GAE适合您,那么Django可能不是您的正确选择。两种技术的优势无法很好地融合在一起-您完全失去了许多Django在GAE上的奇妙功能,如果您使用它,您编写的代码实际上并不真正适合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的视频。

此外,在代码2010年夏季项目中正在进行一些工作,这些工作应该为django核心带来no-sql支持,并且通过扩展,使使用GAE的工作变得更加容易。

GAE作为托管平台正变得越来越有吸引力。

编辑(2011年8月):

Google刚刚通过更改定价结构,大大提高了该平台大多数用户的成本。锁定问题已经变得更好(如果您的应用程序足够大,则可以部署apache替代方案),但是对于大多数应用程序而言,运行服务器或VPS部署会更便宜。

很少有人真正遇到大数据问题。“哦,我的创业公司有一天可以扩展”不是大数据问题。现在构建东西,并使用标准工具将其发布。


保罗,感谢您的深思熟虑。我们之所以对GAE进行评估,很大程度上是因为成本模型与我们提出的业务计划非常匹配。免费启动,然后使用非常精细的成本模型逐步扩展的功能非常吸引人。此外,我们不期望将来需要从GAE迁移或迁移,并且可以接受此项目的平台锁定。我在问题中加入“退出策略”评论主要是为了在发布此问题之前,使我通过阅读和研究中学到的知识相当全面。再次感谢!
特拉维斯·布拉德肖

您如何评价开发时间的成本?Django的优点之一是,与Bigtable相比,您花费更少的时间在定义数据模型上。Bigtable迫使您在使用之前更加清楚自己的用法。使用“普通” sql,某些查询明显容易得多。
Paul McMillan

3
注意不要过度捏硬币。免费是不错的选择,但这项服务确实要花很多钱。如果您正在享受“免费”服务级别,则将其托管在您已经付费的其他服务器/托管上。如果您要进入非免费级别的服务,则可以在以后轻松扩展的VPS每月20美元,就成本而言,这是噪音。
Paul McMillan,2009年

11
tbradshaw,不要忘记考虑您需要多久在数据集上运行临时报告。我正在参与不断增长的社交应用程序,而GAE正在成为……我不会说一场噩梦,但是从我们的数据中获取知识非常耗费资源。在Google清除旧日志和扫描所有数据所需的极长长度之间,这使得报告方式比SQL db更加昂贵。那是我开始时没有考虑的费用。其次,如果您确实能够成长并开始赚钱,那么失去对备份的控制就是一个因素。
JasonSmith,2009年

2
有关锁定方面的问题,请查看AppScale,它是Google App Engine的克隆。自GAE首次问世以来,我们一直在开发该平台,并在其生产python和java应用程序上拥有许多用户。您可以直接访问运行它的计算机,因此可以更好地控制基础结构。github.com/AppScale/appscale.git
Navraj Chohan

16

我在GAE上做了很多项目。有些在Django中,有些在其正常框架中。

对于小事情,我通常使用它们的常规框架来简化和快捷。就像http : //stdicon.com,http://yaml-online-parser.appspot.com/http://text-twist.appspot.com/一样

对于大型事情,我选择django来利用所有出色的中间件和插件。就像http://metaward.com一样。

基本上我的试金石是,将使我花费超过2个星期的时间来编写并成为一个REAL软件项目吗?如果是这样,请与Django一起使用。

它具有额外的好处,如果您的项目非常不适合BigTable,则您会迅速移植(就像我做了BigTable慢还是我笨吗?


+ 1,bigtable对某些类型的项目和查询不利。这对Google所做的事情非常有用,并且可能对您想做的事情很可怕。
Paul McMillan,2009年

谢谢保罗!您能否将我链接到任何描述可在GAE上运行的Django中间件和插件的资源?如果有对我们的项目有用的附加组件,那肯定是使用Django而不是webapp的原因。显然更有用的命令(例如会话和身份验证)似乎具有明确的Django ORM依赖关系。
特拉维斯·布拉德肖

2
基本上,任何没有model.py的插件都可以正常工作。如果他们有一个models.py,您可能可以进行1比1到bigtable的转换,并且仍然可以使用它。我使用的是django_annoying,django_debug_toolbar,以及从contrib部分csrf,humanize和当然是admin。
Paul Tarjan

11

我认为所有这些答案都已过时。

现在您可以使用 Google Cloud SQL

Django是一种流行的第三方Python Web框架。与Google Cloud SQL结合使用时,在App Engine上运行的应用程序可以完全支持其所有功能。自定义Django数据库后端提供了对将Google Cloud SQL与Django一起使用的支持,该后端包装了Django的MySQL后端。

https://cloud.google.com/python/django/appengine

还有一个新鲜的消息是,BETA支持PostgreSQL


3

我有使用Django而不是GAE的经验。从我使用Django的经验来看,这是一个非常简单的设置,并且就Web项目而言,部署过程非常简单。当然,我必须学习Python才能真正掌握事物,但最终我还是会在项目中再次使用它。这是将近2年前才达到1.0的水平,所以我的知识有点过时了。

如果您担心更改平台,那么我认为这将是一个更好的选择。


1
谢谢你快速的回复!尽管我同意Django是一个快速入门的框架,但对我们而言,这并不是真正的问题。我们有四个具有Web开发背景的经验丰富的Python开发人员,因此任何框架的入门都将快速而轻松。但是问题仍然存在,当在GAE上的Django和webapp之间进行选择时,哪个是更好的选择,为什么
特拉维斯·布拉德肖

@ Woot4Moo如果您没有将其部署到GAE的经验,我对GAE还是陌生的,但是价格让我感到困惑,随机的收费,我在想pythonanywhere,可以给我一些建议吗?
万扎

0

我无法回答这个问题,但您可能想研究一下web2py。它在许多方面与Django类似,但其数据库抽象层在GAE上运行并支持大多数GAE功能(不是所有,但我们都在努力追赶)。这样,如果GAE为您工作得很好,或者不是,您可以将代码移动到其他数据库(SQLite,MySQL,PostgreSQL,Oracle,MSSQL,FireBird,DB2,Informix,Ingres,以及-很快-Sybase和MongoDB )。


0

如果您决定在GAE之外运行您的应用,则仍然可以使用Django。GAE网络应用真的不会给您那么多运气


谢谢,尽管我在最初的问题中确实提到了这一点:“最后,很明显,如果我们以后想离开GAE并需要一个平台来出走,使用Django确实具有提供“退出策略”的优势。 ”
特拉维斯·布拉德肖2009年

0

我对Google App引擎的开发仍然很陌生,但是Django提供的接口确实比默认接口好得多。收益将取决于您在应用程序引擎上运行Django所使用的内容。Django的Google App Engine帮助器允许您一边使用Django的某些功能,一边使用Google App Engine的全部功能。

Django non-rel尝试提供尽可能多的Django功能,但在应用程序引擎上运行以实现可能的额外可伸缩性。特别是,它包括Django模型(Django的核心功能之一),但是由于关系数据库和bigtable之间的差异,这是一个泄漏的抽象。在功能和效率方面,很可能需要权衡取舍,并且错误和怪癖的数量也会增加。当然,在类似问题中所述的情况下,这样做可能是值得的,但是强烈建议在开始时使用帮助程序,因为这样您以后可以选择使用纯应用程序引擎或不依赖Django的选项。另外,如果您确实切换到Django non-rel,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.