负载平衡的 dockerized Flask 应用程序中有多少 gunicorn worker?

How many gunicorn workers in a loadbalanced dockerized Flask app?

我将 gunicorn 用于我的烧瓶应用程序。到目前为止,我一直遵循指导原则,因此每台机器的 gunicorn worker 数量为 (2 x $num_cores) + 1(他们坐在负载均衡器后面)。我正在 dockerising 应用程序,我的问题是:我是否应该 运行 每个容器一个 gunicorn worker(同样, dockerised 是负载平衡的)?或者在每个 docker 容器中 运行 设置多个 gunicorn worker 有什么意义吗?

这完全取决于您使用的工作器类型以及您应用的具体情况。有些应用程序可以很好地处理大量进程,有些可以使用线程,有些可以两者兼而有之,有些可以使用 gevent 协程,等等。您可以在负载下试验和测试您的应用程序,以确定哪些运行良好。

通常,Python 使用进程比线程执行得更好,典型的进程数是内核数或 2x + 1。Gevent 协程仅 运行 在一个进程中(并且核心),但没有超出内存要求的限制。