使用nginx和uWSGI的多个服务器进程

使用nginx和uWSGI的多个服务器进程,nginx,uwsgi,Nginx,Uwsgi,我注意到,您可以在nginx后面的一个uWSGI实例中启动多个进程: uwsgi --processes 4 --socket /tmp/uwsgi.sock 或者,您可以在不同的套接字上启动多个uWSGI实例,并使用nginx在它们之间进行负载平衡: upstream my_servers { server unix:///tmp.uwsgi1.sock; server unix:///tmp.uwsgi2.sock; #... } 这两种策略之间的区别是什么?一种

我注意到,您可以在nginx后面的一个uWSGI实例中启动多个进程:

uwsgi --processes 4 --socket /tmp/uwsgi.sock
或者,您可以在不同的套接字上启动多个uWSGI实例,并使用nginx在它们之间进行负载平衡:

upstream my_servers {
    server unix:///tmp.uwsgi1.sock;
    server unix:///tmp.uwsgi2.sock;
    #...
}
这两种策略之间的区别是什么?一种策略优于另一种策略

nginx完成的负载平衡(在第一种情况下)与uWSGI完成的负载平衡(在第二种情况下)有何不同


nginx可以在多台主机上前置服务器。uWSGI可以在一个实例中实现这一点吗?某些uWSGI功能是否仅在单个uWSGI进程内工作(即共享内存/缓存)?如果是这样,可能很难从第一种方法扩展到第二种方法……

不同之处在于,在uWSGI的情况下,没有“真正的”负载平衡。第一个空闲进程总是会响应,因此这种方法比在多个实例之间使用nginx负载平衡要好得多(显然,这只适用于本地实例)。你需要考虑的是“雷鸣般的羊群问题”。其含义如下所示:


最后,所有uWSGI功能都支持多线程/多进程(和绿色线程),因此缓存(例如)由所有进程共享。

您能否详细说明uWSGI进程上实际共享的数据?进程不是孤立运行的吗?我也想知道。