Master AWS – Phần 1: Load Balancer

Master AWS – Phần 1: Load Balancer

Thử dùng Envoy của Laravel để viết script deploy cho ứng dụng web
CloudFlare: CDN bình dân, rẻ và tương đối ngon
Docker cho người mới bắt đầu

I. Giới thiệu Load Balancer

Load Balancer nghĩa tiếng việt là cân bằng tải, dùng để phân chia request từ user tới từng máy chủ.

1. Tại sao cần tạo ra Load Balancer

Hệ thống cơ sở ban đầu của các hệ thống nhỏ, tất cả được dựng trên 1 web server.

No Load Balancer

No Load Balancer

Ở những hệ thống kiểu này, người sử dụng kết nối trực tiếp đến máy chủ web, tại yourdomain.com. Nếu máy chủ web duy nhất này sập, người sử dụng sẽ không thể truy cập vào trang web. Ngoài ra, nếu quá nhiều người dùng cố gắng truy cập vào máy chủ cùng một lúc thì nó không thể xử lý tải, họ có thể gặp thời gian tải chậm hoặc không thể kết nối.

Load Balancer được tạo ra để giải quyết vấn đề này.

Load balancing

Load Balancer

Ưu và nhược điểm khi dùng Load Balancer:

  • Ưu điểm:
    • Tránh bị sập server, khi 1 2 server trong hệ thống bị sập, Load Balancer sẽ check được server còn đang khỏe mạnh để điều hướng.
    • Dễ dàng mở rộng hệ thống, chịu lượng request lớn.
    • Giải quyết được vấn đề không thể nâng cấp phần cứng nữa.
    • Lọc request trước khi đưa tơi các server xử lý.
  • Nhược điểm:
    • Giảm performance response trả về cho user vì phải đi qua trung gian là Load Balancer (để giảm thiểu ảnh hưởng này, người thiết kế thường đặt Load Balancer rất gần với các server, kết nối mạng trực tiếp với nhau).
    • Chia sẻ tài nguyên giữa các server sẽ có chút khó khăn (vd: file, cache, database, …) (người dùng cần tách các tài nguyện dùng chung thành các microservice riêng).
    • Load Balancer mà chết (hoặc nghẽn mạng) thì hệ thống cũng sẽ sập.

2. Hệ thống nào nên dùng Load Balancer

Công việc chính của Load Balancer là chia việc (request) cho những server app làm, lượng công việc này cần phải tốn nhiều công sức mà 1 server khó có thể làm nổi thì mới đáng để dùng.
Cũng như thực tế, quản lý (là Load Balancer) chia việc các nhân viên làm (là các server app). Khi mà lương việc quá lớn mà 1 người không đảm đương được hết công việc, thì cần nhóm người, và để đảm bảo nhóm người này hoạt động tốt, chúng ta cần 1 người quản lý.

Nhưng công sức ở các server app được hiểu như thế nào? Đương nhiên 1 server app cũng có năng lực giới hạn và hoàn toàn có thể tính được (ở 1 bài khác trong tương lai: mình sẽ chia sẽ cách ước tính năng lực giới hạn của 1 server chịu tải tới đâu).
Vậy chúng ta có thể tạm hiểu hệ thống lớn, chịu tải nhiều sẽ cần đến ELB (vd: Google, Facebook, …).

II. Elastic Load Balancer (ELB)

Elastic Load Balancer là 1 service của AWS hỗ trợ Load Balancer. Có 3 loại ELB.

Tính chất chung của ELB:

  • Check ec2 instances đang healthy / unhealthy.
  • Phân tải tới các instances healthy.

1. Classic Load Balancer (CLB)

Bộ Load Balancer phân phối lưu lượng ứng dụng đến trên nhiều phiên bản EC2 trong nhiều Availability Zones. Điều này làm tăng khả năng chịu lỗi của các ứng dụng của bạn. ELB phát hiện các trường hợp không lành mạnh và chỉ lưu lượng truy cập đến các trường hợp lành mạnh.

Classic Load Balancer

Classic Load Balancer

  • Hỗ trợ TCP và SSL listener.
  • Hỗ trợ Sticky sessions (option này khá quan trọng trong 1 số trường hợp riêng CLB mới có).

Khi bật option Sticky session

Người dùng truy cập CLB sẽ có 1 cookie xác định 1 server họ đã từng vào (có thể setting timeout cho cookie này), và trong khi cookie này còn tốn tại request của user sẽ luôn được đưa về server cũ đó để xử lý. Việc này rất cần thiết cho những hệ thống lưu session trực tiếp trên server chạy app.

2. Application Load Balancer (ALB)

Một chức năng Load Balancer ứng dụng ở lớp ứng dụng, lớp thứ bảy của Open Systems Interconnection (OSI). Sau khi Load Balancer nhận được yêu cầu, nó sẽ đánh giá các quy tắc người nghe theo thứ tự ưu tiên để xác định quy tắc nào sẽ được áp dụng, sau đó chọn mục tiêu từ nhóm mục tiêu cho hành động quy tắc. Bạn có thể định cấu hình quy tắc người nghe để định tuyến các yêu cầu đến các nhóm mục tiêu khác nhau dựa trên nội dung của lưu lượng ứng dụng. Định tuyến được thực hiện độc lập cho từng nhóm mục tiêu, ngay cả khi mục tiêu được đăng ký với nhiều nhóm mục tiêu.

Application Load Balancing

Application Load Balancer

  • Hỗ trợ path-based routing (routing bằng host, path) ví dụ: /dev -> group dev , /test -> group test.
  • Lọc các request xấu hoặc không cần xử lý, tích hợp được với service AWS WAF firewall.

3. Network Load Balancer (NLB)

Chức năng Load Balancer mạng ở lớp thứ tư của Open Systems Interconnection (OSI). Nó có thể xử lý hàng triệu yêu cầu mỗi giây. Sau khi Load Balancer nhận được yêu cầu kết nối, nó sẽ chọn một mục tiêu từ nhóm mục tiêu cho quy tắc mặc định. Nó cố gắng mở kết nối TCP đến mục tiêu đã chọn trên cổng được chỉ định trong cấu hình trình nghe.

Network Load Balancer

Network Load Balancer

  • Xử lý ở layer 4 (TCP / UDP) thay vì layer 7 (HTTP / HTTPS) nên tốc độ tốt hơn 2 loại còn lại rất nhiều, có thể xử lý đến hàng triệu request.
  • Hỗ trợ routing IP (ví dụ: mapping những IP ở Việt Nam tới 1 target group mong muốn).

III. Những chú ý để chọn loại Load Balancer phù hợp.

  • Khi sử dụng CLB và ALB, việc sử dụng layer 7 đi qua 1 server ELB trung gian nên thông tin remote address mà application của chúng ta nhận được sẽ là ELB chứ không phải client, Nên khi cần lấy thông tin của client, các bạn cần lấy ở những param khác như X-Forwarded-For (IP remote address), X-Forwarded-Proto (protocol đang sử dụng) , và X-Forwarded-Port (port).
  • Hệ thống cần chịu tải rất lớn lên đến hàng triệu request cần dùng NLB.
  • Chú ý tách các tài nguyên dùng chung thành các microservice.
  • Xử lý đồng bộ / bất đồng bộ với các server và dữ liệu.
  • Có thể dùng ALB để chia router tới những target group (tương ứng sub project riêng) cho đúng.

 

 

COMMENTS