Cân Bằng Tải (Load Balancing) Là Gì? Tại Sao Hệ Thống Lớn Bắt Buộc Phải Có
Trong các hệ thống hiện đại như Facebook, Shopee, TikTok hay các nền tảng SaaS, hàng nghìn đến hàng triệu request có thể được gửi đến server mỗi phút. Nếu toàn bộ request đều đổ vào một máy chủ duy nhất, hệ thống sẽ nhanh chóng bị quá tải.
Đây là lúc cân bằng tải (Load Balancing) trở thành một thành phần cực kỳ quan trọng.
Cân Bằng Tải Là Gì?
Cân bằng tải (Load Balancing) là kỹ thuật phân phối request từ người dùng tới nhiều server khác nhau nhằm:
- Tránh quá tải cho một server
- Tăng tốc độ phản hồi
- Tăng khả năng chịu lỗi
- Dễ dàng mở rộng hệ thống
Thay vì:
User -> Server
Hệ thống sẽ hoạt động như sau:
┌──────────┐
User Request -> │ Load │
│ Balancer │
└────┬─────┘
│
┌───────────┼───────────┐
│ │ │
Server 1 Server 2 Server 3
Load Balancer sẽ quyết định request nên được gửi đến server nào.
Vì Sao Cần Cân Bằng Tải?
1. Tránh Server Bị Sập
Nếu chỉ có một server:
- CPU có thể lên 100%
- RAM đầy
- Request timeout
- Website/app bị treo
Cân bằng tải giúp chia đều lượng truy cập.
2. Tăng Hiệu Năng
Nhiều server xử lý song song sẽ:
- Giảm độ trễ
- Tăng tốc độ phản hồi
- Hỗ trợ nhiều người dùng cùng lúc
3. Dễ Scale Hệ Thống
Ví dụ:
- 1 server chịu được 1.000 user online
- 10 server có thể chịu được ~10.000 user online
Khi traffic tăng, chỉ cần thêm server mới.
4. Tăng Tính Ổn Định
Nếu một server chết:
Server 2 ❌
Load Balancer sẽ tự động chuyển traffic sang server còn sống.
Người dùng gần như không nhận ra sự cố.
Các Thuật Toán Cân Bằng Tải Phổ Biến
Round Robin
Request được chia lần lượt:
Request 1 -> Server 1
Request 2 -> Server 2
Request 3 -> Server 3
Request 4 -> Server 1
Ưu điểm
- Đơn giản
- Dễ triển khai
Nhược điểm
- Không quan tâm server mạnh/yếu
Least Connections
Server nào đang ít kết nối nhất sẽ nhận request mới.
Ví dụ:
Server 1: 200 connections
Server 2: 50 connections
Request tiếp theo sẽ vào Server 2.
IP Hash
Dựa theo IP user để quyết định server.
Điều này giúp:
- User luôn vào cùng một server
- Hữu ích cho session/login
Weighted Load Balancing
Server mạnh hơn nhận nhiều request hơn.
Ví dụ:
Server A: weight 10
Server B: weight 2
Server A sẽ nhận traffic nhiều hơn.
Các Loại Load Balancer
1. Software Load Balancer
Phổ biến nhất hiện nay.
Ví dụ:
- NGINX
- HAProxy
- Traefik
- Envoy
Ưu điểm
- Chi phí thấp
- Linh hoạt
- Dễ cấu hình
2. Hardware Load Balancer
Thiết bị vật lý chuyên dụng.
Ví dụ:
- F5 BIG-IP
Ưu điểm
- Hiệu năng rất cao
Nhược điểm
- Giá đắt
- Khó mở rộng
3. Cloud Load Balancer
Dịch vụ managed từ cloud provider.
Ví dụ:
- AWS ELB
- Google Cloud Load Balancer
- Azure Load Balancer
Ưu điểm
- Auto scale
- Dễ triển khai
- Không cần quản lý hạ tầng
Reverse Proxy Và Load Balancer Khác Gì Nhau?
Nhiều người nhầm giữa hai khái niệm này.
Reverse Proxy
Đứng trước server để:
- Ẩn backend
- Cache
- SSL
- Routing
Load Balancer
Tập trung vào:
- Phân phối traffic
- Chia tải
- Failover
Thực tế:
NGINX có thể làm cả Reverse Proxy lẫn Load Balancer.
Ví Dụ Cấu Hình Load Balancing Với NGINX
http {
upstream backend_servers {
server 192.168.1.10;
server 192.168.1.11;
server 192.168.1.12;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
NGINX sẽ tự động chia request giữa các server backend.
Health Check Là Gì?
Load Balancer thường sẽ kiểm tra:
- Server còn sống không
- API có phản hồi không
- Response time có ổn không
Nếu server lỗi:
Server 3 ❌
Load Balancer sẽ loại server đó khỏi hệ thống tạm thời.
Sticky Session Là Gì?
Một số ứng dụng lưu session trong RAM của server.
Ví dụ:
User login ở Server 1
Nếu request tiếp theo vào Server 2:
Session not found
User sẽ bị logout.
Sticky Session giúp user luôn vào cùng một server.
Tuy nhiên hiện nay đa số hệ thống lớn sẽ:
- Lưu session vào Redis
- Hoặc dùng JWT
Để tránh phụ thuộc Sticky Session.
Load Balancing Trong Kubernetes
Trong Kubernetes:
- Service
- Ingress
- Ingress Controller
đều có cơ chế cân bằng tải.
Ví dụ:
Ingress
↓
Service
↓
Pod 1
Pod 2
Pod 3
Kubernetes sẽ tự động phân phối request tới các Pod.
Kiến Trúc Thực Tế
Một hệ thống production thường như sau:
Internet
↓
CDN
↓
Load Balancer
↓
Nginx Reverse Proxy
↓
Application Servers
↓
Redis / Database
Khi Nào Cần Dùng Cân Bằng Tải?
Bạn nên bắt đầu dùng Load Balancer khi:
- Có nhiều hơn 1 server
- Traffic tăng cao
- Cần HA (High Availability)
- Không muốn downtime
- Muốn scale ngang dễ dàng
Kết Luận
Cân bằng tải là nền tảng quan trọng trong mọi hệ thống lớn hiện nay.
Nó giúp:
- Tăng hiệu năng
- Tăng độ ổn định
- Chống quá tải
- Dễ mở rộng hệ thống
Dù bạn đang xây dựng:
- Website
- SaaS
- Hệ thống crawl
- Bot automation
- API backend
- Kubernetes cluster
thì sớm hay muộn, bạn cũng sẽ cần đến Load Balancing.
Một Số Công Nghệ Phổ Biến
| Công Nghệ | Mục Đích |
|---|---|
| NGINX | Reverse Proxy + Load Balancer |
| HAProxy | TCP/HTTP Load Balancer |
| Traefik | Dynamic Load Balancer |
| Envoy | Service Mesh Proxy |
| AWS | ELB Cloud Load Balancer |
| Kubernetes | Ingress Container Load Balancing |
All rights reserved