我有一个基于 spring 的 Web 应用程序运行在 App Engine java 上,每分钟接收约 1 次点击。
不幸的是,App Engine 调度程序会终止空闲时间超过 10 秒左右的实例。因此,对我网站的每个请求大约需要 30 秒才能完成,同时会加载一个新的动态实例。
尝试使用常驻实例,但是,请求永远不会到达常驻实例。不管有多少常驻实例(我试过最多 4 个),一个新请求总是会产生一个新的动态实例,因此即使有 4 个空闲实例,一个请求也必须等待 30 秒。
空闲实例和延迟的哪些设置可以让我的应用程序始终运行,以便我每分钟收到的奇数 1 个请求都得到一个热/实时实例。
最佳答案
到目前为止,我已经处理此类问题 6 个多月了,命中率/分钟与您的相似,可能更高一点,并且是我在 F1 中找到的最佳设置并且没有破坏银行(但与提供更好性能的其他托管服务相比仍然很昂贵)是:
min idle instances = 1
max idle instances = 1
min pending latency = 15s
max pending latency = 15s
如果您的内存消耗超过每个实例 128MB,那么您可以考虑使用 2 或 3 个作为最大空闲实例。
根据我的经验,使用此配置,一些请求将由常驻实例处理,而另一些请求将由一个新的动态实例处理,幸运的是,如果应用引擎为之前的预热请求,获得比通常的 30 秒更好的响应时间(如果不是 DeadlineExceededException)。
然而,一些请求将运行新的加载实例,这是使用自动缩放不可避免的事情。有一种很新颖的东西叫manual scalling这是可配置的,但它会增加您的应用程序的复杂性,并且不会解决这个严重性能问题的根本原因。
我很遗憾谷歌无法为使用 DI 框架(如 Spring、Guice...两年前。
不管你有多好optimize Spring ,不幸的是,许多情况下的等待时间对于 java 的 google app engine 中的专业应用程序来说仍然是 Not Acceptable 。
关于google-app-engine - 如何为低流量配置 google app engine java(1 次/分钟),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345631/