[AWS] Chapter 7: AWS ELB - Elastic Load Balancing & Auto Scaling Groups

  • Kai
  • August 25, 2024

Xin chào các bạn, hôm nay mình sẽ tiếp tục với series bài viết về AWS. Trong bài viết này, mình sẽ giới thiệu với các bạn về AWS ELB - Elastic Load Balancing. Đây là một dịch vụ quan trọng trong việc phân phối tải cho các ứng dụng web và ứng dụng khác trên AWS. Bài viết này sẽ giúp các bạn hiểu rõ hơn về ELB, cũng như các loại ELB và cách sử dụng chúng. Bên cạnh đó mình cũng sẽ giới thiệu về Auto Scaling Groups, một tính năng quan trọng giúp tự động mở rộng và thu hẹp số lượng EC2 instances dựa trên yêu cầu của ứng dụng. Bắt đầu thôi!

I. Load Balancing là gì?

Trước khi đi vào chi tiết về ELB, mình sẽ giải thích một chút về khái niệm Load Balancing. Load Balancing là một kỹ thuật phân phối tải giữa các máy chủ, ứng dụng hoặc các thiết bị mạng khác để cân bằng tải làm việc. Mục tiêu của việc sử dụng Load Balancer là để tối ưu hiệu suất, tăng khả năng mở rộng và tăng tính sẵn sàng của hệ thống.

Load Balancer hoạt động như một điểm trung gian giữa người dùng và các máy chủ backend. Khi có một yêu cầu từ người dùng, Load Balancer sẽ quyết định chuyển tiếp yêu cầu đó đến máy chủ nào dựa trên các thuật toán phân phối tải như Round Robin, Least Connections, hoặc IP Hash. Điều này giúp đảm bảo rằng không có máy chủ nào bị quá tải, và tất cả các máy chủ đều được sử dụng một cách hiệu quả.

Các loại Load Balancer

  1. Hardware Load Balancer: Đây là các thiết bị phần cứng chuyên dụng được thiết kế để phân phối tải. Chúng thường được sử dụng trong các môi trường doanh nghiệp lớn với yêu cầu hiệu suất cao.

  2. Software Load Balancer: Đây là các giải pháp phần mềm có thể chạy trên các máy chủ thông thường. Chúng linh hoạt và dễ dàng triển khai, phù hợp với nhiều loại hình doanh nghiệp.

  3. Cloud Load Balancer: Đây là các dịch vụ Load Balancing được cung cấp bởi các nhà cung cấp dịch vụ đám mây như AWS, Google Cloud, và Azure. Chúng cung cấp khả năng mở rộng linh hoạt và dễ dàng tích hợp với các dịch vụ đám mây khác.

Lợi ích của Load Balancing

  • Tăng hiệu suất: Bằng cách phân phối tải đều giữa các máy chủ, Load Balancer giúp tối ưu hóa hiệu suất của hệ thống.
  • Tăng khả năng mở rộng: Load Balancer cho phép dễ dàng thêm hoặc bớt máy chủ mà không ảnh hưởng đến hoạt động của hệ thống.
  • Tăng tính sẵn sàng: Nếu một máy chủ gặp sự cố, Load Balancer có thể chuyển hướng yêu cầu đến các máy chủ khác, đảm bảo hệ thống luôn hoạt động.

Các thuật toán Load Balancing phổ biến

  • Round Robin: Đây là thuật toán đơn giản nhất, phân phối yêu cầu đến từng máy chủ theo thứ tự. Mỗi máy chủ sẽ nhận yêu cầu theo vòng tròn, giúp đảm bảo rằng không máy chủ nào bị quá tải.
  • Least Connections: Thuật toán này chuyển yêu cầu đến máy chủ có ít kết nối nhất. Nó được coi là một phương pháp động, vì nó liên tục theo dõi số lượng kết nối đang hoạt động của từng máy chủ.
  • IP Hash: Sử dụng địa chỉ IP của người dùng để xác định máy chủ nào sẽ xử lý yêu cầu. Phương pháp này giúp duy trì sự nhất quán cho các phiên làm việc của người dùng.
  • Weighted Round Robin: Phiên bản mở rộng của Round Robin, trong đó mỗi máy chủ được gán một trọng số dựa trên khả năng xử lý của nó. Máy chủ có trọng số cao hơn sẽ nhận nhiều yêu cầu hơn.
  • Random: Yêu cầu được phân phối ngẫu nhiên đến các máy chủ trong nhóm, giúp giảm thiểu sự tập trung tải vào một máy chủ cụ thể.

