美文网首页
译:Socket Sharding in NGINX Relea

译:Socket Sharding in NGINX Relea

作者: fjxCode | 来源:发表于2018-09-11 11:45 被阅读0次

    译:Socket Sharding in NGINX Release 1.9.1

    说明:没有完全翻译,挑重要的内容选译的。

    NGINX 1.9.1引入了一个新特性,能够使用SO_REUSEPORT套接口选项。SO_REUSEPORT在许多操作系中如DragonFly BSD和Linux(内核3.9以上)是可用的。

    这个套接口选项,允许多个套接口监听相同ip:port绑定。由内核通过sockets负载均衡传入的连接。

    SO_REUSEPORT套接口选项,有许多实用潜力。其它服务可以很容易地实现rolling upgrades(NGINX已经能够通过多种方法支持rolling upgrades)。对于NGINX而言,开启这个特性在许多场景中都能带来性能提升。

    如果SO_REUSEPORT选项没有开启,则由一个套接口监听多个传入连接所代表的workers。当SO_REUSEPORT开启时,会有多个socket listeners处理各自的ip:port,这样内核负载均衡给socket listener,socker listener转给自己的worker。

    由内核决定哪个sockerlistener能获得,可以有效减少锁竞争,提高多核电脑的性能。

    然而这也意味着,当一个worker因执行阻塞操作而停顿时,不仅会影响该worker已经接受的连接,还会影响到内核自阻塞以来,内核已经分配给该worker的连接请求。

    套接口拆分的配置

    配置SO_REUSEPORT,包括HTTP和TCP监听的reuseport参数。

    http {
         server {
              listen 80 reuseport;
              server_name  localhost;
              # ...
         }
    }
    
    stream {
         server {
              listen 12345 reuseport;
              # ...
         }
    }
    

    reuseport参数会禁用套接口的accept_mutex指令。因为对于reuseport来说锁是多余的。如果没有设置reuseport,设置accept_mutex仍是值得的。

    https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/

    相关文章

      网友评论

          本文标题:译:Socket Sharding in NGINX Relea

          本文链接:https://www.haomeiwen.com/subject/oxzygftx.html