有没有可能在自己的服务器上运行Google App Engine开发服务器?

9

我可以在自己的服务器上运行Google App Engine开发服务器吗?开发服务器数据存储能够处理多大的负载量,以及什么样的数据量会使其瘫痪?

3个回答

7

以下是不使用App Engine运行App Engine应用程序的一些选项:

  • TyphoonAE,它使用一堆流行的开源组件来运行Python应用程序
  • appscale,它在亚马逊的EC2云上运行Python或Java应用程序

我都没有试过。有关两者的更多讨论,请参见此问题

如果您只是在公共IP上启动dev_appserver.py,数据存储会表现得如何?如果您有很多数据,那么效果不好。当使用开发服务器时,整个数据存储都保存在内存中,因此随着插入数据,Python的内存使用量将增加。一旦添加了足够的数据导致您的系统开始交换,您的应用程序将变得无法使用。开发服务器中有一个选项,可以使用SQLite数据存储后备而不是内存存根。这使性能在大量数据的情况下变得可接受,但与生产数据存储相比,效率要低得多,因此即使在少量数据的情况下,数据存储器访问速度也相对较慢,肯定比少量数据的内存存储器要慢得多。

将开发服务器作为独立的生产服务器运行通常不是一个好主意。提供给开发服务器的API存根是设计供开发人员使用的,而不是用户。例如,发送邮件只会写入日志条目,而不是实际发送邮件;登录管理员需要单击一个名为“以管理员身份登录”的复选框。

如果您想将现有应用程序从App Engine移出,请使用上述选项之一。如果您正在从头开始开发应用程序,请使用Django或其他专为在通用硬件上运行而设计的框架。开发服务器仅用于开发。


1
另一个不在开发服务器上运行的原因是它是单线程的。 - Adam Crossland
@Adam 技术上来说,生产服务器也是单线程的。 - systempuntoout
2
这有点太苛求了。我认为他的意思是开发服务器一次只能处理一个请求。 - Drew Sears
@Drew.. 这就是生产服务器的工作,它可以一次处理一个请求(指单个实例)。 - systempuntoout
当然可以,但是在生产环境中运行的应用程序可以通过多个实例处理许多请求。 - Drew Sears
@Drew..你可以在几个开发服务器实例的前面安装一个负载均衡器 :) (它们不会共享相同的数据存储)。 - systempuntoout

5
是的,虽然存在一些缺失的功能(例如并行队列、定时任务、邮件、XMPP等),以及一些潜在的安全问题、性能和稳定性较差,但从技术上讲,这是可能的。
正如您所猜测的那样,这是一个不好的想法。
以HTTP服务器为例;使用开发服务器,您将在生产环境中使用未记录的BaseHTTPServer,几乎无法配置,并且可能存在一些潜在的安全漏洞可以被利用。
正如@Drew所说,有更好的选择来运行您的Google App Engine代码,以获得一个不是GAE的生产就绪环境。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接