如何摆脱Google App Engine的Python锁定?
有没有什么指导原则可以帮助我们编写可以在其他平台上运行的 Google App Engine 的 Python 代码,而不依赖于谷歌的基础设施呢?
有没有人尝试过创建一个开源框架,让为 Google App Engine 设计的应用程序能够在其他平台上运行?
编辑:
为了更清楚地说明,问题其实是:
如果我现在在 Google App Engine 上开发一个应用,以后能否迁移到其他平台,还是说我就被锁定在这里了?
9 个回答
到目前为止,我发现了一个叫做 app-drop 的实验性主机,它可以用来托管谷歌的应用引擎项目。这意味着,至少在理论上,能够在谷歌的基础设施之外运行应用引擎项目。
不过,这显然还不适合用于正式的生产环境。
使用一个高级框架,这样可以在App Engine上运行你的代码。这样的话,当你想把代码移到其他服务器时,就会比较方便。
Django已经被修补并移植到Appengine补丁项目中,是在App Engine上使用最广泛的框架。
你可以参考这个逐步介绍,了解如何在App Engine上运行Django应用。
至于运行App Engine应用的平行基础设施,目前还远远不够。App Engine本身并没有像人们想象的那样流行,谷歌也希望它能更受欢迎。而且,在内置的WebApp框架上开发比在Django上要困难。
在未来几年内,看到一个平行的基础设施来运行App Engine应用的可能性不大。相反,更有可能看到Django和其他流行框架能够直接在App Engine上运行,目前这个工作正在相关项目中进行。
要让一个应用程序完全可以移植,需要几个组件:
- 运行环境本身。这个可以相对简单地移植,通过设置一个CGI或FastCGI服务器来模拟App Engine的环境(其实就是稍微增强版的CGI)。大部分实现这个的代码已经在SDK里了。不过,目前还没有现成的工具包可以直接使用。
- 数据存储。这个是最复杂的部分。现在有一些项目在进行中:AppScale可以在EC2/Eucalyptus/Xen上运行,使用HyperTable或HBase作为后端;不过它现在还处于测试阶段,数据连接器也没有单独提供(这是一个可以在自己云上运行应用的解决方案的初步尝试)。Jens正在写一个SQLite后端,还有我自己的项目BDBDatastore,它使用BDB-JE作为后端,功能齐全(虽然也是测试阶段)。AppDrop,其他人提到的那个,简单地使用开发服务器作为后端,所以不适合用于生产环境。
- 用户API需要用其他东西替换,比如基于OpenID的API。这也比较简单,但目前还没有现成的解决方案。
- Memcache API需要一个使用标准C的memcache后端。
- 其他API在SDK中已经有功能齐全的后端,所以不需要移植。
- 还需要实现定时任务支持,以及后台处理、XMPP等功能,当它们可用时。
可以看到,还有很多工作要做,但没有根本性的障碍让你的App Engine应用在谷歌的环境之外运行。实际上,如果你感兴趣,欢迎参与进来——我和其他人计划将这些不同部分的解决方案结合成一个统一的“OpenEngine”解决方案,用于托管你自己的应用。