HAProxy là gì? Các thuật ngữ và ứng dụng cân bằng tải của HAProxy

Cân bằng tải trong HAProxy là gì? Có mấy loại cân bằng tải? HAProxy và Nginx giống và khác nhau như thế nào?

Cân bằng tải trong HAProxy là gì? Có mấy loại cân bằng tải? HAProxy và Nginx giống và khác nhau như thế nào? Mời bạn cùng theo dõi bài tổng hợp sau để có lời giải cho các vấn đề này nhé.

HAProxy là gì?

HAProxy là từ viết tắt của cụm từ High Availability Proxy. Nó là một công cụ có mã nguồn mở được sử dụng để cân bằng tải TCP/HTTP, và là giải pháp máy chủ Proxy. Công cụ này hoạt động trên các môi trường Linux, FreeBSD, Solaris.

Công dụng của HAProxy là cải thiện hiệu năng, độ tin cậy của hệ thống máy chủ thông qua việc phân phối công việc cho nhiều máy chủ (cụ thể là web, ứng dụng, cơ sở dữ liệu).

Hiện nay, nhiều website lớn như Twitter, GoDaddy, Reddit, Bitbucket, GitHub, Stack Overflow, Speedtest.net, và các sản phẩm do Amazon Web Service cung cấp đều sử dụng HAProxy.

Các thuật ngữ, khái niệm trong HAProxy
Trong HAProxy có nhiều thuật ngữ, khái niệm được sử dụng. Tuy nhiên, trong phạm vi bài viết này, chúng tôi chỉ đề cập đến những khái niệm thông dụng.

Access Control List (ACL)
ACL được dùng để kiểm tra một vài điều kiện, đồng thời tiến hành các hành động tiếp theo dựa vào kết quả kiểm tra (ví dụ chặn một yêu cầu, lựa chọn một máy chủ). ACL cũng hỗ trợ việc điều tiết linh hoạt lưu lượng mạng dựa vào nhiều yếu tố (ví dụ dựa vào đường dẫn).

Backend
Đây là tập hợp các máy chủ nhận các yêu cầu được điều tiết. Các backend này được được định nghĩa khi cấu hình HAProxy.

Có 2 loại cấu hình phổ biến được định nghĩa trong backend:

  • Thuật toán cân bằng tải (bao gồm Round Robin, Least Connection, và IP Hash).
  • Danh sách máy chủ, Cổng (đảm nhận việc Nhận, và xử lý các yêu cầu).

Backend chứa một hoặc nhiều máy chủ. Khi thêm nhiều máy chủ vào backend sẽ giúp cải thiện tải, hiệu năng cũng như độ tin cậy của dịch vụ. Bên cạnh đó, khi có một máy chủ trong backend xảy ra sự cố thì các máy chủ khác sẽ đảm nhận việc chịu tải cho máy chủ này.

Ví dụ:

backend web-backend

balance roundrobin

server web1 web1.yourdomain.com:80 check

server web2 web2.yourdomain.com:80 check

backend blog-backend

balance roundrobin

mode http

server blog1 blog1.yourdomain.com:80 check

server blog1 blog1.yourdomain.com:80 check

Trong đó:

  • balance roundrobin: Là thuật toán cân bằng tải, các yêu cầu sẽ được phân phối đến các máy chủ. Đây chính là phương pháp sử dụng mặc định.
  • mode http: Là chỉ định proxy layer 7

Frontend
Frontend đóng vai trò định nghĩa cách thức mà các yêu cầu được điều tiết tới backend. Tương tự như backend, frontend cũng có thư mục frontend để định nghĩa các cấu hình frontend.

Cấu hình frontend gồm 3 thành phần sau:

  • Tập các địa chỉ IP và Cổng (VD: 10.10.10.86:80, *:443).
  • Các ACL.

Các backend nhận, xử lý yêu cầu.
haproxy
Các loại cân bằng tải trong HAProxy
Sau đây là 3 loại cân bằng tải trong HAProxy

1. Không có cân bằng tải
Đây là một kiến trúc đơn giản nhất của quá trình triển khai web.

Dưới đây là ví dụ mô phỏng kiến trúc này. Theo đó, người dùng được kết nối trực tiếp với máy chủ web thông qua internet mà không dùng đến dịch vụ cân bằng tải. Điều này có nghĩa, khi máy chủ web gặp sự cố, người dùng không thể kết nối với nó được. Ngoài ra, nếu có nhiều người truy cập cùng lúc thì có thể xảy ra tình trạng máy chủ web không đáp ứng được các yêu cầu, gây ảnh hưởng xấu đến trải nghiệm của người dùng.

haproxy

2. Layer 4 Load Balancing
Để cân bằng tải các request đến nhiều máy chủ, bạn có thể dùng cân bằng tải layer 4 TCP (Transport layer – Tầng giao vận). Đây là phương pháp đơn giản, giúp điều hướng request bằng cách dựa vào IP, và Port.

Hình minh họa dưới đây là ví dụ về layer 4 load balancing.

Trong ví dụ này, khi request truy cập địa chỉ https://hostingviet.vn/, HAProxy sẽ thực hiện điều hướng đến backend web-backend xử lý.

Lưu ý:

