Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Load Balancer

    Môt khảo sát về Load Balancer — “người điều phối thầm lặng” phía sau các hệ thống cloud và AI hiện đại


    Như chúng ta có thể đã biết, khi người dùng truy cập một ứng dụng lớn như Facebook, GitHub, Netflix hay ChatGPT, phía sau thường không phải là “một server”. Thực tế có thể là hàng chục, hàng trăm, thậm chí hàng ngàn compute nodes đang cùng phục vụ ứng dụng đó. Một trong những vấn đề đặt ra là làm sao phân phối traffic giữa các node này? Đó là lúc Load Balancer xuất hiện.
    Trong kiến trúc distributed application hiện đại mà bài viết trước VnPro đã có dịp trình bày, load balancer đóng vai trò như một “traffic controller”. Người dùng chỉ truy cập vào một địa chỉ duy nhất, ví dụ app.company.com. Nhưng phía sau địa chỉ truy cập đơn giản đó có thể là rất nhiều backend servers khác nhau. Load balancer sẽ quyết định request nào sẽ được gửi tới backend server nào.
    Điều thú vị là các tầng layer trong hệ thống hiện đại có thể scale độc lập để giải quyết vấn đề cân bằng tải này. Thật vậy, Frontend có thể scale riêng, Business logic có thể scale riêng. Database tier cũng có thể scale riêng.
    Ví dụ với các frontend React.js, một phần workload được đẩy xuống client-side browser thay vì xử lý hoàn toàn ở backend. Điều này giúp giảm tải cho application servers.
    Trong business tier, các application instances thường được nhân bản (replica) thành nhiều node. Client không kết nối trực tiếp tới từng node mà đi qua load balancer. Load balancer sẽ phân phối traffic dựa trên các thuật toán mà chúng ta quen thuộc nhưRound Robin, Least Connections, Source IP Hash, Fastest Response. Ví dụ thuật toán Round Robin:
    Request 1 -> Server 1
    Request 2 -> Server 2
    Request 3 -> Server 3
    Sau đó lặp lại vòng phân phối tiếp theo. Một điểm cực kỳ quan trọng trong các hệ thống phân tán distributed systems là Compute nodes trở nên “disposable”. Nếu một node chết, hệ thống vẫn hoạt động bình thường. Người dùng gần như không nhận ra chuyện gì vừa xảy ra. Kubernetes hoạt động dựa rất nhiều trên triết lý này. Pod bị lỗi? Orchestrator tự tạo pod mới. Node bị down? Workload được reschedule sang node khác. Đây cũng là lý do các nền tảng cloud-native ngày nay phụ thuộc rất mạnh vào Kubernetes, Containers, Service Mesh, HAProxy, NGINX và Envoy.
    Một trong những giải pháp load balancing mã nguồn mở nổi tiếng nhất là HAProxy (quan điểm cá nhân thôi nha). HAProxy được sử dụng trong nhiều hệ thống lớn như GitHub, Instagram, Twitter. Nó có thể hoạt động như Layer 4 Load Balancer hoặc Layer 7 Load Balancer. Ví dụ một cấu hình backend đơn giản:
    backend web-backend
    balance roundrobin
    mode http
    server web1 web1.example.com:80 check
    server web2 web2.example.com:80 check
    Trong cấu hình này:
    • balance roundrobin xác định thuật toán phân phối tải
    • mode http bật Layer 7 proxying
    • check dùng để health-check backend servers
    Health check là tính năng quan trọng của các cơ chế load balancer (bài trước đã đề cập, bài này vẫn nhắc lại - lời người dịch). Load balancer sẽ liên tục kiểm tra backend servers còn sống hay không. Nếu một server không phản hồi TCP connection hoặc HTTP response đúng yêu cầu, node đó sẽ bị loại khỏi pool tự động. Không cần admin chúng ta can thiệp thủ công. Khi nói về load balancing theo mô hình OSI, thường có hai loại phổ biến:
    Layer 4 Load Balancing
    Forward traffic dựa trên IP và TCP/UDP port. Ví dụ toàn bộ traffic port 80 sẽ được chuyển tới web backend. Đây là kiểu load balancing đơn giản và hiệu năng cao. Anh em network quen thuộc với thuận toán này lắm!
    Layer 7 Load Balancing
    Thông minh hơn Layer 4 nhiều. Load balancer có thể đọc nội dung HTTP request và điều hướng traffic dựa trên URL path. Ví dụ:
    /images -> img-backend
    /api -> api-backend
    Điều này cho phép nhiều services chạy chung domain nhưng được xử lý bởi các backend khác nhau. Ví dụ frontend configuration của HAProxy có dạng như sau:
    frontend http
    bind *:80
    mode http
    acl url_img path_beg /images
    use_backend img-backend if url_img
    default_backend web-backend
    Nếu URL bắt đầu bằng /images, traffic sẽ được chuyển sang cụm image servers riêng. Nếu chúng ta nhìn rộng hơn, những gì mà chúng ta vừa đọc chính là nền móng của API Gateway (MCP servers của AI, vụ này đang nổi), Kubernetes Ingress, Service Mesh, AI Model Serving, Distributed AI Inference...Ngay cả các hệ thống AI hiện đại cũng đang dùng các nguyên lý load balancing tương tự để phân phối inference requests giữa nhiều GPU nodes khác nhau. Load Balancer chính là “người điều phối lưu lượng traffic” của toàn bộ hệ thống....
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X