Google App Engine适合做Lifestreaming应用吗?
我正在开发一个生活流应用,这个应用需要为很多用户获取大量的信息源,并对这些结果进行数据挖掘和机器学习算法处理。谷歌的应用引擎(GAE)提供的负载均衡和可扩展的托管服务听起来很适合一个可能会处理大量数据的系统,但它没有定时任务功能,这让我觉得很麻烦。那我是不是应该选择在一个共享服务器上用Django来开发,并自己处理数据库的扩展问题呢?
7 个回答
(这显然是个比较老的问题,我回复只是因为这个内容在相关的谷歌搜索中排名很高……)
我刚开始使用AppEngine,之前也没有用它处理过很多外部请求。不过我知道,上面的信息现在可能不太准确,甚至可能已经不适用了。自从2008年9月以来,他们放宽了很多限制——你可以去Aral Balkan的博客看看他最初对上述问题的抱怨,以及后来的发展情况。
现在的情况是,虽然将来可能会有收费计划,但目前来看,App Engine 对于需要大量计算的应用并不太合适。它的设计目的是为了处理很多请求,而不是每个请求都需要进行大量的计算。我在做一些比较简单的计算时就遇到了这个问题,随着我的数据量增加,我担心可能需要考虑其他的解决方案。
虽然我不能直接回答你的问题,但我在搭建Microupdater(一个在AppEngine上收集几百个新闻源的聚合器)时的经验,或许能给你一些启发。
获取新闻源。通过定时任务获取大量新闻源(在SDK 1.2.5之前,这是唯一的解决方案)效率不高,也不容易扩展,因为它对任务的频率有限制(比如说每分钟一次,这样你每小时最多只能获取60个新闻源)。不过在最新的SDK 1.2.5中,有了XMPP API,我还没有实现这个功能。最有前景的方法是PubSubHubbub,你只需要提供一个回调网址,HubBub就会实时通知你新的内容。而且在AppEngine上有一个演示实现,你可以去试试。
解析新闻源。你可能已经知道,解析新闻源是非常消耗CPU的。我使用的是Universal Feed Parser,当解析一个大的新闻源(比如一个公共的Google Reader主题)时,AppEngine可能无法处理所有的条目。我的仪表盘上经常会出现很多CPU限制的警告。不过,这可能也导致我还没办法优化代码。
总的来说,AppEngine目前还不是一个理想的实时流应用平台,但未来可能会有所改变。