Load Balancing là một phần quan trọng trong việc xây dựng các hệ thống phân tán và ứng dụng web hiện đại, giúp đảm bảo hiệu suất, khả năng mở rộng và tính sẵn sàng của hệ thống.

II. AWS ELB - Elastic Load Balancing

AWS ELB (Elastic Load Balancing) là dịch vụ Load Balancing được cung cấp bởi Amazon Web Services. ELB giúp phân phối tải giữa các máy chủ EC2, Lambda, hoặc các dịch vụ khác trên AWS, giúp tối ưu hiệu suất và tính sẵn sàng của ứng dụng.

1. Tại sao sử dụng Elastic Load Balancer?

Elastic Load Balancer là một dịch vụ load balancer được quản lý bởi AWS. Vì thế nên là:

  • AWS đảm bảo rằng dịch vụ này sẽ luôn hoạt động.
  • AWS chịu trách nhiệm về việc nâng cấp, bảo trì và đảm bảo tính sẵn sàng cao.
  • AWS cung cấp một số ít các tùy chọn cấu hình.

Thiết lập load balancer của riêng bạn có thể rẻ hơn nhưng sẽ tốn nhiều công sức hơn.

Dịch vụ này tích hợp với nhiều dịch vụ khác của AWS:

  • EC2, EC2 Auto Scaling Groups, Amazon ECS
  • AWS Certificate Manager (ACM), CloudWatch
  • Route 53, AWS WAF, AWS Global Accelerator

Lưu ý: Trong ELB, chúng ta cần phải quan tâm đến một điểm được gọi là health check.

  • Health Checks rất quan trọng đối với Load Balancers.
  • Chúng cho phép load balancer biết liệu các instance mà nó chuyển tiếp lưu lượng có sẵn sàng trả lời yêu cầu hay không.
  • Health check được thực hiện trên một cổng và một route (thường là /health).
  • Nếu phản hồi không phải là 200 (OK), thì instance đó được coi là không khỏe mạnh.

2. Các loại load balancer trên AWS

AWS có 3 loại Load Balancer được quản lý:

  1. Application Load Balancer (ALB):
  • Ra mắt năm 2016
  • Hỗ trợ HTTP, HTTPS, WebSocket
  1. Network Load Balancer (NLB):
  • Ra mắt năm 2017
  • Hỗ trợ TCP, TLS (secure TCP), UDP
  1. Gateway Load Balancer (GWLB):
  • Ra mắt năm 2020
  • Hoạt động ở lớp 3 (Network layer) – IP Protocol

Nhìn chung, nên sử dụng các load balancer thế hệ mới vì chúng cung cấp nhiều tính năng hơn. Một số load balancer có thể được thiết lập dưới dạng ELB nội bộ (private) hoặc bên ngoài (public).

III. ALB - Application Load Balancer

Application Load Balancer (ALB) là một dịch vụ thuộc tầng 7 của mô hình OSI, tập trung xử lý lưu lượng HTTP/HTTPS. Với ALB, bạn có thể thực hiện cân bằng tải cho nhiều ứng dụng web khác nhau, bất kể chúng chạy trên nhiều máy chủ khác nhau hay trên cùng một máy chủ. Điều này rất hữu ích khi bạn triển khai các ứng dụng trong môi trường container, như Docker hoặc Amazon ECS.

