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進程有機會去處理更多的新連接

*碼完收工。。。準備睡覺。。。→_→*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章