GAE启动动态实例以提供请求而不是使用空闲驻留实例

时间:2013-05-02 14:20:27

标签: java google-app-engine

我检查过一堆关于同一主题的其他帖子,如下所示:“常驻实例似乎无法正常工作”但我无法找到解决问题的方法

我有4个F2驻留,每当有人进入我的应用程序时,不会使用驻留实例,而是安装新的动态实例来回答请求。因此,试图使用我的应用程序的人将等待20秒。然后,所有新请求都将进入新的动态实例。 我常驻实例的响应时间低于我的最小待决延迟(5秒)。 我的应用程序从昨天开始投入生产,如果没有人使用它5分钟,那么下一个将要连接的人将需要等待20秒!

从我读过的内容中,有人会说如果我将min idle实例设置为4(为了拥有我的常驻实例),GAE会尝试一直有4个实例,所以我们将启动新实例;但是我总是要等35秒才能完成所有的第一次连接使用应用程序2分钟后一切都很好。 在Google工作的人告诉我,驻留实例的管理存在一个错误,我必须有3个常驻实例才能快速回答我的用户。 我确定我不明白。任何人都可以帮助我让我的用户在连接到我的应用程序时有一个公平的响应时间而没有人连接5分钟吗?

非常感谢

3 个答案:

答案 0 :(得分:2)

查看Google群组中的GAE邮件列表,您会看到这个问题一遍又一遍地出现。

简而言之,GAE专为高负荷而设计。虽然我还没有真正看到“尖峰”的正式定义,但存在驻留实例来处理工作负载的峰值。如果GAE的神秘负载平衡算法没有将您的流量确定为峰值,那么您将获得一个新的动态实例。

如果您在应用程序中抛出数百或数千个请求,那么其中一些请求将在等待动态实例启动时被定向到驻留实例。

你可以做的并不多,只能加入那些抱怨过这个问题的人。至少有两个问题针对此提出:

https://code.google.com/p/googleappengine/issues/detail?id=7865&q=scheduler&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

https://code.google.com/p/googleappengine/issues/detail?id=7706&q=scheduler&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

或者,您可以重写您的应用,以便您没有20秒的启动时间。你可以做一些事情,比如推迟你的大部分工作,但是用Java做这件事很痛苦。

另外,python和Go运行时似乎启动得更快。

答案 1 :(得分:1)

我达到了一个现在似乎没问题的实用解决方案: 我做了以下测试,可能对GAE的低流量应用有用:

  • 测试1 - > 5xF2嘻嘻5秒等待延迟结果:我仍然以用户身份立即进行热身 -
  • 测试2 - > 8xF2,5秒等待延迟:与上述相同
  • 测试3 - > 8xF1居民,等待延迟时间为5秒:与上述相同
  • 测试4 - > **** 1xF4驻留,15秒待决延迟****:方式更好。要回答的firt实例(50到100的第一个请求)是驻留的,然后打开一个动态实例。并在2分钟后关闭而不使用我的应用程序。几乎我梦想GAE会起作用 - 因此,在过去的4天里,它与1xF4驻留和15秒待定lanncy一起工作正常。 -

如果出现新问题,我现在想的是,避免用户冷启动的最佳方法是每隔30秒ping一次我的应用程序,我会努力让自己有更快的冷启动时间

答案 2 :(得分:0)

以下是相关问题(可能还有其他问题):

http://code.google.com/p/googleappengine/issues/detail?id=7706

似乎有人在5岁时取得了成功,但是从你的研究和其他评论来看,我读到的可能只是更多的机会更好。