1. Các tính năng của ALB

  • Tầng 7 của mô hình OSI: ALB hoạt động trên tầng 7, tức là tầng ứng dụng, cho phép nó xử lý các yêu cầu HTTP/HTTPS chi tiết hơn so với các dịch vụ cân bằng tải khác.
  • Cân bằng tải nhiều ứng dụng: ALB có khả năng cân bằng tải cho nhiều ứng dụng HTTP khác nhau, dù chúng được triển khai trên nhiều máy chủ hay chỉ trên một máy chủ (ví dụ: khi sử dụng containers).
  • Hỗ trợ HTTP/2 và WebSocket: ALB tương thích với các giao thức HTTP/2 và WebSocket, giúp tối ưu hóa tốc độ tải trang và kết nối liên tục cho các ứng dụng web hiện đại.
  • Chuyển hướng (Redirects): ALB hỗ trợ chuyển hướng từ HTTP sang HTTPS, giúp tăng cường bảo mật cho ứng dụng mà không cần cấu hình phức tạp trên máy chủ.

2. Khả năng định tuyến trong Application Load Balancer (v2)

Application Load Balancer có thể định tuyến yêu cầu đến các target group khác nhau dựa trên nhiều tiêu chí:

  • Định tuyến dựa trên đường dẫn (Path): Ví dụ, bạn có thể cấu hình để các yêu cầu tới example.com/users được gửi đến một target group khác so với example.com/posts.
  • Định tuyến dựa trên tên miền (Hostname): Ví dụ, yêu cầu đến one.example.com sẽ được xử lý khác so với other.example.com.
  • Định tuyến dựa trên Query String và Headers: ALB có khả năng xử lý các yêu cầu dựa trên tham số Query String hoặc Header trong URL. Ví dụ, yêu cầu tới example.com/users?id=123&order=false có thể được gửi đến một target group cụ thể.

3. Ứng dụng ALB trong Microservices và Container-Based Application

ALB là lựa chọn lý tưởng khi triển khai các kiến trúc microservices hoặc ứng dụng dựa trên container:

  • Microservices: Khi sử dụng ALB, bạn có thể triển khai nhiều microservice trên cùng một máy chủ và ALB sẽ giúp phân phối lưu lượng một cách hiệu quả.
  • Container-Based Applications: Đặc biệt khi sử dụng Amazon ECS, ALB có thể định tuyến đến các container với cổng động, cho phép bạn triển khai nhiều phiên bản ứng dụng mà không cần lo lắng về xung đột cổng.

4. Các target group của Application Load Balancer (v2)

ALB hỗ trợ nhiều loại target group khác nhau, phù hợp với các kịch bản triển khai khác nhau:

  • EC2 Instances: Có thể được quản lý bởi Auto Scaling Group, ALB sẽ định tuyến lưu lượng HTTP đến các EC2 instances.
  • ECS Tasks: ALB tích hợp tốt với Amazon ECS, định tuyến lưu lượng đến các tasks được quản lý bởi ECS.
  • Lambda Functions: Yêu cầu HTTP sẽ được chuyển thành sự kiện JSON và được xử lý bởi Lambda function.
  • IP Addresses: ALB có thể định tuyến đến các địa chỉ IP, nhưng yêu cầu các IP này phải là địa chỉ IP private.

5. Các lưu ý quan trọng khi sử dụng Application Load Balancer (v2)

  • Hostname cố định: ALB cung cấp một hostname cố định có dạng XXX.region.elb.amazonaws.com để giúp bạn dễ dàng cấu hình và quản lý.
  • X-Forwarded-For Header: Để bảo mật và ghi nhận IP của người dùng thực sự, ALB chèn thêm IP của client vào header X-Forwarded-For. Bên cạnh đó, bạn cũng có thể nhận thêm thông tin về cổng (X-Forwarded-Port) và giao thức (X-Forwarded-Proto).

Application Load Balancer là một dịch vụ mạnh mẽ, phù hợp với nhiều loại ứng dụng web khác nhau, đặc biệt là trong môi trường microservices và container-based applications. Bằng cách hiểu rõ và tận dụng các tính năng của ALB, bạn có thể xây dựng và quản lý các ứng dụng của mình một cách hiệu quả và an toàn.

IV. NLB - Network Load Balancer

