云 运行 Qs :: 最大实例 + 并发 + 线程(gunicorn 线程)

Cloud Run Qs :: max-instances + concurrency + threads (gunicorn thread)

(我正在学习 Cloud 运行 承认这与开发或代码无关,但希望一些 GCP 工程师能够澄清这一点)

我有一个 PY 应用程序 运行ning - gunicorn + Flask...现在只是 PoC,这就是为什么要进行最少配置的原因。

cloud run deploy 有以下标志:

--max-instances 1
--concurrency 5
--memory 128Mi
--platform managed

guniccorn_cfg.py 个文件具有以下配置:

workers=1
worker_class="gthread"
threads=3

我想知道:

1) max-instances :: 如果我要调整它,是否意味着在需要时会提供新的物理服务器机器?或者,该服务是否通过拉取容器映像并在同一台物理服务器机器上简单地启动一个新的容器实例 (docker run ...) 来实现这一点,从而有效地与其他容器实例共享同一台物理机器?

2) concurrency :: 一个 运行ning 容器实例是否接收多个并发请求(例如 3 个 运行ning 容器实例处理 5 个并发请求)?还是每个并发请求触发启动新容器实例 (docker run ...)

3) 最后,我可以通过调整 gunicorn thread 设置有效地达到 concurrency > 5 吗?例如。在这种情况下 5x3=15.. 例如。 15 个并发请求由 3 个 运行ning 容器实例提供服务,例如?如果这是真的任何 pros/cons 调整 thread 与调整云 运行 concurrency

补充信息: - 这是一个 IO 密集型应用程序(不是 CPU 密集型)。只需抓取 HTTP 请求并发布到 pubsub/sub

非常感谢

首先,在 Whosebug 上一次问 "cocktail questions" 5 个问题是不合适的。以后请限制在1个问题。

  1. 您不应该担心容器 运行(物理机、VM 等)的位置。 --max-instances 限制您允许应用扩展的 "number of container instances"。这是为了防止有人恶意向您的应用发送过多请求而导致产生巨额账单。

  2. 这在 https://cloud.google.com/run/docs/about-concurrency 中有记录。如果您指定 --concurrency=10,您的容器可以被路由为一次最多有 10 个正在运行的请求。因此,请确保您的应用一次可以处理 10 个请求。

  3. 是的,请阅读 Gunicorn 文档。测试你的设置 "locally" 是否让 gunicorn 同时处理 5 个请求... Cloud 运行 的 --concurrency 设置是为了确保你不会收到超过 5 个请求到 1 个容器任何时刻的例子。

我还建议你在提问之前更彻底地阅读官方文档,也许 cloud-run-faq once 几乎可以回答所有这些问题。