5 Phương thức Load Balancer trên Nginx

Từ trước giờ, cứ nghĩ tới load balancer là mình toàn chỉ nghĩ đến round-robin, nhưng thực sự ra không phải là vậy. Hôm nay đang định dựng một con nginx load balancer thì mới thấy một vài documnet rất hay từ Nginx.

Trên Nginx resources thì Nginx có 5 cách để load balancer.

1.Round-Robin

Cách này là mặc định của Nginx, các request sẽ được phân tán đều nhau trên các web server. Có vẻ đây là các đơn giản và dễ hiểu nhất.

upstream backend { server backend1.example.com; server backend2.example.com; }

2.Least Connection

Theo cách này, Các requests mới sẽ luôn dẫn vào các server có số lượng active connections ít nhất. Cách này sẽ rất hữu dụng trong trường hợp các kết nối đến server tồn tại trong một thời gian, thì việc chia đều các kết nối ở các server khác nhau là một việc cần thiết.

upstream backend { least_conn; server backend1.example.com; server backend2.example.com; }

3. Least Time

Hình như cách này chỉ có ở Nginx Plus (một sản phẩm trả tiền của Nginx). Khi một request đi tới, Nginx sẽ chọn một server có độ trễ trung bình thấp nhất và có số active connection thấp nhất để điều hướng cho request vào. Cách này bao gồm cả cách thứ 2 (nhắc lại: trả tiền mới có mà).

upstream backend { least_time header; server backend1.example.com; server backend2.example.com; }

4. IP Hash

Vâng, đây cũng là một cách thông dụng và cũng dễ hiểu. Nginx sẽ dựa vào 3 octets đầu tiên của IP client để quyết định request sẽ đi vào server nào. Theo cách này, thì các request có cùng địa chỉ IP sẽ vào đúng một server (tất nhiên là trừ khi nó chết :D).

upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; }

5. Hash

Theo cách này, Nginx sẽ dựa vào một user-defined data để xác định request sẽ đi vào server nào. User-defined data có thể là text, biến hoặc một tổ hợp nào đó. Đây là cách duy nhất load balancer mà bạn có thể dùng khóa của riêng mình để quyết định load balancer.

Kết Luận

5 cách/phương thức load balancer của nginx cho phép bạn rất nhiều tùy chọn để có thể xây dựng một ứng dụng load balancer đạt perfomance cao nhất của riêng bạn.