bokeh负载平衡策略中的--num-procs选项

问题描述

在文档中,它建议在底层Tornado服务器中完成分叉,尽管我试图弄清楚如果存在多个进程,则负载平衡策略是什么。 假设有3个进程在运行(使用bokeh serve --num-procs 3),那么是否有3个请求仅定向到其中一个,而其他两个进程仍然相当闲置?

解决方法

假设Bokeh并没有做任何特别的事情,而只是使用Tornado的多进程模式,则没有任何东西可以保证负载在各个进程之间得到平衡,并且可能会出现严重的不平衡。这包括让所有3个连接进入一个进程,而另两个保持空闲。随着流量的增加,这种100/0分配的可能性越来越小,但是最繁忙的进程的连接数至少是最不繁忙的连接数是很常见的。

这里没有真正的“负载平衡策略”-当建立连接时,内核将唤醒所有三个进程,而执行其accept系统调用的任何一个首先获得连接。通常,这意味着已经有一个请求的进程会收到下一个请求,因为它已经被调度和缓存了(另一方面,有时该进程正忙于处理上一个请求,因此不能立即接受新的请求)。 / p>

我听说SO_REUSEPORT选项可以改善这一点,但我自己尚未对此进行验证。