Network Load Balancer (NLB) là một dịch vụ cân bằng tải thuộc tầng 4 của mô hình OSI, chủ yếu xử lý lưu lượng TCP và UDP. NLB được thiết kế để hỗ trợ hiệu năng cực kỳ cao, phù hợp cho các ứng dụng yêu cầu khả năng xử lý hàng triệu yêu cầu mỗi giây với độ trễ thấp.

1. Tính năng nổi bật của Network Load Balancer (v2)

  • Tầng 4 của mô hình OSI: NLB hoạt động ở tầng mạng (Layer 4), cho phép chuyển tiếp lưu lượng TCP và UDP đến các instances một cách nhanh chóng và hiệu quả.
  • Xử lý hàng triệu yêu cầu mỗi giây: NLB có khả năng xử lý hàng triệu yêu cầu mỗi giây, phù hợp cho các ứng dụng cần khả năng mở rộng cực lớn.
  • Độ trễ thấp: Độ trễ của NLB chỉ khoảng 100 ms, thấp hơn so với Application Load Balancer (ALB) với độ trễ khoảng 400 ms, giúp tối ưu hóa tốc độ phản hồi cho các ứng dụng của bạn.
  • Địa chỉ IP tĩnh: Mỗi NLB có một địa chỉ IP tĩnh cho mỗi Availability Zone (AZ) và hỗ trợ gán Elastic IP, rất hữu ích khi cần whitelisting địa chỉ IP cụ thể.
  • Hiệu năng cao cho lưu lượng TCP/UDP: NLB là lựa chọn lý tưởng cho các ứng dụng yêu cầu hiệu năng cực cao, sử dụng giao thức TCP hoặc UDP.

2. Các target group của Network Load Balancer (v2)

NLB hỗ trợ định tuyến lưu lượng đến các target group sau:

  • EC2 Instances: NLB có thể định tuyến lưu lượng đến các EC2 instances, phù hợp cho việc triển khai các ứng dụng đòi hỏi hiệu năng cao.
  • IP Addresses: Chỉ hỗ trợ các địa chỉ IP private, đảm bảo tính bảo mật và kiểm soát tốt hơn cho các ứng dụng nội bộ.
  • Application Load Balancer: NLB cũng có thể định tuyến lưu lượng đến ALB, tạo ra một giải pháp kết hợp mạnh mẽ giữa tầng 4 và tầng 7.
  • Health Checks: NLB hỗ trợ kiểm tra sức khỏe (Health Checks) sử dụng các giao thức TCP, HTTP và HTTPS, giúp đảm bảo rằng các mục tiêu vẫn hoạt động tốt và sẵn sàng xử lý lưu lượng.

V. Gateway Load Balancer

Gateway Load Balancer (GWLB) là một dịch vụ mạnh mẽ trong AWS, cho phép bạn triển khai, mở rộng và quản lý một loạt các thiết bị ảo của bên thứ ba như tường lửa, hệ thống phát hiện và ngăn chặn xâm nhập, hệ thống kiểm tra gói tin sâu, và nhiều hơn nữa. GWLB hoạt động ở tầng 3 của mô hình OSI, tập trung xử lý các gói IP.

1. Tính năng nổi bật của Gateway Load Balancer

  • Tầng 3 của mô hình OSI: GWLB hoạt động ở tầng mạng (Layer 3), giúp xử lý và định tuyến các gói IP một cách hiệu quả.
  • Triển khai và quản lý thiết bị ảo: GWLB cho phép bạn dễ dàng triển khai và quản lý các thiết bị mạng ảo của bên thứ ba trong AWS, như các hệ thống tường lửa, kiểm tra gói tin sâu, hoặc các hệ thống phòng chống xâm nhập.
  • Cổng mạng trong suốt (Transparent Network Gateway): GWLB cung cấp một cổng mạng trong suốt, là điểm vào và ra duy nhất cho tất cả lưu lượng, giúp đơn giản hóa quản lý mạng.
  • Cân bằng tải: GWLB cũng hoạt động như một cân bằng tải, phân phối lưu lượng đến các thiết bị mạng ảo, giúp tối ưu hóa việc sử dụng tài nguyên và đảm bảo hiệu năng cao.
  • Sử dụng giao thức GENEVE: GWLB sử dụng giao thức GENEVE trên cổng 6081, giúp đảm bảo tính tương thích và hiệu quả khi truyền tải lưu lượng giữa các thiết bị mạng.

