Trong thực tế, bài toán cân bằng tải là phần rất quan trọng trong các dự án lớn, giúp điều hướng giải quyết yêu cầu tới nhiều server khác nhau.
Để việc tìm hiểu trở nên dễ dàng, bạn cần host 3 server nodeJS đơn giản để có thể dễ dàng thực nghiệp với chủ đề này.
Để thực hiện tính năng này, ta cần tới sự giúp đỡ của PM2
Để cài đặt, hãy chạy câu lệnh sau
sudo npm install -g pm2
Sau khi cài đặt xong, hãy chạy câu lệnh sau để thực hiện chạy 3 server nodeJS
pm2 start /srv/nglearns/load-balancer-demo/server-1.js
pm2 start /srv/nglearns/load-balancer-demo/server-2.js
pm2 start /srv/nglearns/load-balancer-demo/server-3.js
Để kiểm tra các server đã được chạy hay chưa, ta dùng câu lệnh sau
pm2 list
Kết quả
# ┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
# │ id │ name │ mode │ ↺ │ status │ cpu │ memory │
# ├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
# │ 0 │ server-1 │ fork │ 0 │ online │ 0% │ 37.4mb │
# │ 1 │ server-2 │ fork │ 0 │ online │ 0% │ 37.2mb │
# │ 2 │ server-3 │ fork │ 0 │ online │ 0% │ 37.1mb │
# └────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
Hãy đảm bảo rằng 3 server NodeJS của bạn đã được thiết lập để chạy trên 3 port 3001, 3002, 3003
Để triển khai, ta hãy tham khảo qua ví dụ sau
events {
}
http {
upstream backend_servers {
server localhost:3001;
server localhost:3002;
server localhost:3003;
}
server {
listen 80;
server_name nglearns.test;
location / {
proxy_pass http://backend_servers;
}
}
}
Tại đây, bằng cách sử dụng context upstream
, ta sẽ tạo ra tập hợp các server và thiết lập chúng trở thành một BE duy nhất
Hãy thực hiện câu lệnh sau để thấy được cách hoạt động của chúng.
while sleep 0.5; do curl http://nglearns.test; done
Kết quả
# response from server - 2.
# response from server - 3.
# response from server - 1.
# response from server - 2.
# response from server - 3.
# response from server - 1.
# response from server - 2.
# response from server - 3.
# response from server - 1.
# response from server - 2.
Bạn có thể dùng tổ hợp phím Ctrl + C
để ngừng tiến trình.
Tại ví dụ trên, các bạn thấy rằng nginx đã điều hướng request của người dùng tới từng server một cách tự động.
Để ngừng tiến trình server bất kỳ, hãy sử dụng câu lệnh sau
pm2 stop server-1
Bằng cách này, bạn đã thành công ngừng chạy server 1 trong hệ thống BE.