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

11

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

uwsgi --processes 4 --socket /tmp/uwsgi.sock

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

upstream my_servers {
    server unix:///tmp.uwsgi1.sock;
    server unix:///tmp.uwsgi2.sock;
    #...
}

这2种策略有什么区别?哪一个更受青睐?
nginx实现负载均衡的方式(第一种情况)与uWSGI实现的方式(第二种情况)有何不同?
nginx可以负责多个主机上的服务器。 uWSGI能否在单个实例中执行此操作?某些uWSGI功能仅在单个uWSGI进程内工作(例如共享内存/缓存)吗?如果是这样,从第一种方法扩展到第二种方法可能会很困难...
1个回答

9
区别在于,在uWSGI的情况下没有“真正”的负载均衡。第一个空闲进程将始终响应,因此这种方法比nginx在多个实例之间进行负载均衡要好得多(这显然仅适用于本地实例)。您需要考虑“雷鸣式问题”的影响。其影响在此处公开:http://uwsgi-docs.readthedocs.org/en/latest/articles/SerializingAccept.html
最后,所有uWSGI功能都支持多线程/多进程(和绿色线程),因此缓存(例如)由所有进程共享。

4
你能详细说明在uWSGI进程之间实际共享哪些数据吗?这些进程不是运行在隔离环境中的吗? - Tuukka Mustonen
1
我也想知道。 - ruipacheco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接