2. Target Group của Gateway Load Balancer

GWLB hỗ trợ các target group tương tự như NLB:

  • EC2 Instances: GWLB có thể định tuyến lưu lượng đến các EC2 instances, cho phép bạn triển khai các giải pháp bảo mật hoặc giám sát trên nền tảng AWS.
  • IP Addresses: Chỉ hỗ trợ các địa chỉ IP private, đảm bảo rằng lưu lượng nội bộ được bảo mật và kiểm soát tốt hơn.

So sánh Layer 3, Layer 4 và Layer 7

Layer Đặc điểm Giống nhau Khác nhau
Layer 3 (Network Layer) - Xử lý các gói IP.
- Định tuyến và chuyển tiếp gói tin giữa các mạng.
- Sử dụng địa chỉ IP để định danh thiết bị.
- Cả ba layer đều tham gia vào quá trình truyền tải dữ liệu qua mạng.
- Đều có vai trò trong việc đảm bảo dữ liệu đến đúng đích.
- Layer 3 tập trung vào định tuyến và chuyển tiếp gói tin dựa trên địa chỉ IP.
- Không quan tâm đến nội dung của gói tin.
Layer 4 (Transport Layer) - Xử lý các kết nối TCP/UDP.
- Đảm bảo dữ liệu được truyền tải một cách tin cậy.
- Sử dụng cổng (port) để định danh dịch vụ.
- Cả ba layer đều có thể tham gia vào việc cân bằng tải (load balancing).
- Đều có thể được sử dụng để tăng hiệu suất và tính sẵn sàng của hệ thống.
- Layer 4 tập trung vào việc quản lý các kết nối và truyền tải dữ liệu giữa các ứng dụng.
- Quan tâm đến việc đảm bảo dữ liệu được truyền tải một cách tin cậy.
Layer 7 (Application Layer) - Xử lý các yêu cầu HTTP/HTTPS, WebSocket.
- Định tuyến dựa trên nội dung của yêu cầu (URL, headers, cookies).
- Tương tác trực tiếp với ứng dụng và người dùng.
- Cả ba layer đều có thể được sử dụng để bảo mật dữ liệu truyền tải qua mạng.
- Đều có thể được tích hợp với các dịch vụ bảo mật như tường lửa, IDS/IPS.
- Layer 7 tập trung vào việc xử lý và định tuyến các yêu cầu ứng dụng.
- Quan tâm đến nội dung và ngữ cảnh của yêu cầu.

VI. Sticky Sessions (Session Affinity)

Sticky Sessions, hay còn gọi là Session Affinity, là một kỹ thuật giúp đảm bảo rằng một client luôn được chuyển hướng đến cùng một instance phía sau load balancer trong suốt quá trình truy cập.

1. Tính năng cơ bản

  • Hỗ trợ: Tính năng này có thể được triển khai trên Classic Load Balancer (CLB), Application Load Balancer (ALB), và Network Load Balancer (NLB).
  • Cookie: Đối với CLB và ALB, cookie được sử dụng để duy trì stickiness có thể có thời gian hết hạn do bạn kiểm soát.
  • Trường hợp sử dụng: Sticky Sessions rất hữu ích trong việc đảm bảo người dùng không bị mất dữ liệu phiên làm việc (session) khi chuyển giữa các request.
  • Lưu ý: Việc bật stickiness có thể gây ra sự mất cân bằng tải giữa các instance phía backend, do một số instance sẽ nhận nhiều yêu cầu hơn những instance khác.
  • Custom Cookie: Được tạo bởi target và có thể chứa bất kỳ thuộc tính nào cần thiết cho ứng dụng. Bạn cần chỉ định tên cookie cho từng nhóm mục tiêu riêng lẻ.
  • Cookie ứng dụng: Được load balancer tạo ra với tên mặc định là AWSALBAPP.
  • Cookie: Được tạo bởi load balancer với tên mặc định là AWSALB cho ALB và AWSELB cho CLB.

