AWS Load Balancer

  • December 7, 2024
  • 85

AWS Load Balancer là một dịch vụ cân bẳng tải của Amazon Web Services (AWS), giúp tự động phân phối lưu lượng (traffic) đến các ứng dụng trên nhiều tài nguyên như EC2 instances, containers, serverless functions. Điều này giúp tăng hiệu suất, độ tin cậy và khả năng mở rộng của ứng dụng.

Có 4 loại load balancer: Application Load Balancer (ALB), Network Load Balancer (NLB), Gateway Load Balancer (GWLB), Classic Load Balancer (CLB). Chúng ta hay làm việc với Application Load Balancer (ALB) nhất nên bài viết này chỉ tập chung vào nó.

1. Tính năng chính của ALB

1.1 Định tuyến theo nội dung (Content-based routing)

ALB có thể định tuyến traffic đến các target (EC2, container, Lambda, hoặc IP) dựa trên:
Đường dẫn URL: Ví dụ: /api hoặc /admin.
Hostname: Ví dụ: api.example.com hoặc admin.example.com.
Header hoặc query string: Định tuyến dựa trên tiêu đề HTTP hoặc các tham số trong URL.

1.2 Hỗ trợ WebSocket và HTTP/2

ALB hỗ trợ WebSocket để duy trì các kết nối lâu dài và HTTP/2 để cải thiện hiệu suất.

1.3 Tích hợp với Lambda

ALB có thể gọi các function Lambda trực tiếp, hỗ trợ tốt cho các kiến trúc serverless.

1.4 Kiểm tra sức khỏe (Health Check)

ALB thực hiện kiểm tra sức khỏe của các target trong target group. Nếu một target không phản hồi, ALB sẽ không gửi lưu lượng đến nó.

1.5 Phân phối động (Dynamic scaling)

ALB tự động phân phối lưu lượng đến các tài nguyên có sẵn để tối ưu hóa hiệu suất.

1.6 Tích hợp bảo mật

  • Hỗ trợ SSL/TLS termination.
  • Tích hợp với AWS Certificate Manager (ACM) để quản lý chứng chỉ SSL.
  • Kết hợp với AWS WAF để bảo vệ ứng dụng khỏi các cuộc tấn công như SQL Injection hoặc Cross-Site Scripting (XSS).

2. Kiến trúc của ALB

2.1 Listener

  • Là thành phần định nghĩa cách ALB xử lý lưu lượng đến.
  • Ví dụ: ALB lắng nghe trên cổng 80 (HTTP) hoặc cổng 443 (HTTPS).

Thông thường đối với các ứng dụng web chúng ta chỉ cần tạo 2 listener nắng nghe cổng 80 và cổng 443. Các request đến web server từ cổng 80 sẽ được redirect sang cổng 443, và từ cổng 443 sẽ forward tới target group, hoặc request từ cổng 80, 443 đều forward tới target group. Chúng ta sẽ đăng kí ssl(ACM) cho ứng dụng trong listener post 443. Có thể đăng kí được 1 ACM nếu nắng nghe trên 1 domain, hoặc nhiều (ACM) nếu nắng nghe trên nhiều domain ở đây.


load balancer listener

Trong ví dụ này 2 listener post 80, 443 đều forward đến target group chạy post 80.

2.2 Rules

  • Quy tắc xác định cách ALB định tuyến traffic. Một quy tắc có thể dựa trên:
    • Host header (ví dụ: example.com).
    • Path (ví dụ: /images).
    • HTTP methods (GET, POST).
    • HTTP headers hoặc query strings.

Rule giúp định tuyến traffict đi như thế nào? Ví dụ với host header là example.com cho forward đến target group post 80, với sub path là /images cho forward đến target group post 81...

2.3 Target Group

  • Là nhóm các tài nguyên mà ALB gửi traffic đến. Một target group có thể chứa:
    • EC2 instances.
    • Containers (ECS/EKS).
    • Lambda functions.
    • Địa chỉ IP cụ thể.

Target group là nơi nhóm các ứng dụng lại vào một nhóm. VD server web chạy post 80, server api chạy post 81, tuỳ theo domain là web hay api mà set rule sẽ forward đến đúng target group.
load bancer rule
Ở ví dụ trên chúng ta chạy 4 container trong ec2, post 80 chạy server web, post 81 chạy server admin là sub path của server web, post 82 chạy server api với sub domain, post 83 chạy server tracking với sub domain.
VD: domain server web: web.com, domain server admin: web.com/admin, domain server api: api.web.com, domain server tracking: tracking.web.com. Tuỳ request tới domain nào mà load balancer sẽ chuyển hướng đến đúng server web, admin, api hay tracking.

3. Chi phí

ALB được tính phí dựa trên:

  1. Số giờ ALB hoạt động.
  2. Số lượng requests xử lý.
  3. Lưu lượng dữ liệu truyền qua ALB.

Bạn có thể tham khảo chi tiết chi phí tại AWS Pricing.