我们有一个使用事件驱动工作者(eventlet worker)通过gunicorn提供服务的Flask应用程序。我们将该应用程序部署在Kubernetes pod中,以根据工作负载自动扩缩容pod的数量。
在gunicorn中,推荐的工作者(worker)数量设置为
在Kubernetes pod中使用异步工作者(async worker),是否仍适用这种计算方式呢?特别是因为:
在gunicorn中,推荐的工作者(worker)数量设置为
2-4 x $NUM_CPUS
。参见文档。过去我曾在专用的物理硬件上部署过此类服务,这种计算方式是合理的。在一台4核机器上,拥有16个工作者(worker)听起来还不错,我们最终将其增加到了32个工作者(worker)。在Kubernetes pod中使用异步工作者(async worker),是否仍适用这种计算方式呢?特别是因为:
- 单个节点(node)上可能会有多个pod。
- 相同的服务将在多个pod中运行。
- 将其设置为
-w 1
,并让Kubernetes通过pod进行水平扩展/缩放? - 在Kubernetes节点上将其设置为
2-4 x $NUM_CPUs
。在一个pod上还是多个pod上? - 完全使用其他方法?
更新
我们决定采用第一种方法,即当前的方法。将gunicorn工作者(worker)数量设置为1,并通过增加pod的数量进行水平扩展/缩放。否则,将存在太多的移动部件,我们也无法充分利用Kubernetes的潜力。