VII. Cross-Zone Load Balancing

Cross-Zone Load Balancing là tính năng giúp cân bằng tải giữa tất cả các instance đã đăng ký trên nhiều Availability Zones (AZs), thay vì chỉ trong một AZ.

  • Khi bật Cross-Zone Load Balancing: Mỗi instance của load balancer sẽ phân phối đều các yêu cầu đến tất cả các instance đã đăng ký trong tất cả các AZs.
  • Khi tắt Cross-Zone Load Balancing: Các yêu cầu chỉ được phân phối trong các instance của cùng một node của Elastic Load Balancer.
  • Application Load Balancer: Được bật theo mặc định (có thể tắt tại mức nhóm mục tiêu), không có phí cho dữ liệu giữa các AZ.
  • Network Load Balancer & Gateway Load Balancer: Tắt theo mặc định và có phí khi sử dụng dữ liệu giữa các AZ.

VIII. SSL/TLS và Chứng chỉ SSL

1. Khái niệm cơ bản về SSL/TLS

Chứng chỉ SSL cho phép mã hóa dữ liệu truyền giữa client và load balancer, đảm bảo tính bảo mật của dữ liệu.

  • SSL (Secure Sockets Layer): Sử dụng để mã hóa kết nối.
  • TLS (Transport Layer Security): Phiên bản mới hơn của SSL, hiện nay TLS được sử dụng phổ biến hơn.
  • Chứng chỉ SSL công khai: Được cấp bởi các Tổ chức cấp chứng chỉ (Certificate Authorities - CA) như Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Letsencrypt, v.v.
  • Thời gian hết hạn: Chứng chỉ SSL có thời gian hết hạn và cần được gia hạn.

2. SSL/TLS trên Load Balancer

  • Load balancer sử dụng chứng chỉ X.509 (SSL/TLS): Bạn có thể quản lý chứng chỉ này thông qua AWS Certificate Manager (ACM) hoặc tự tải lên chứng chỉ của bạn.
  • HTTPS Listener: Bạn phải chỉ định chứng chỉ mặc định và có thể thêm danh sách chứng chỉ để hỗ trợ nhiều domain.
  • SNI (Server Name Indication): Cho phép client chỉ định hostname mà họ muốn truy cập, hỗ trợ ALB và NLB.

IX. Connection Draining (Deregistration Delay)

Connection Draining, hay còn gọi là Deregistration Delay, là tính năng cho phép EC2 instances hoàn thành các yêu cầu “in-flight” (đang xử lý) trước khi bị gỡ đăng ký hoặc khi không còn khoẻ mạnh.

  • Tên gọi: Tính năng này được gọi là Deregistration Delay đối với ALB và NLB.
  • Thời gian chờ: Bạn có thể cấu hình thời gian chờ từ 1 đến 3600 giây (mặc định là 300 giây) trước khi load balancer ngừng gửi yêu cầu mới đến instance bị gỡ đăng ký.
  • Tuỳ chọn: Có thể tắt tính năng này bằng cách đặt giá trị thời gian chờ là 0.
  • Lưu ý: Đặt thời gian chờ thấp nếu các yêu cầu của bạn có thời gian xử lý ngắn.

X.High Availability Auto Scaling Group

1. Khả năng Mở Rộng (Scalability)

Khả năng mở rộng (Scalability) đề cập đến khả năng của một ứng dụng hoặc hệ thống có thể xử lý tải lớn hơn bằng cách thích ứng với sự thay đổi này. Có hai loại khả năng mở rộng chính:

1.1. Vertical Scalability (Scale Up)

