V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
miniyao
V2EX  ›  Python

PythonWeb 开发书里 Nginx 配置的这几行示例代码,是不是写错了?

  •  
  •   miniyao · 2018-01-10 12:50:44 +08:00 · 2884 次点击
    这是一个创建于 2543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到书里 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 内部实现什么负载均衡的配置呢?是示例代码有问题吗?还是理解错了?

    13 条回复    2018-01-10 18:41:25 +08:00
    YRodT
        1
    YRodT  
       2018-01-10 13:07:54 +08:00 via Android   ❤️ 1
    这是让你在本机上做测试,实际当然均衡到不同的服务器
    GooMS
        2
    GooMS  
       2018-01-10 13:09:31 +08:00 via Android   ❤️ 1
    演示用咯
    sundayhk
        3
    sundayhk  
       2018-01-10 13:10:37 +08:00 via Android   ❤️ 1
    测试使用啊。不过好像单机负载比不负载强。
    Kilerd
        4
    Kilerd  
       2018-01-10 13:14:05 +08:00   ❤️ 4
    如果你的 web 没有再用 uwsgi 或者 gunicorn 这些底层库,直接 python web.py 的话。实际上只会用到单核。
    多开几个进程,upstream 他们,是可以做到负载均衡的作用的。
    liudaqi
        5
    liudaqi  
       2018-01-10 13:16:15 +08:00 via iPhone   ❤️ 1
    @sundayhk Gunicorn 这种不是可以开多个 worker 吗?前端加负载比自己的多 worker 强?
    miniyao
        6
    miniyao  
    OP
       2018-01-10 13:20:59 +08:00
    @Kilerd 在单台服务器上,起 uwsig 或 gunicorn 多进程利用多核性能,和 nginx 负载均衡直接带多个 web.py ,哪个性能更好些的?
    sundayhk
        7
    sundayhk  
       2018-01-10 13:24:19 +08:00 via Android
    @miniyao nginx 可以手动指定 worker 也可以 auto 自动
    Kilerd
        8
    Kilerd  
       2018-01-10 13:43:50 +08:00
    @miniyao 肯定是 gunicorn 好啊。
    Kilerd
        9
    Kilerd  
       2018-01-10 13:44:37 +08:00
    @miniyao 这个其实还是要分情况的。

    flask 的话推荐 gunicorn,tornado 就直接用内置的启动多个服务器,不用 gunicorn
    julyclyde
        10
    julyclyde  
       2018-01-10 16:07:57 +08:00
    @Kilerd 说的对

    Flask 只是个 web 开发框架,本身不管 IO,需要 gunicorn 来管理这部分
    tornado 是 web 框架和 IO 框架二合一的东西,自己就能搞定
    sujin190
        11
    sujin190  
       2018-01-10 16:24:32 +08:00
    其实这个是因为一是很多 web 服务启动的时候是多进程不能共享一个端口的,二是当多进程的时候,io 会比较集中唤醒其中一个进程,比如 tornado,大部分请求会集中到其中一个进程上,导致延时会比较高,无法充分发挥系统性能
    xuzequn
        12
    xuzequn  
       2018-01-10 18:15:44 +08:00
    嗯 本地测试用啦
    likuku
        13
    likuku  
       2018-01-10 18:41:25 +08:00
    看起来你是没在同一台机器上跑多个 php-fpm/java/python ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5511 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:42 · PVG 14:42 · LAX 22:42 · JFK 01:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.