【问题标题】:Separating service and front-end in AppEngine causes latency在 AppEngine 中分离服务和前端会导致延迟
【发布时间】:2012-12-30 05:45:12
【问题描述】:

我有一组 Java AppEngine 应用,其结构如下:

  • REST 服务
  • 网络前端

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

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

我运行了一堆测试,虽然从浏览器执行 GET 到 REST 服务的返回速度总是相当快,但从我的 AppEngine 前端到 REST 服务的调用可能会从与从浏览器返回的速度一样快到占用>10 秒(导致超时等),通常响应时间不太合理(秒而不是 100 毫秒)。

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

我不得不说这种情况并不总是发生,持续好几个星期,然后有一些非常糟糕的日子(今天不算是full blow outage),尽管总的来说我很对 app-engine 感到高兴,这让我有时怀疑我在这个平台上的投资是否犯了一个错误。

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

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

任何建议表示赞赏。

【问题讨论】:

  • “这是设计 [您的] 应用程序的标准方法” [需要引用] - 确实不是,而且正如您所观察到的,这是设计应用程序的一种特别低效的方法。
  • @NickJohnson 嗨尼克,为什么这么防守?如果不是最佳实践,那么在我曾经工作过的所有其他平台上,将您的应用程序设计为将服务与前端分开当然是一种行业标准。从除 AppEngine 实例之外的任何地方调用服务时的响应时间实际上还可以且相当可靠。我希望您能就我所观察到的为什么在调用服务 FROM AppEngine 实例时效率特别低的原因提供意见。您是否建议唯一的解决方案是将服务拉入与前端相同的实例中?
  • @NickJohnson 我不同意你的说法。除此之外,您说这不是标准方式的引文在哪里。

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


【解决方案1】:

我可以看到两个原因

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

2.AppEngine 是否对内部流量收费?如果不是,那么这可能是给予外部 IP 优先于内部 IP 的原因?

【讨论】:

  • 感谢您的回答: 1. 我想这是 AppEngine 固有的东西,所以它属于可能的解释,但我不知道是否是这种情况。 2. appEngine 对传出带宽收费(无论如何),我通过 http 联系服务,因此流量不是“内部”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
相关资源
最近更新 更多