# Thuật toán cân bằng tải

## Mô tả thuật toán

* **Round-robin**. Sau khi nhận được một kết nối TCP mới, kết nối đó sẽ lần lượt được gửi đến từng nút dịch vụ backend.
* **Địa chỉ nguồn (Source address)**. Dựa trên địa chỉ IP nguồn của kết nối TCP, một thuật toán băm (hash) được sử dụng để chuyển tiếp yêu cầu đến một nút dịch vụ cụ thể. Khi người dùng truy cập lại với cùng một IP nguồn, lượt truy cập vẫn sẽ được định tuyến đến cùng một nút dịch vụ nếu số lượng nút dịch vụ không thay đổi.
* **Địa chỉ nguồn (tính toán cổng)**. Dựa trên địa chỉ nguồn và cổng nguồn của kết nối TCP, sử dụng một thuật toán băm nhất định để chuyển yêu cầu đến một nút dịch vụ cụ thể. (Chỉ hỗ trợ chế độ chuyển tiếp gói tin)
* **Băm nhất quán (Consistent hashing)**. Thuật toán băm nhất quán lựa chọn các nút dịch vụ backend dựa trên địa chỉ IP nguồn và IP đích bằng kết quả của thuật toán băm nhất quán. Việc thêm hoặc bớt các nút dịch vụ backend sẽ chỉ ảnh hưởng đến một số lượng nhỏ kết nối. (Chỉ được hỗ trợ trong chế độ chuyển tiếp gói tin)
* **Băm nhất quán (tính toán cổng)**. Dựa trên địa chỉ IP nguồn/đích và cổng nguồn/đích, kết quả của thuật toán băm nhất quán được sử dụng để chọn các nút dịch vụ backend. Việc thêm hoặc xóa các nút dịch vụ backend sẽ chỉ ảnh hưởng đến một phần nhỏ các kết nối. (Chỉ được hỗ trợ trong chế độ chuyển tiếp gói tin)
* **Weighted round robin (Xoay vòng có trọng số)**. Sau khi nhận được một kết nối TCP mới, dựa trên các trọng số khác nhau của các nút dịch vụ backend mà bạn đã chỉ định, kết nối sẽ được phân bổ cho từng nút dịch vụ theo tỷ lệ xác suất.
* **Least connections (Kết nối ít nhất)**. Sau khi nhận được kết nối TCP mới, số lượng kết nối từ CLB đến các nút dịch vụ backend được thống kê theo thời gian thực và nút dịch vụ có số lượng kết nối thấp nhất sẽ được chọn để thiết lập kết nối mới và truyền dữ liệu. (Chỉ được hỗ trợ trong chế độ proxy yêu cầu)
* **Master-slave (Chủ-tớ)**. Chỉ có thể thêm hai nút dịch vụ dưới dạng nút master và nút slave dưới VServer. Khi quá trình kiểm tra sức khỏe (health check) của nút master thất bại, hệ thống sẽ tự động chuyển sang nút slave. (Nếu đã có các nút dịch vụ dưới VServer, bạn không được phép chuyển đổi từ các thuật toán cân bằng tải khác sang thuật toán "Master-slave".)

| Chế độ | Thuật toán chuyển tiếp được hỗ trợ |
|   :----: |:-----|
|Chế độ chuyển tiếp gói tin|Round Robin, Địa chỉ nguồn, Weighted Round Robin, Địa chỉ nguồn (Tính toán cổng), Consistent Hashing, Consistent Hashing (Tính toán cổng), Master-Slave|
|Chế độ proxy yêu cầu|Round Robin, Địa chỉ nguồn, Weighted Round Robin, Least Connections, Master-Slave|