本文最后更新于:2020年7月1日 晚上
* 快马加鞭。。。再看看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进程有机会去处理更多的新连接
* 码完收工。。。准备睡觉。。。→_→ *
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!