2021年12月9日 星期四

Nginx學習筆記 (5) - Load balacing演算法


Nginx 內提供多種 Load Balance 演算法


Round robin

是 Nginx load balance 預設方法

上篇的測試我們其實還可以加入 weight 設定

upstream app {
    server my-app:5000 weight=2;
    server my-app-2:5001;
}

server {
    listen  80;
    server_name localhost;

    location / {
        proxy_pass http://app;
    }
}

my-app 會比 my-app-2 多收到兩倍訊息


Least connections

Nginx會比較目前active連線數,會導向目前最少連線的那個server

upstream app {
    least_conn;
    server my-app:5000;
    server my-app-2:5001;
}


Least time (NGINX Plus only)

會參考當前連線和之前 request 的 response time,選擇最小統計值的 server

least_time 後的參數是用來決定如何算 response time,header 是當收到 response header 就算 response time,last_byte 則是等到收完整個 response 才算

upstream backend {
    least_time (header | last_byte);

    server web1;
    server web2;
    server web3;
}


Hash

hash 後接文字或Nginx變數,以此計算每個 request 的 hash,並用 hash 結果來決定要送到哪個 server

upstream backend {
    hash $scheme$request_uri;

    server web1;
    server web2;
    server web3;
}


IP Hash

只適用 HTTP

會以用戶端 IP 來算 hash

upstream backend {
    ip_hash;

    server web1;
    server web2;
    server web3;
}


參考資料/推薦閱讀

1. https://www.nginx.com/blog/choosing-nginx-plus-load-balancing-techniques/



沒有留言:

張貼留言