Mở rộng theo chiều dọc là việc tăng kích thước của phiên bản máy chủ hiện có. Ví dụ, ứng dụng của bạn đang chạy trên một phiên bản t2.micro, việc mở rộng theo chiều dọc có nghĩa là nâng cấp lên t2.large. Mở rộng theo chiều dọc thường được áp dụng cho các hệ thống không phân tán, chẳng hạn như cơ sở dữ liệu. Các dịch vụ như RDS và ElastiCache hỗ trợ khả năng mở rộng theo chiều dọc. Tuy nhiên, có giới hạn về mặt phần cứng đối với mức độ bạn có thể mở rộng theo chiều dọc.

Ví dụ: Một hệ thống cơ sở dữ liệu nhỏ bắt đầu với db.t2.micro, khi yêu cầu xử lý tăng lên, nó có thể được nâng cấp lên db.m5.large.

1.2. Horizontal Scalability (Scale Out)

Mở rộng theo chiều ngang là việc tăng số lượng phiên bản hoặc hệ thống cho ứng dụng của bạn. Khả năng mở rộng theo chiều ngang thường liên quan đến các hệ thống phân tán, rất phổ biến đối với các ứng dụng web hoặc các ứng dụng hiện đại. Cloud computing giúp dễ dàng mở rộng theo chiều ngang thông qua các dịch vụ như Amazon EC2.

Ví dụ: Khi một ứng dụng web cần phục vụ số lượng lớn người dùng cùng lúc, việc tăng thêm nhiều EC2 instances để phân tải là giải pháp mở rộng theo chiều ngang.

2. Tính Sẵn Sàng Cao (High Availability)

Tính sẵn sàng cao thường đi kèm với khả năng mở rộng theo chiều ngang. Tính sẵn sàng cao đề cập đến việc vận hành ứng dụng hoặc hệ thống của bạn trong ít nhất 2 trung tâm dữ liệu (Availability Zones), giúp hệ thống có thể chịu được sự cố mất mát của một trung tâm dữ liệu.

Tính sẵn sàng cao có thể ở trạng thái thụ động, như trong trường hợp RDS Multi-AZ, hoặc ở trạng thái chủ động, như trong trường hợp hệ thống được mở rộng theo chiều ngang.

Ví dụ: Một ứng dụng web quan trọng có thể chạy ở nhiều Availability Zones khác nhau để đảm bảo rằng nếu một AZ gặp sự cố, ứng dụng vẫn tiếp tục hoạt động ở các AZ khác.

3. Auto Scaling Group (ASG)

Trong thực tế, tải trên các trang web và ứng dụng của bạn có thể thay đổi theo thời gian. Trên cloud, bạn có thể tạo mới hoặc xóa bỏ các máy chủ rất nhanh chóng. Nhóm Tự Động Mở Rộng (Auto Scaling Group - ASG) giúp bạn:

  • Tự động mở rộng (scale out) bằng cách thêm các EC2 instances để đáp ứng tải tăng.
  • Tự động thu gọn (scale in) bằng cách giảm số lượng EC2 instances để phù hợp với tải giảm.
  • Đảm bảo rằng có một số lượng tối thiểu và tối đa của các EC2 instances luôn hoạt động.
  • Tự động đăng ký các instances mới vào load balancer.
  • Tạo lại một EC2 instance mới khi instance trước đó bị hủy (ví dụ: nếu không khỏe mạnh).

4. Thuộc Tính của Nhóm Tự Động Mở Rộng (ASG Attributes)

Nhóm Tự Động Mở Rộng bao gồm các thuộc tính như:

  • Launch Template (Template Khởi tạo)
  • AMI + Loại Instance
  • EC2 User Data
  • EBS Volumes
  • Security Groups
  • SSH Key Pair
  • IAM Roles cho EC2 Instances
  • Thông tin mạng và Subnets
  • Thông tin Load Balancer
  • Kích thước tối thiểu, tối đa, và dung lượng ban đầu
  • Các chính sách mở rộng (Scaling Policies)

5. Mở Rộng Dựa Trên CloudWatch Alarms và Chính Sách Mở Rộng

