在AppEngine中分离服务和前端会导致延迟

时间:2013-01-16 00:17:02

标签: java google-app-engine web-applications architecture latency

我有一组Java AppEngine应用程序结构如下:

  • REST服务
  • 网络前端

这两个组件托管在2个独立的AppEngine实例(付费)上,这是设计应用程序的标准方法,对我来说也很有意义,因为我也从其他客户端访问REST服务(移动应用程序等),所以我想把它分开。

我遇到的问题是,即使我直接访问REST服务(从浏览器或移动应用程序获取GET)响应总是很好,但从AppEngine前端响应时间访问REST服务有时非常不稳定。

我运行了一系列测试,而从浏览器到REST服务的GET总是返回得相当快,从我的AppEngine前端到REST服务的调用可以从浏览器返回到接收到> 10秒(导致超时等)一般不太合理的响应时间(秒而不是100秒的msecs)。

如果总体上存在延迟,我可以理解平均花费几乎所有时间来获得响应,但我不明白的是,从其他地方调用服务和调用它之间的区别来自 AppEngine实例。

我不得不说这不会一直发生,好几周都会好起来然后有一些非常糟糕的日子(今天真的不算是full blow outage),尽管一般情况下我我非常高兴应用程序引擎,让我有时想知道我是否在这个平台上投资时犯了错误。

我正在寻找一个解释:在排队从AppEngine实例传出的这种非常标准的http请求时,这是某种固有的AppEngine限制吗?

此外,我一直在考虑可能的解决方法 - 也许我应该将服务托管到与前端相同的实例中,但我真的不想那样做,我将它作为最后的手段。

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

我可以看到两个原因

1.External访问您的REST服务,优化缓存,因为客户端是各种版本的浏览器。您在内部访问REST服务的FrontEnd应用程序可能无法实现非常好的缓存机制。

2. AppEngine内部流量账单?如果不是,那么这可能是提供外部IP优先于内部的原因?