python-3.x 云运行问题:最大示例数+并发数+线程数(gunicorn线程)

jhdbpxl9  于 2023-03-09  发布在  Python
关注(0)|答案(2)|浏览(351)

(我正在学习Cloud Run,承认这与开发或代码无关,但希望GCP工程师能够澄清这一点)
我有一个PY应用程序运行- 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::一个正在运行的容器示例是否接收多个并发请求(例如,3个正在运行的容器示例处理5个并发请求)?或者每个并发请求是否触发启动新的容器示例(docker run ...
3)最后,我可以通过调整gunicorn thread设置有效地达到concurrency〉5吗?例如,在这种情况下,5x 3 =15..例如,15个并发请求由3个正在运行的容器示例服务,例如..如果是这样,调整thread与调整云运行concurrency有什么优点/缺点吗?
其他信息:- 这是一个IO密集型应用程序(不是CPU密集型应用程序),只需捕获HTTP请求并发布到pubsub/sub
非常感谢

46scxncf

46scxncf1#

首先,在Stackoverflow上一次问5件事的“鸡尾酒问题”是不合适的,以后请一次限问1个问题。
1.你不应该担心容器在哪里运行(物理机、虚拟机...)。--max-instances限制了你允许应用扩展的“容器示例数”。这是为了防止当有人恶意向你的应用发送过多请求时,你会收到巨额账单。

  1. https://cloud.google.com/run/docs/about-concurrency中对此进行了说明。如果您指定--concurrency=10,则容器可被路由为一次最多有10个正在传输的请求。因此,请确保您的应用一次可处理10个请求。
    1.是的,请阅读Gunicorn文档。测试您的设置“本地”是否允许Gunicorn同时处理5个请求... Cloud Run的--concurrency设置是为了确保您在任何时候都不会向1个容器示例发送超过5个请求。
    我还建议您在询问之前更彻底地阅读Office文档,也许还可以阅读cloud-run-faq一次,它几乎回答了所有这些问题。
dnph8jn4

dnph8jn42#

有一个很棒的博客介绍了gunicorn在并发性和并行性(进程、线程和“伪线程”)以及应用程序使用情况方面的性能调优-
如果瓶颈是内存,则开始引入线程。如果瓶颈是I/O,则考虑不同的python编程范例。如果瓶颈是CPU,则考虑使用更多内核并调整worker值。
https://medium.com/building-the-system/gunicorn-3-means-of-concurrency-efbb547674b7

相关问题