Có thể mở rộng ASG dựa trên CloudWatch Alarms:

  • Một alarm sẽ giám sát một metric (ví dụ: Average CPU, hoặc một metric tùy chỉnh).

  • Dựa trên alarm, bạn có thể tạo các chính sách mở rộng:

    • Scale-out: Tăng số lượng instances.
    • Scale-in: Giảm số lượng instances.

6. Chính Sách Mở Rộng của Nhóm Tự Động Mở Rộng (ASG Scaling Policies)

  • Mở Rộng Động (Dynamic Scaling): Bao gồm:

    • Target Tracking Scaling: Đơn giản để thiết lập. Ví dụ: giữ mức CPU trung bình của ASG ở khoảng 40%.
    • Simple / Step Scaling: Khi một CloudWatch alarm được kích hoạt (ví dụ: CPU > 70%), thêm 2 units. Khi CPU < 30%, giảm 1 unit.
    • Scheduled Scaling: Dự báo trước các yêu cầu mở rộng dựa trên mô hình sử dụng đã biết trước. Ví dụ: tăng số lượng instances tối thiểu lên 10 vào lúc 5 giờ chiều thứ Sáu.
  • Mở Rộng Dự Đoán (Predictive Scaling): Dự đoán tải và lập kế hoạch mở rộng trước.

Ví dụ: Nếu bạn biết rằng vào một giờ nhất định mỗi ngày thứ Sáu, lưu lượng truy cập sẽ tăng đột biến, bạn có thể đặt lịch mở rộng để đảm bảo rằng ứng dụng của bạn có đủ tài nguyên.

7. Thời Gian Hạ Nhiệt của Nhóm Tự Động Mở Rộng (ASG Cooldowns)

Sau khi một hoạt động mở rộng xảy ra, ASG sẽ vào thời gian hạ nhiệt (cooldown period, mặc định 300 giây). Trong thời gian này, ASG sẽ không tạo hoặc hủy thêm các instances, cho phép các metric ổn định.

Lời Khuyên: Sử dụng AMI đã sẵn sàng để giảm thời gian cấu hình, phục vụ yêu cầu nhanh hơn và giảm thời gian hạ nhiệt.

Ví dụ: Nếu ứng dụng của bạn có yêu cầu xử lý nhanh, sử dụng AMI đã cài đặt sẵn các cấu hình cần thiết giúp ứng dụng có thể khởi động và bắt đầu xử lý ngay lập tức, tránh thời gian chờ đợi lâu.

Vâng, vậy là chúng ta đã đi qua một số khái niệm cơ bản và quan trọng về Load Balancer và Auto Scaling Group trong AWS. Hy vọng rằng bài viết này sẽ giúp bạn hiểu rõ hơn về các dịch vụ này và cách triển khai chúng trong môi trường của bạn. Nếu bạn có bất kỳ câu hỏi hoặc ý kiến đóng góp nào, hãy liên lạc cho mình nhé.
Bài viết sắp tới của tụi mình sẽ cùng các bạn thực hành các bài labs liên quan tới ELB và ASG. Cảm ơn bạn đã đọc bài viết!

Bài Viết Liên Quan

[AWS] Chapter 6: AWS EC2 Storage Hands On

  • Kai
  • August 25, 2024

Xin chào các bạn, lại là mình đây. Trong chương này, chúng ta sẽ thực hành với các loại lưu trữ khác nhau trên EC2.

Đọc Thêm

[AWS] Chapter 5: AWS EC2 Storages

  • Kai
  • August 24, 2024

Xin chào các bạn, chúng ta đã tìm hiểu về EC2, cách tạo EC2, cách kết nối vào EC2 và cách sử dụng EC2.

Đọc Thêm

[AWS] Chapter 4: AWS EC2 Hands-on (Mức độ cơ bản)

  • Kai
  • August 24, 2024

Xin chào tất cả các bạn, lại là mình đây. Hôm nay mình sẽ cùng các bạn thực hành phần EC2 này nhé, chúng ta sẽ thực hành các bước tạo EC2 khá là đơn giản nhưng cũng rất quan trọng trong quá trình sử dụng AWS nhé.

Đọc Thêm