3

我在用

  • App Engine 灵活的自定义运行时。
  • nodejs,作为基础图像。
  • 表示
  • 用于对请求进行排队的 Cloud Tasks
  • 傀儡师的工作

我的要求

  • 20GB 内存
  • 长期运行的过程

由于我的独特要求,我希望 1 个请求仅由 1 个实例处理。当它空闲或请求超时时,它才会收到一个新请求。在实例处理 1 个请求时,我设法拒绝了其他请求,但无法找出适当的自动扩展设置。

请提出实现这一目标的最佳方法。提前致谢!

4

2 回答 2

5

在您app.yaml尝试限制max_instancesand max_concurrent_requests

我还建议研究限制您的 Cloud Tasks 队列的速率,以减少不必要的发送请求尝试。此外,您可能还想增加您MIN_INTERVAL重试尝试以分散请求。

您的任务队列将继续按照您设置的速率处理和发送任务,因此如果您的实例拒绝请求,它将进入重试模式。您似乎专注于 App Engine 的扩展,但您的问题在于 Cloud Tasks。您可能希望安排您的任务,以便它们在您想要的时间间隔内触发。

于 2019-09-25T20:08:47.940 回答
4

您可以在您的应用程序上设置就绪检查

当实例正在处理请求时,将就绪检查设置为返回非就绪状态。429(请求太多)似乎是一个不错的选择。

这应该避免到该特定实例的流量。

请求完成后,200从就绪端点返回 a 以表明实例已准备好接受新请求。

但是,我不确定这将如何与自动缩放选项一起使用。由于应用程序只有在平均 CPU 超过定义的阈值时才会扩展,如果所有实例都被占用但没有达到该阈值,负载均衡器将不知道将请求路由到哪里(没有实例准备好),它会赢不要扩大规模。

您可以尝试一下这个想法和手动缩放,或者通过GAE 管理 APImin_instances以编程方式更改(在自动缩放中)。

一定要200liveness check返回 a ,否则实例将被杀死,因为它会被认为是不健康的。

于 2019-09-30T16:44:45.107 回答