Hai webserver phải có nội dung giống nhau nhằm có thể phản hồi một kết quả thống nhất cho người dùng. Để làm được điều này, bạn ưu tiên dùng chung một cơ sở dữ liệu cho 2 máy chủ web.

haproxy

3. Layer 7 Load Balancing
Đây là một phương pháp tương đối phức tạp vì cân bằng tải tại tầng layer 7 (Application layer – Tầng ứng dụng). Khi dùng cân bằng tải tại layer 7 sẽ giúp điều hướng các request đến nhiều backend khác nhau, bằng cách dựa vào nội dung request.

Chế độ cân bằng tải này cho phép bạn dễ dàng triển khai nhiều máy chủ web server trên cùng một tên miền duy nhất.

haproxy

Theo ví dụ, khi người dùng gửi yêu cầu truy cập đến https://hostingviet.vn/ thì HAProxy sẽ thực hiện điều hướng request tới web-1-backend. Nếu người dùng gửi yêu cầu truy cập tới https://hostingviet.vn/about/ thì HAProxy sẽ tiến hành điều hướng request đến web-2-backend.

Các thuật toán cân bằng tải được sử dụng trong HAProxy
Trong HAProxy, các thuật toán cân bằng tải được dùng là:

roundrobin: Đây là thuật toán mặc định của HAProxy. Nó thực hiện nhiệm vụ chuyển request đến máy chủ theo lượt.
leastconn: Thuật toán đóng vai trò chuyển các request đến máy chủ có ít kết nối nhất.
source: Thuật toán chuyển các request đến máy chủ dựa vào việc hash IP của người dùng, nhằm đảm bảo họ luôn được kết nối đến một máy chủ.
Health Check của HAProxy
Health check được dịch vụ cân bằng tải HAProxy sử dụng nhằm mục đích phát hiện những backend server đã sẵn sàng để xử lý các yêu cầu truy cập. Đây là một kỹ thuật giúp tránh việc loại bỏ máy chủ khỏi backend một cách thủ công khi nó chưa sẵn sàng. Bằng cách thiết lập kết nối TCP đến máy chủ, Health check sẽ kiểm tra được tính sẵn sàng xử lý request của backend server.

Khi không thể kết nối tới bất kỳ máy chủ nào, Health check tự động loại bỏ nó khỏi backend, đồng thời tất cả các traffic đều không được chuyển hướng đến máy chủ này cho đến khi nó thực hiện được Health check.

Trong trường hợp, toàn bộ máy chủ thuộc backend xảy ra sự cố, dịch vụ sẽ chuyển trạng thái không khả dụ (HAProxy hiển thị status code 500). Khi có một máy chủ thuộc backend được chuyển từ trạng thái không khả dụ sang sẵn sàng, thì thông báo này không còn hiển thị, và kết nối trở lại bình thường.

haproxy

So sánh HAProxy vs Nginx
Cả HAProxy và Nginx đều là dịch vụ cân bằng tải ổn định, được nhiều người sử dụng. HAProxy được phát triển để phục vụ cho mục đích cân bằng tải. Còn Nginx là một webserver có khả năng hoạt động như bộ cân bằng tải.

Giống nhau:

Hỗ trợ HTTP, HTTPS, websocket.
Cân bằng tải HTTP, HTTPS
Hoạt động ổn định, và hiệu quả.
Có khả năng xử lý kết nối 10k mà không cần điều chỉnh.
Cho phép tùy chỉnh định dạng của nhật ký. Khi muốn nhập nhật ký, bạn truy cập Kiban/ Splunk/ Graylog.
Khác nhau:

HAProxy:

Có thêm cân bằng tải TCP, TCP-SSL.
Tính năng health, điều kiện chuyển đổi dự phòng linh hoạt hơn Nginx.
Có bộ nhớ đệm cơ bản.
Cho xem chi tiết trạng thái máy chủ, các yêu cầu hoạt động.
Có chức năng xuất số liệu, tích hợp các giải pháp giám sát.
Hiệu suất hoạt động cao, phù hợp sử dụng để xử lý kết nối 100k, giao diện 40GbE.
Là phần mềm miễn phí, có mã nguồn mở. Nhà phát triển thu phí bằng việc bán thiết bị phần cứng có cài đặt sẵn HAProxy.
Nginx:

Người dùng phải trả phí để sử dụng dịch vụ cân bằng tải TCP – UDP.
Bộ nhớ đệm linh hoạt hơn HAProxy.
Cho phép tùy chỉnh định dạng nhật ký.
Phiên bản miễn phí không có trang trạng thái.
Chức năng xuất số liệu chỉ có trong phiên bản trả phí, nên gây khó khăn cho người dùng bản miễn phí trong việc vận hành bộ cân bằng tải.
Phục vụ được các file cục bộ.
Có khả năng hỗ trợ các ứng dụng FastCGI.
Là một lõi mở, nhiều tính năng hữu dụng chỉ có ở bản tính phí.

Từ khóa tìm kiếm:

HAProxy là gì?

|

Định nghĩa HAProxy

|

Layer 4 Load Balancing

|

Layer 7 Load Balancing

|

Các loại cân bằng tải trong HAProxy

|

Các thuật toán cân bằng tải được sử dụng trong HAProxy

|

dịch vụ marketing