为何在Google App Engine上使用Django?
在研究谷歌应用引擎(GAE)时,发现使用Django在GAE上开发Python应用非常受欢迎。我在网上查找关于使用Django的成本和好处的信息,想知道为什么它这么受欢迎。虽然我找到了很多关于如何在GAE上运行Django以及各种方法的信息,但我没有找到任何关于为什么Django比谷歌提供的webapp框架更好的比较分析。
要明确的是,对于那些已经掌握Django技能的开发者(大多数Python网页开发者肯定是这样)或者已经有Django代码的开发者来说,使用Django在GAE上是非常有用的(这时候使用GAE更像是迁移工作)。不过,我的团队正在评估GAE用于一个全新的项目,而我们现有的经验是TurboGears,而不是Django。
当BigTable库取代了Django的ORM,会话和身份验证也发生了必要的变化,而Django的模板功能(如果需要的话)可以在不使用整个Django框架的情况下获得时,确实很难确定Django对开发团队的好处。
最后,使用Django确实有一个好处,就是如果我们以后想要离开GAE,Django可以提供一个“退出策略”,让我们有一个目标平台可以迁移。
我非常希望能得到帮助,指出为什么使用Django比在GAE上使用webapp更好。我对Django完全没有经验,所以关于在GAE上运行的小功能和/或便利性方面的详细说明对我来说也很有价值。
8 个回答
我在GAE上做了很多项目。有些是用django做的,有些则是用他们的普通框架。
对于一些小项目,我通常会选择他们的普通框架,因为这样简单又快。比如说 http://stdicon.com、http://yaml-online-parser.appspot.com/,或者 http://text-twist.appspot.com/。
而对于一些大项目,我会选择django,这样可以利用很多好用的中间件和插件。比如 http://metaward.com。
基本上,我的判断标准是 这个项目如果写起来超过两周,并且是一个 真正的 软件项目吗? 如果是的话,就选择django来添加功能。
另外,如果你的项目不太适合BigTable,你可以很快地转移到其他地方(就像我在 这个问题中提到的那样)。
如果你确定Google App Engine(GAE)适合你,那么Django可能就不是一个好的选择。这两种技术的优缺点并不太匹配——在GAE上,你会失去很多Django强大的数据库操作功能(orm),即使你使用它,写出来的代码也不太适合GAE的工作方式。
GAE的特点是它通过要求你从一开始就写出易于扩展的代码来实现很好的扩展性。你不能做一些扩展性差的事情(当然,你还是可以写出扩展性差的代码,但这样会避免一些常见的错误)。如果你使用像Django这样的框架,它是为不同的环境设计的,你最终会发现自己不得不围绕这个框架来编写代码。
如果你考虑将来可能会离开GAE,那么在那里的基础设施上投入精力就会成为一个问题。为大表(bigtable)编写代码意味着将来转移到其他架构会更困难(不过,Apache项目正在通过Hadoop项目的HBase组件来解决这个问题)。但从GAE迁移依然会是一项艰巨的工作。
除了它是Google的产品和一个时髦的流行词,使用GAE的主要动机是什么?使用像mediatemple这样的服务扩展是否不太可能适合你?你确定GAE的扩展方式适合你的应用吗?如果你希望达到那种性能水平,GAE的成本与专用服务器相比如何?使用GAE提供的工具解决问题是否比传统的负载均衡服务器设置更有效?
总的来说,除非你绝对需要GAE提供的极端扩展性,否则我个人建议不要让这个服务决定你选择的框架。我喜欢Django,所以我建议你使用它,但不要在GAE上使用。
编辑(2010年6月):稍后对此评论的更新:Google宣布GAE将提供类似SQL的功能,这些功能不是免费的,但可以让你轻松执行SQL风格的命令来生成数据报告。
此外,GAE的查询语言即将进行更改,这将使复杂查询变得更加简单。可以查看2010年Google I/O的相关视频。
而且,在2010年夏季代码项目中,正在进行的工作将为Django核心带来无SQL支持,从而使在GAE上工作变得更容易。
GAE作为一个托管平台变得越来越有吸引力。
编辑(2011年8月):
Google刚刚通过改变定价结构大幅提高了大多数用户的使用成本。锁定问题有所改善(如果你的应用足够大,你可以部署Apache的替代方案),但对于大多数应用来说,运行服务器或VPS的成本更低。
实际上,很少有人真正面临大数据问题。“哦,我的初创公司可能会在未来扩展”并不算是大数据问题。现在就开始构建东西,并使用标准工具将其推出。
我们在应用引擎实例上使用django,主要是为了给用户提供实际的网站。它有很棒的模板引擎、网址路由功能,以及内置的请求/响应/错误处理。所以即使我们不能使用它的神奇ORM和管理界面,但它仍然有很多优点。
对于API服务,我们在webob
的基础上构建了一个非常简单的东西。因为它不需要django提供的所有功能,所以它更轻量,某些情况下也会更快。