Nginx中的负载均衡

*快马加鞭。。。再看看Nginx中的负载均衡是如何实现的。。。轮询。。。?一致性哈希。。。?→_→*

  • 在Nginx中每一个worker进程都有一个自己的ngx_accept_disabled,它就是实现负载均衡机制的关键阈值

    ngx_int_t   ngx_accept_disabled;//整形
  • 在Nginx启动时,初始化ngx_accept_disabled为一个负数,其值为连接总数的7/8

    ngx_accept_disabled = ngx_cycle->connection_n / 8
                                  - ngx_cycle->free_connection_n;
  • 当ngx_accept_disabled为负数时触发负载均衡,而当ngx_accept_disabled为正数时就会触发负载均衡了

    //当ngx_accept_disabled大于0时,当前worker进程不再处理新连接事件,而是将ngx_accept_disabled只将减1
    if (ngx_accept_disabled > 0) {
                ngx_accept_disabled--;
    
            } else {
                if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
                    return;
                }
  • ngx_accept_disabled大于0时,即当前使用的连接数到达总连接数的7/8时,就不会再处理新连接事件了,且每次调用ngx_process_events_and_timers时都会将ngx_accept_disabled减1

    ngx_accept_disabled小于等于0时,即当前使用的连接数没有到达总连接数的7/8时,才会调用ngx_trylock_accept_mutex试图去处理新的新的连接事件

  • Nginx中各个worker进程间的负载均衡仅在某个worker进程处理的连接数到达它的最大处理总数的7/8时才会触发,这时该worker进程就减少了处理新连接的机会,有助于其他空闲的worker进程有机会去处理更多的新连接

*码完收工。。。准备睡觉。。。→_→*

猜你喜欢

转载自blog.csdn.net/kongkongkkk/article/details/76862112