V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

在同一台机器上对同一 web 程序运行多个进程,然后 nginx 负载均衡有意义吗?

  •  
  •   guyeuro · 2017-08-08 15:12:04 +08:00 · 3140 次点击
    这是一个创建于 2699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看到有的公司某个 web 应用这么做,有点奇怪

    22 条回复    2017-08-09 11:28:51 +08:00
    ixiaohei
        1
    ixiaohei  
       2017-08-08 15:18:15 +08:00
    如果是滚动升级可能还有点用(升级一个另外个还能服务),另外可能是 32 位系统,装了多个 jvm?以前见过很多人这么用,其他的作用未知。
    ixiaohei
        2
    ixiaohei  
       2017-08-08 15:18:46 +08:00
    上面写错了,32 位 jvm,64 位系统。
    guyeuro
        3
    guyeuro  
    OP
       2017-08-08 16:04:23 +08:00
    @ixiaohei 装多个 jvm 的好处?
    xmadi
        4
    xmadi  
       2017-08-08 16:09:20 +08:00 via iPhone
    有意义 比如 nodejs 本身是线程的 如果想充分利用多核 这是一种比较常见的方法 因为不需要改动代码 只要多运行几个实例就可以了 当然也有专门的多进程的模块 需要稍微改一些项目代码
    xmadi
        5
    xmadi  
       2017-08-08 16:09:57 +08:00 via iPhone
    @xmadi nodejs 本身是单线程的
    guyeuro
        6
    guyeuro  
    OP
       2017-08-08 17:25:33 +08:00
    @xmadi 我说的是 java web 项目
    TangMonk
        7
    TangMonk  
       2017-08-08 17:28:12 +08:00
    node 和 ruby 就是这样的,因为 node 和 ruby 不能利用多核心, 只能 fork 多个进程来负载均衡
    loveCoding
        8
    loveCoding  
       2017-08-08 17:37:41 +08:00
    答案是不一定 .看应用上限瓶颈在哪里 .
    misaka19000
        9
    misaka19000  
       2017-08-08 17:52:11 +08:00 via Android
    当然有,充分发挥机器性能啊
    guyeuro
        10
    guyeuro  
    OP
       2017-08-08 18:09:27 +08:00
    @misaka19000 具体?带宽,CPU, 内存哪方面的性能在单 web 程序下有被浪费?
    swulling
        11
    swulling  
       2017-08-08 18:16:26 +08:00
    有意义:
    1. 提前留好横向扩展的潜力,如果一台机器性能不足,可以很方便的快速扩容,而不是再折腾一番
    2. nginx 可以做一些事情,不用到后端,比如简单的封禁、防攻击、请求监控、静态文件、URL rewrite 等
    3. 如果后端是 Tornado 之类不能利用多核的单进程服务,相当于做了多进程

    甚至还有更极端的,某厂的通用 PHP 容器,就是一个 nginx+php-fpm+业务逻辑,注意是每个容器内都有一个 nginx 哈,也是为了统一架构,方便监控、部署等等
    kokdemo
        12
    kokdemo  
       2017-08-08 18:23:05 +08:00
    想起来自己待的第一家公司

    部门的技术负责人就是在同一台服务器上搭了好几个 tomcat 搞『负载均衡』

    看的我目瞪狗呆
    TheCure
        13
    TheCure  
       2017-08-08 18:57:07 +08:00
    @swulling 然后前面还要套一层 BFE
    guyeuro
        14
    guyeuro  
    OP
       2017-08-08 23:08:19 +08:00
    @swulling
    你说的 3 点

    1 我没看懂,一台机器一个 web 应用就不能扩容?
    2 这个和一台机器运行一个还是多个应用没关系啊
    3 是 java tomcat
    guyeuro
        15
    guyeuro  
    OP
       2017-08-08 23:09:17 +08:00
    @kokdemo 就是 java tomcat,同时跑好几个同一应用的实例
    有啥用?
    swulling
        16
    swulling  
       2017-08-09 00:08:01 +08:00 via iPhone
    @guyeuro 夏虫不可语冰
    @callofmx 多层结构,有的还有专门的 NGINX 接入层,结构复杂归复杂,但是能够实现很精确的流量调度,目前任意一个单机房故障自动避险已经没问题了
    sagaxu
        17
    sagaxu  
       2017-08-09 00:08:10 +08:00 via Android
    @guyeuro 比如灰度发布,比如发布新版本重启服务可以少丢请求
    ixiaohei
        18
    ixiaohei  
       2017-08-09 09:47:00 +08:00
    @guyeuro 32 位 jvm 比 64 位 jvm 性能好,但是内存是 32 位限制,当初有很多人这么玩,现在几乎都是用 64jvm。
    coolyujiyu
        19
    coolyujiyu  
       2017-08-09 10:04:33 +08:00
    可以啊,没毛病啊,只要机器配置扛得住
    还可以支持灰度发布呢
    guyeuro
        20
    guyeuro  
    OP
       2017-08-09 10:54:45 +08:00
    @coolyujiyu 好处是啥?
    guyeuro
        21
    guyeuro  
    OP
       2017-08-09 10:55:08 +08:00
    @coolyujiyu 我意思除了灰度发布外,还有啥好处
    TheCure
        22
    TheCure  
       2017-08-09 11:28:51 +08:00
    @swulling 有了 bfe 为啥还要 nginx?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   930 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:08 · PVG 06:08 · LAX 14:08 · JFK 17:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.