我们有一个 App Engine 应用程序,平均每秒处理 0.5 个请求,似乎所有这些请求都可以由运行 Go 应用程序作为主版本的同一个实例处理。但是,有时 App Engine 会启动第二个实例(有时甚至是第三个实例),这似乎除了处理一两个请求之外没有任何作用。这是一个例子。手动关闭该实例似乎不会造成任何伤害,所以我的问题是,为什么 App Engine在一段时间没有收到任何请求后没有终止该实例?(上面的例子在过去一小时有四个请求,通常请求/年龄比率变得更低)。更新:类似的情况是在不同版本上启动实例时。App Engine 似乎只是在几个小时没有收到任何请求后才会终止实例。在应用程序设置 → 性能下,空闲实例设置为自动 – 20Pending Latency设置为150ms – 250ms
2 回答
POPMUISE
TA贡献1765条经验 获得超5个赞
我希望我知道什么控制是否/何时杀死空闲实例,但我看不到它的任何文档。
为了避免启动过多的实例,我认为您在这里可以做的主要事情是增加待处理的延迟:
Pending Latency 滑块控制请求在由应用程序默认版本的实例提供服务之前在待处理队列中花费的时间。如果最小挂起延迟很高,App Engine 将允许请求等待而不是启动新实例来处理它们。这可以减少您的应用程序使用的实例小时数,但会导致更多用户可见的延迟。
即使你平均每小时只有 4 个请求,如果你碰巧得到两个间隔很近的请求,我想它可能会启动一个新实例。
您还可以在日志中看到一些关于它启动新实例的原因的少量信息。
侃侃无极
TA贡献2051条经验 获得超10个赞
Google App Engine 文档的“应用程序如何扩展”部分指出:
在实例中扩展
每个实例都有自己的传入请求队列。App Engine 监控在每个实例的队列中等待的请求数。如果 App Engine 检测到应用程序的队列因负载增加而变得过长,它会自动创建应用程序的新实例来处理该负载。
当请求量减少时,App Engine 还会反向扩展实例。这种扩展有助于确保您的应用程序的所有当前实例都用于实现最佳效率和成本效益。
它还指出您可以“指定最小空闲实例数”,并在管理控制台中“优化高性能或低成本”。
尝试将“空闲实例”字段设置为 3 - 5 之类的值,并“优化低成本”,看看这是否会影响实例终止时间。
- 2 回答
- 0 关注
- 229 浏览
添加回答
举报
0/150
提交
取消