Python中Nginx配置的这几行示例代码,是不是写错了?

看到书里 Nginx 的配置负载均衡的部分有这几行代码:

http {
    upstream frontends {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }
server { ... }
}

负载均衡不是应该配置给不同的服务器吗?同一个 server 127.0.0.1 上配置负载均衡,有什么作用呢?应该是:

server ip address 1:8000;
server ip address 2:8000;
server ip address 3:8000;

这样才能把访问压力分散到不同的服务器上去,实现负载均衡吧? 在同一台服务器 server 127.0.0.1 内部实现什么负载均衡的配置呢?是示例代码有问题吗?还是理解错了?


Python中Nginx配置的这几行示例代码,是不是写错了?

14 回复

这是让你在本机上做测试,实际当然均衡到不同的服务器


我无法理解你的问题。

演示用咯

测试使用啊。不过好像单机负载比不负载强。

如果你的 web 没有再用 uwsgi 或者 gunicorn 这些底层库,直接 python web.py 的话。实际上只会用到单核。
多开几个进程,upstream 他们,是可以做到负载均衡的作用的。

Gunicorn 这种不是可以开多个 worker 吗?前端加负载比自己的多 worker 强?

在单台服务器上,起 uwsig 或 gunicorn 多进程利用多核性能,和 nginx 负载均衡直接带多个 web.py ,哪个性能更好些的?

nginx 可以手动指定 worker 也可以 auto 自动

肯定是 gunicorn 好啊。

这个其实还是要分情况的。

flask 的话推荐 gunicorn,tornado 就直接用内置的启动多个服务器,不用 gunicorn

说的对

Flask 只是个 web 开发框架,本身不管 IO,需要 gunicorn 来管理这部分
tornado 是 web 框架和 IO 框架二合一的东西,自己就能搞定

其实这个是因为一是很多 web 服务启动的时候是多进程不能共享一个端口的,二是当多进程的时候,io 会比较集中唤醒其中一个进程,比如 tornado,大部分请求会集中到其中一个进程上,导致延时会比较高,无法充分发挥系统性能

嗯 本地测试用啦

看起来你是没在同一台机器上跑多个 php-fpm/java/python …

回到顶部