【问题标题】:How to assign requests from each user always to a same instance in an instance group?如何将每个用户的请求始终分配给实例组中的同一个实例?
【发布时间】:2021-07-15 19:15:44
【问题描述】:

我在 GCE 中部署了一个深度学习 Web 应用程序。我创建了一个模板来构建一个 VM 实例组。然后为其添加负载均衡。

我计划当每个用户访问该 URL 时,来自同一用户的请求将始终分配给一个 VM 实例。我使用gunicorn -b 0.0.0.0:5000 wsgi:app -t 600 作为启动脚本的一部分。 (我也尝试过worker,gevent。但是来自不同用户的请求可以在同一个实例中处理,因此结果会相互影响。所以我希望来自不同用户的请求在不同的实例中处理。 )

为此,我尝试了不同的 CPU 利用率来进行自动缩放。它可以使用新实例自动扩展。但从结果来看,有时请求仍然在同一个实例中处理。

我还尝试了 Kurbenetes、应用引擎和云运行。错误是相似的。我觉得我的工作方向错了。

提前致谢。

---更新---

正如@John Hanley 所提到的,始终将来自用户的请求分配给同一个实例并不是这些产品的目标功能。如果您正在寻找这个问题的答案,您可以试试 Cloud Tasks + App Engine。

实际上,我希望不同用户的请求在不同的实例中处理,这样后端深度学习算法的结果就不会相互影响。

因此,解决此问题的另一种方法是将每个用户的必要数据存储在具有唯一会话 ID 的公共数据库中,而不是启动实例。 一个简单的demo可以在https://cloud.google.com/python/docs/getting-started/session-handling-with-firestore找到

希望这对遇到类似问题的人有所帮助。

【问题讨论】:

  • 您正在尝试使用 Google 负载平衡和自动缩放作为“作业”管理功能。这不是这些功能支持的目标。相反,重新考虑您的设计,因为每个请求都是一个“工作”,然后启动一个实例或服务来处理该工作。 Cloud Tasks 等服务可以帮助您,但您需要自己实施。根据您的软件,Cloud Run 可以为每个服务实例处理一个请求。
  • @JohnHanley,感谢您的回复。我厌倦了 Cloud Run,每个实例的最大请求为 1。结果仍然相互混合,就像在 GCE 中一样。我认为这是因为来自同一用户的请求不一定在同一实例中处理。因此,在一个实例中,后端深度学习模型可能会处理来自其他用户的请求。我现在正在查看 Cloud Tasks,希望对您有所帮助。

标签: google-cloud-platform parallel-processing gunicorn autoscaling


【解决方案1】:

正如@John Hanley 在评论部分提到的,最好的方法是使用 App Engine + Cloud Tasks,我建议你检查下一个 tutorial,虽然它使用 ngrok 而不是 unicorn 的想法工作流程应该与您想要实现的目标相似。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多