Các thuật toán cân bằng tải trong haproxy năm 2024

Cân Bằng Tải [load balancing] là việc phân bố đồng đều lưu lượng truy cập giữa hai hay nhiều các máy chủ có cùng chức năng trong cùng một hệ thống. Bằng cách đó, sẽ giúp cho hệ thống giảm thiểu tối đa tình trạng của máy chủ, thậm chí là datacenter. Nó là 1 phần cực kì quan trọng trong việc quản lý truy cập.

Có một số tính năng rất thú vị về LB

  • Là 1 trong những thành phần quan trọng nhất để monitor hệ thống
  • Là vị trí duy nhất giúp người quản trị nhìn được các service phía sau chúng

Thuật toán cân bằng tải của HAProxy

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

  • round-robin: Đây là thuật toán mặc định được sử dụng cho HAProxy, các request sẽ lần lượt chuyển tới server.
  • leastconn: Các request sẽ được chuyển tới server có ít kết nối đến nó nhất.
  • source: Các request sẽ được chuyển đến server bằng các hash của IP người dùng.

Các loại cân bằng tải [Load Balancing]

Không có cân bằng tải [No Load Balancing]

Đây là dạng cơ bản nhất cho một ứng dụng web, thường được sử dụng trong môi trường số lượng người dùng ít hoặc không có để test, dev.

Với mô hình này, người dùng sẽ kết nối trực tiếp với web server tại [yourdoamain.com] mà không sử dụng cân bằng tải. Nếu web server gặp sự cố, trục trặc thì người dùng sẽ không kết nối được đến ứng dụng web.

Mô hình không có cân bằng tải

Cân bằng tải tại tầng 4 [Layer 4 Load Balancing]

Việc sử dụng cân bằng tải ở tầng 4 [Layer 4 Load Balancing] để có thể cân bằng tải tới nhiều server. Thì các request sẽ được điều hướng dựa trên địa chỉ IP và port. Ví dụ có một request đến `//example.com/something `sẽ được điều hướng tới backend được dùng để điều hướng cho doamin `example.com `với port 80.

Mô hình cân bằng tải tầng 4

Cân bằng tải tại tầng 7 [Layer 7 Load Balancing]

Đây là cân bằng tải phức tạp nhất nhưng có nhiều tùy biến. Với việc sử dụng cân bằng tải tại tầng 7, bạn có thể điều hướng các request dựa trên thông tin và nội dung của request đó. Cân bằng tải tầng 7 với nhiều backend có thể dùng một domain và port.

Ví dụ, có một request gửi tới example.com/something, request đó sẽ được điều hướng đến backend chuyên dụng cho something.

Mô hình cân bằng tải tầng 7

Tại sao phải là HAProxy?

Việc tích hợp Load Balancer vào trong hệ thống monitor là rất quan trọng. Chúng ta cần biết về số active client, request/s, tỷ lệ lỗi, vv …

Không cần phải nói, hệ thống monitor sẽ bị giới hạn bởi những thông tin được đo và cung cấp bởi các cân bằng tải.

Đừng lo!!

HAProxy cung cấp 61 số liệu.

Các số liệu được đưa ra trên mỗi frontend và mỗi backend. Tất cả đều có sẵn trên 1 trang web hoặc trên file CSV.

Hãy cùng nhìn HAProxy monitor:

Ở đây chúng ta có thể nhìn thấy server up hay down, băng thông, số lượng client đã kết nối,… Đó chính là những thông số cụ thể giúp ích được cho người quản trị. Nhưng có lẽ chừng đó vẫn là chưa đủ, thử nghĩ nếu bây giờ nếu trang web quản trị gặp sự cố. Đầu tiên, mở trang //mywebsite.com để xem nó đang như thế nào. Tiếp theo, tôi sẽ mở HAProxy stats để tìm hiểu xem vấn đề gì đang xảy ra.

Như thế thì quá mất thời gian, theo tôi là vậy. Bởi vì bản thân HAProxy không phải là công cụ monitor nên nó cũng sẽ có hạn chế, cũng không có cảnh báo. Chính vì vậy chúng ta cần đến phần mềm của bên thứ 3.

Mục tiêu đó là không chỉ để người quản trị có thể hiểu mà còn là những người không có kinh nghiệm monitor cũng có thể xem và hiểu. Khá hay đó là HAProxy có sẵn định dạng CSV, Dưới đây là 1 ví dụ về 1 dashboard của HAProxy được cung cấp bởi Datadog :

Các số liệu được vẽ lên đồ thị, đồ thị có thể sắp xếp thành các biểu đồ, hơn thế nữa là có thể cấu hình cảnh báo tự động. Các trang thống kê sẽ show trang thái hiện tại, tuy nhiên cũng hỗ trợ xem lại lịch sử nếu bạn muốn thu thập thông tin từ trước đó. Theo tôi với Load Balancer sử dụng HAProxy là một giải pháp hiệu quả.

  • * Actions
    Automate any workflow  
    
    • Packages
      Host and manage packages  
    • Security Find and fix vulnerabilities
    • Codespaces Instant dev environments
    • Copilot Write better code with AI
    • Code review Manage code changes
    • Issues Plan and track work
    • Discussions Collaborate outside of code Explore
    • All features
    • Documentation
    • GitHub Skills
    • Blog
  • For
    • Enterprise
    • Teams
    • Startups
    • Education By Solution
    • CI/CD & Automation
    • DevOps
    • DevSecOps Resources
    • Learning Pathways
    • White papers, Ebooks, Webinars
    • Customer Stories
    • Partners
  • * GitHub Sponsors
    Fund open source developers  
    
    • The ReadME Project
      GitHub community articles  
      
      Repositories
    • Topics
    • Trending
    • Collections
  • Pricing

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Name

Query

To see all available qualifiers, see our documentation.

Sign in

Sign up

Chủ Đề