Load balancing (cân bằng tải) là một thành phần hạ tầng quan trọng, được sử dụng rộng rãi để cải thiện hiệu suất và độ tin cậy của các trang web, ứng dụng, cơ sở dữ liệu và dịch vụ khác. Nó hoạt động bằng cách phân phối khối lượng công việc trên nhiều máy chủ, giúp tránh tình trạng quá tải và đảm bảo trải nghiệm người dùng mượt mà.
Một hệ thống web không có load balancing có thể gặp nhiều vấn đề. Ví dụ, nếu chỉ có một máy chủ duy nhất xử lý tất cả các yêu cầu, người dùng có thể gặp phải thời gian tải chậm hoặc thậm chí không thể truy cập được trang web, đặc biệt là khi có lượng truy cập lớn. Tệ hơn nữa, nếu máy chủ này gặp sự cố, toàn bộ trang web sẽ ngừng hoạt động.
Cơ sở hạ tầng web không có Load Balancing
Load balancing giải quyết vấn đề này bằng cách phân phối lưu lượng truy cập đến nhiều máy chủ. Thay vì người dùng kết nối trực tiếp đến một máy chủ duy nhất, họ sẽ kết nối đến một load balancer, sau đó sẽ chuyển tiếp yêu cầu đến một trong các máy chủ backend. Tất cả các máy chủ backend thường cung cấp nội dung giống hệt nhau, đảm bảo người dùng nhận được thông tin nhất quán bất kể máy chủ nào xử lý yêu cầu của họ.
Cơ sở hạ tầng web có Load Balancing
Tuy nhiên, việc chỉ sử dụng một load balancer duy nhất cũng có thể tạo ra điểm nghẽn. Để khắc phục điều này, người ta thường sử dụng nhiều load balancer để đảm bảo tính sẵn sàng cao và khả năng mở rộng. Trước khi đi sâu vào chi tiết đó, hãy tìm hiểu kỹ hơn về cách load balancer hoạt động.
Mục Lục
Các giao thức mà Load Balancer có thể xử lý
Load balancer có thể xử lý nhiều loại giao thức khác nhau, cho phép nó phân phối lưu lượng cho nhiều loại ứng dụng và dịch vụ. Dưới đây là bốn giao thức chính mà load balancer thường hỗ trợ:
- HTTP: Load balancing HTTP định tuyến yêu cầu dựa trên các cơ chế HTTP tiêu chuẩn. Load balancer thường thêm các tiêu đề như
X-Forwarded-For,X-Forwarded-ProtovàX-Forwarded-Portđể cung cấp cho các máy chủ backend thông tin về yêu cầu ban đầu, bao gồm địa chỉ IP của người dùng, giao thức được sử dụng (HTTP hoặc HTTPS) và cổng. - HTTPS: Load balancing HTTPS tương tự như HTTP balancing, nhưng có thêm tính năng mã hóa. Mã hóa có thể được xử lý theo hai cách:
- Passthrough SSL: Load balancer chuyển tiếp lưu lượng được mã hóa trực tiếp đến máy chủ backend, duy trì mã hóa trên toàn bộ đường đi.
- SSL Termination: Load balancer giải mã lưu lượng, giảm tải gánh nặng giải mã cho máy chủ backend. Sau đó, nó có thể gửi lưu lượng đã giải mã hoặc mã hóa lại đến backend.
- TCP: Load balancing TCP được sử dụng cho các ứng dụng không sử dụng HTTP hoặc HTTPS. Ví dụ: lưu lượng truy cập đến một cụm cơ sở dữ liệu có thể được phân phối trên tất cả các máy chủ cơ sở dữ liệu.
- UDP: Một số load balancer hiện nay hỗ trợ load balancing cho các giao thức internet lõi như DNS và syslogd, sử dụng UDP.
Các quy tắc chuyển tiếp xác định các giao thức và cổng mà load balancer sẽ lắng nghe, và cách nó sẽ định tuyến lưu lượng đến các giao thức và cổng tương ứng trên máy chủ backend.
Cách Load Balancer chọn máy chủ Backend
Load balancer chọn máy chủ backend để chuyển tiếp yêu cầu dựa trên sự kết hợp của hai yếu tố: kiểm tra sức khỏe (health checks) và thuật toán load balancing.
Health Checks
Load balancer chỉ chuyển tiếp lưu lượng đến các máy chủ backend “khỏe mạnh”. Để đảm bảo điều này, nó thường xuyên thực hiện kiểm tra sức khỏe bằng cách cố gắng kết nối đến máy chủ backend bằng giao thức và cổng được chỉ định trong quy tắc chuyển tiếp. Nếu một máy chủ không vượt qua kiểm tra sức khỏe, nó sẽ tự động bị loại khỏi danh sách các máy chủ khả dụng và sẽ không nhận được lưu lượng cho đến khi nó vượt qua kiểm tra sức khỏe trở lại.
Các thuật toán Load Balancing phổ biến
Sau khi xác định được các máy chủ backend khỏe mạnh, load balancer sử dụng một thuật toán để chọn máy chủ nào sẽ nhận yêu cầu tiếp theo. Một số thuật toán phổ biến bao gồm:
- Round Robin: Máy chủ được chọn theo thứ tự tuần tự. Load balancer sẽ chọn máy chủ đầu tiên trong danh sách cho yêu cầu đầu tiên, sau đó chuyển xuống danh sách theo thứ tự, bắt đầu lại từ đầu khi đến cuối.
- Least Connections: Load balancer sẽ chọn máy chủ có số lượng kết nối đang hoạt động ít nhất. Điều này giúp đảm bảo rằng không có máy chủ nào bị quá tải.
- Source IP Hash: Load balancer chọn máy chủ dựa trên một hàm băm của địa chỉ IP nguồn của yêu cầu. Điều này đảm bảo rằng một người dùng cụ thể sẽ luôn được kết nối với cùng một máy chủ backend, rất hữu ích cho các ứng dụng yêu cầu tính liên tục của phiên.
Load Balancer dự phòng
Các thuật toán khác nhau có sẵn tùy thuộc vào công nghệ load balancer được sử dụng.
Xử lý trạng thái (State) trong Load Balancing
Một số ứng dụng yêu cầu người dùng phải được kết nối liên tục đến cùng một máy chủ backend trong suốt phiên làm việc của họ. Điều này đặc biệt quan trọng đối với các ứng dụng có trạng thái (stateful), nơi dữ liệu phiên của người dùng được lưu trữ trên máy chủ backend. Có hai cách chính để xử lý trạng thái trong load balancing:
- Thuật toán Source IP Hash: Như đã đề cập ở trên, thuật toán này tạo ra mối quan hệ giữa địa chỉ IP của khách hàng và máy chủ backend.
- Sticky Sessions (Phiên dính): Load balancer đặt một cookie trong trình duyệt của người dùng, và tất cả các yêu cầu tiếp theo từ phiên đó sẽ được định tuyến đến cùng một máy chủ backend.
Load Balancing dự phòng để tăng tính sẵn sàng
Để loại bỏ load balancer như một điểm lỗi duy nhất, có thể triển khai nhiều load balancer trong một cấu hình dự phòng. Trong cấu hình này, một load balancer hoạt động như load balancer chính, trong khi các load balancer khác hoạt động như bản sao lưu. Nếu load balancer chính bị lỗi, một trong các bản sao lưu sẽ tự động tiếp quản và bắt đầu xử lý lưu lượng truy cập.
Trong trường hợp load balancer chính bị lỗi, DNS phải được cập nhật để trỏ đến load balancer dự phòng. Tuy nhiên, việc thay đổi DNS có thể mất một khoảng thời gian đáng kể để lan truyền trên internet. Để giải quyết vấn đề này, nhiều quản trị viên sử dụng các hệ thống cho phép ánh xạ lại địa chỉ IP một cách linh hoạt, chẳng hạn như Floating IPs.
Cơ sở hạ tầng sử dụng Floating IPs
Floating IPs cho phép ánh xạ một địa chỉ IP tĩnh đến một máy chủ khác một cách nhanh chóng và dễ dàng. Khi load balancer chính bị lỗi, Floating IP sẽ được chuyển sang load balancer dự phòng, đảm bảo thời gian chết tối thiểu.
Kết luận
Load balancing là một công nghệ thiết yếu để xây dựng các ứng dụng và dịch vụ web có khả năng mở rộng, độ tin cậy cao. Bằng cách phân phối lưu lượng truy cập trên nhiều máy chủ, load balancing giúp cải thiện hiệu suất, ngăn ngừa quá tải và đảm bảo tính sẵn sàng liên tục. Việc lựa chọn giao thức, thuật toán và cấu hình dự phòng phù hợp phụ thuộc vào yêu cầu cụ thể của ứng dụng và cơ sở hạ tầng của bạn.
