我注意到你可以在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进程(即共享内存/缓存)中工作?如果是这样,可能很难从第一种方法扩展到第二种方法......
答案 0 :(得分:7)
不同之处在于,在uWSGI的情况下,没有“真正的”负载平衡。第一个自由进程将始终响应,因此这种方法比在多个实例之间使用nginx加载balacing更好(这显然仅适用于本地实例)。您需要考虑的是“雷鸣般的群体问题”。其含义在此处公开:http://uwsgi-docs.readthedocs.org/en/latest/articles/SerializingAccept.html。
最后,所有uWSGI功能都是多线程/多进程(和greenthreads),因此所有进程都可以共享缓存(例如)。