Skip to content

Load balancer ​


Nguồn: Scalable system design patterns

Load balancer phân phối các request đến từ client tới các tài nguyên tính toán như application server và database. Trong mỗi trường hợp, load balancer trả response từ tài nguyên tính toán về đúng client đã gửi request. Load balancer hiệu quả trong việc:

  • Ngăn request đi tới các server không khỏe
  • Ngăn tài nguyên bị quá tải
  • Góp phần loại bỏ single point of failure

Load balancer có thể triển khai bằng phần cứng (đắt) hoặc bằng phần mềm như HAProxy.

Các lợi ích bổ sung gồm:

  • SSL termination: Giải mã các request đến và mã hóa response của server để các backend server không phải thực hiện những thao tác có thể tốn kém này
  • Session persistence: Cấp cookie và định tuyến các request của một client cụ thể tới cùng một instance nếu web app không tự theo dõi session

Để phòng lỗi, người ta thường dựng nhiều load balancer, ở chế độ active-passive hoặc active-active.

Load balancer có thể định tuyến traffic dựa trên nhiều tiêu chí, gồm:

Layer 4 load balancing ​

Layer 4 load balancer dựa vào thông tin ở tầng transport để quyết định cách phân phối request. Thông thường đó là địa chỉ IP nguồn, địa chỉ IP đích và port trong header, chứ không xem nội dung của packet. Layer 4 load balancer chuyển tiếp các network packet tới và từ upstream server, đồng thời thực hiện Network Address Translation (NAT).

Layer 7 load balancing ​

Layer 7 load balancer dựa vào tầng application để quyết định cách phân phối request. Việc này có thể dùng nội dung của header, message và cookie. Layer 7 load balancer kết thúc (terminate) network traffic, đọc message, đưa ra quyết định load balancing, rồi mở một kết nối tới server được chọn. Ví dụ, một layer 7 load balancer có thể chuyển traffic video tới các server lưu trữ video, đồng thời chuyển traffic thanh toán nhạy cảm của người dùng tới các server đã được tăng cường bảo mật.

Đổi lại sự linh hoạt, layer 4 load balancing tốn ít thời gian và tài nguyên tính toán hơn Layer 7, dù ảnh hưởng tới hiệu năng có thể không đáng kể trên phần cứng commodity hiện đại.

Mở rộng theo chiều ngang ​

Load balancer cũng giúp mở rộng theo chiều ngang (horizontal scaling), cải thiện hiệu năng và tính sẵn sàng. Scale out bằng các máy commodity tiết kiệm chi phí hơn và cho tính sẵn sàng cao hơn so với scale up một server đơn lẻ lên phần cứng đắt tiền hơn, cách này gọi là Vertical Scaling. Tuyển người làm việc với phần cứng commodity cũng dễ hơn so với các hệ thống enterprise chuyên dụng.

Nhược điểm: horizontal scaling ​

  • Mở rộng theo chiều ngang làm tăng độ phức tạp và đòi hỏi nhân bản (clone) server
    • Server nên stateless: không nên chứa dữ liệu liên quan tới người dùng như session hay ảnh đại diện
    • Session có thể lưu trong một data store tập trung như database (SQL, NoSQL) hoặc một cache bền vững (Redis, Memcached)
  • Các server downstream như cache và database phải xử lý nhiều kết nối đồng thời hơn khi các server upstream scale out

Nhược điểm: load balancer ​

  • Load balancer có thể trở thành nút thắt cổ chai về hiệu năng nếu không đủ tài nguyên hoặc cấu hình không đúng.
  • Đưa load balancer vào để loại bỏ single point of failure lại làm tăng độ phức tạp.
  • Một load balancer đơn lẻ vẫn là single point of failure, còn cấu hình nhiều load balancer thì độ phức tạp tăng thêm nữa.

Nguồn và đọc thêm ​