Một trong những dịch vụ nổi tiếng được AWS cung cấp đó là Load Balancing (cân bằng tải). Đây là một dịch vụ cần thiết và quan trọng để xây dựng một hệ thống hoạt động trơn chu, có khả năng đáp ứng truy cập cao. Do đó các hội nghị chuyên đề, các khóa học của AWS hầu hết đều có đề cập đến dịch vụ này.
Và mình cũng đang học về AWS nên mình quyết định sẽ viết một serries các bài viết liên quan đến AWS để có thể chia sẻ những gì mình đã học được từ các khoá học của mình.
Để bắt đầu serries về ELB, mình sẽ giới thiệu về dịch vụ này và các loại cân bằng tải là AWS cung cấp cho người sử dụng để mọi người có thể dễ dàng nắm bắt được nó.

1.Load Balancing là gì, nó giải quyết vấn đề gì

1.1 Tính mở của hệ thống

Lấy bối cảnh như thế này, bạn là quản trị viên của một website thương mại điện tử hiện tại trong một ngày lượng truy cập chỉ có vài trăm. Nhưng một thời gian sau website của bạn trở nên nổi tiếng với nhiều mặt hàng với giá cả rất tốt nên lưu lượng truy cập ngày càng tăng cao đôi khi phải phục vụ hàng nghìn các request cùng lúc, bạn đắng đo về việc server của bạn không chịu nổi số lượng truy cập sẽ dần dến việc treo, sụp server.
=> Vậy là bạn quyết địch tăng các thông số phần cứng của mấy chủ bằng cách như tăng ram, tăng bộ nhớ,... Như vậy gọi là mở rộng theo chiều dọc.

Nhưng rồi website bạn ngày càng nổi tiếng, nhiều công ty đặt quảng cáo, nhiều nhãn hiệu liên kết với website của bạn, số lượng request một ngày lên đến con số hàng triệu, việc mở rộng hệ thống theo chiều dọc không đáp ứng bài toán này được nữa.
Bạn quyết định tăng số lượng máy chủ, chia các request đến các server khác nhau.
Đây gọi là mở rộng theo chiều ngang.

1.2 Load Balancing, load balancer

Bạn cứ hiểu là Server Load Balancer thì làm nhiệm vụ Load Balancing.

Load balancing (Cân bằng tải) là công việc giúp phân phối hiệu quả các traffic từ ngoài truy cập đến các server dịch vụ. Giúp việc mở rộng khả năng chịu tải bằng phương pháp mở rộng theo chiều ngang trở nên hiệu quả

Load Balancer là một máy chủ chuyển hướng internet traffic đến các server downstream (server dịch vụ, server đích,... nôm na là vậy)
uc?id=1PsqPiKbRW30sk8Dc9M4LIllhzHiur1bA&export=download

Nhiệm vụ của nó

  • Chia tải đến các server đích
  • Trở thành 1 điểm truy cập duy nhất (DNS) cho ứng dụng của bạn - (bạn có nhiều server nhưng chỉ cần truy cập đến nó là được)
  • Hạn chế các rủi ro từ downstream instance - Server này chết còn server khác chứ lo gì
  • Kiểm tra tình trạng các máy instance
  • Cung cấp SSL cho ứng dụng web
  • Tăng cường kết nối
  • Tăng tính sẵn sàng của hệ thống
  • Phân tách các public traffic và private traffic

2. Tại sao nên tìm hiểu và sử dụng AWS-ELB

  1. Là một bộ quản lý cân bằng tải
  • Được đảm bảo bởi AWS
  • Được AWS nâng cấp, bảo trì, có tính sẵn sàng cao
  • Được AWS hỗ trợ configuration
  1. Chi phí cài đặt thấp nhưng có nhiều kết quả tốt về lâu dài
  2. Được tích hợp với nhiều các dịch vụ của AWS

2.1 Các dịch vụ Load Balancing được AWS cung cấp

Trong thời điểm hiện tại (2020) AWS đang cung cấp cho người dùng 3 giải pháp về cân bằng tải

  1. Classic Load Balancer - Cân bằng tải cổ điển (version 1)
    Được AWS ra mắt năm 2009, hỗ trợ các giao thức
  • HTTP/HTTPS, TCP
  1. Application Load Balancer - Cân bằng tải ứng dụng (version 2)
    Được AWS ra mắt năm 2016, hỗ trợ các giao thức
  • HTTP/HTTPS, WebSocket
  1. Network Load Balncer - Cân bằng tải mạng (version 3)
    Được ra mắt năm 2017, hỗ trợ các giao thức
  • TCP, TLS & UDP

2.2 Classic Load Balancer - Cân bằng tải cổ điển

Hỗ trợ giao thứ TCP ở tầng kết nối (layer 4), HTTP/HTTPS (layer 7)
Health Check có thể thực hiện trên cả TCP, HTTP/HTTPS
Bộ cân bằng tải cổ điển dành cho các ứng dụng được xây dựng trong mạng EC2-Classic.

2.3 Application Load Balancer - Cân bằng tải ứng dụng

Giải pháp này hoạt động ở tầng ứng dụng (layer 7), phù hợp nhất để cân bằng tải lưu lượng HTTP và HTTPS và cung cấp định tuyến yêu cầu cấp cao (Theo URL, hostname, query string) hướng tới cấp các hạ tầng ứng dụng hiện đại, như là các microservice và container. Đồng thời nó hỗ trợ chuyển hướng http sang https.

2.4 Network Load Balncer - Cân bằng tải mạng

Hoạt động ở tầng kết nối (Layer 4) cân bằng tải các lưu lượng TCP/UDP, có thể xử lý hàng triệu request trong 1 giây nhưng vẫn đảm bảo độ trễ thấp (~100ms, so với ALB ~400ms).
NLB được sử dụng khi yêu cầu phải có hiệu năng rất cao, không dành cho các gói cài đặt miễn phí.
Ví dụ như bạn muốn cân bằng tải database mysql, mongodb, hoặc elastich, rabbitmq thì đây là lựa chọn phù hợp.