Bỏ qua để đến nội dung

CloudFront & Global Accelerator

Amazon CloudFrontContent Delivery Network (CDN — mạng phân phối nội dung) của AWS. Ý tưởng rất đơn giản: thay vì để người dùng ở Melbourne phải kéo từng file ảnh từ một máy chủ đặt ở Mỹ, CloudFront cache (đệm) nội dung ở edge — tại các điểm hiện diện gần người dùng — rồi trả nội dung từ đó.

  • Cải thiện hiệu năng đọc (read performance), vì nội dung được cache ở edge.
  • Cải thiện trải nghiệm người dùng.
  • hàng trăm Point of Presence trên toàn cầu (còn gọi là edge location, hay cache).
  • Chống DDoS (do phân tán khắp thế giới), tích hợp với AWS ShieldAWS Web Application Firewall.

Client gửi một HTTP request (ví dụ GET /beach.jpg?size=300x300) tới CloudFront Edge Location gần nhất. Edge location kiểm tra Local Cache của mình:

  • Nếu đã có nội dung trong cache → trả về ngay cho client.
  • Nếu chưa có → forward request tới origin của bạn (S3, hoặc một backend HTTP), lấy nội dung về, lưu vào cache rồi trả cho client. Các request sau đó của những người dùng khác trong vùng đều được phục vụ từ cache.

Origin là nơi CloudFront đi lấy nội dung gốc khi cache không có. CloudFront hỗ trợ ba nhóm origin:

  • S3 bucket
    • Để phân phối file và cache chúng ở edge.
    • Cũng dùng để upload file lên S3 thông qua CloudFront.
    • Được bảo vệ bằng Origin Access Control (OAC).
  • VPC Origin
    • Cho các ứng dụng chạy trong private subnet của VPC.
    • Application Load Balancer / Network Load Balancer / EC2 Instances.
  • Custom Origin (HTTP)
    • S3 website (phải bật bucket thành static S3 website trước).
    • Bất kỳ HTTP backend public nào bạn muốn.

Khi origin là S3, bạn không muốn bucket phải mở public — vì như vậy người ta có thể bỏ qua CloudFront mà truy cập thẳng vào bucket. Giải pháp là Origin Access Control (OAC) kết hợp với S3 bucket policy: bucket chỉ cho phép CloudFront đọc, còn CloudFront đi tới bucket qua mạng nội bộ AWS (private AWS). Người dùng ở Los Angeles, Mumbai, Melbourne, São Paulo… đi tới edge location gần nhất qua Internet công cộng, phần còn lại chạy trong mạng AWS.

Cả hai đều làm nội dung “gần hơn” với người dùng, nhưng theo hai cách rất khác nhau:

CloudFront S3 Cross Region Replication
Phạm vi Global Edge network Phải setup cho từng region muốn replicate
Độ mới của dữ liệu File được cache theo TTL (có thể tới một ngày) File được cập nhật gần như real-time
Kiểu truy cập Đọc qua cache Read only
Phù hợp cho Nội dung tĩnh cần có mặt ở mọi nơi Nội dung động cần độ trễ thấp ở vài region

Có hai cách đưa một ứng dụng chạy trên ALB/EC2 ra sau CloudFront.

Cách này cho phép bạn phân phối nội dung từ ứng dụng nằm trong private subnet của VPCkhông cần phơi chúng ra Internet. Traffic đi tới:

  • Application Load Balancer private
  • Network Load Balancer private
  • EC2 Instances private

Nếu đi qua mạng public, bạn phải mở Security Group cho các public IP của edge location (danh sách IP này AWS công bố công khai). Hai biến thể:

  • Có Load Balancer: ALB phải là public, Security Group của ALB cho phép public IP của edge location; EC2 instance phía sau có thể là private, Security Group của EC2 chỉ cho phép Security Group của Load Balancer.
  • Không có Load Balancer: EC2 instance phải là public, Security Group của EC2 cho phép public IP của edge location.

CloudFront cho phép bạn giới hạn ai được truy cập distribution của mình theo quốc gia:

  • Allowlist: chỉ cho người dùng truy cập nội dung nếu họ ở một trong các quốc gia được phê duyệt.
  • Blocklist: ngăn người dùng truy cập nội dung nếu họ ở một trong các quốc gia bị cấm.

“Quốc gia” được xác định bằng một Geo-IP database của bên thứ ba. Use case điển hình: luật bản quyền (Copyright Laws) — kiểm soát nội dung được xem ở đâu.

Edge location của CloudFront nằm khắp thế giới, và chi phí data out của mỗi edge location là khác nhau — có vùng rẻ, có vùng đắt. Vì vậy CloudFront cho bạn giảm số lượng edge location để giảm chi phí, chấp nhận đánh đổi về hiệu năng.

Có ba price class:

  1. Price Class All — tất cả các region, hiệu năng tốt nhất.
  2. Price Class 200 — phần lớn region, nhưng loại trừ các region đắt nhất.
  3. Price Class 100chỉ các region rẻ nhất.

CloudFront không biết khi nào bạn cập nhật origin. Nếu bạn sửa index.html trên S3, edge location vẫn trả bản cũ cho tới khi TTL hết hạn. Điều này rất bất tiện khi vừa deploy xong một bản web mới.

  • Bạn có thể buộc refresh toàn bộ hoặc một phần cache, bỏ qua TTL, bằng cách thực hiện một CloudFront Invalidation.
  • Có thể invalidate tất cả file (*) hoặc một path cụ thể (/images/*).
Invalidate:
- /index.html
- /images/*

Hãy hình dung: bạn deploy một ứng dụng sau một public ALB ở một region, nhưng người dùng nằm ở America, Australia, Europe, India và họ muốn truy cập trực tiếp vào ứng dụng (không phải nội dung tĩnh có thể cache). Traffic của họ đi qua Internet công cộng, phải nhảy qua rất nhiều hop, và mỗi hop lại cộng thêm độ trễ.

Mong muốn của chúng ta là: đi vào mạng của AWS càng sớm càng tốt để giảm độ trễ. Đây chính là bài toán mà AWS Global Accelerator giải quyết.

Để hiểu Global Accelerator, cần nắm hai khái niệm địa chỉ IP:

  • Unicast IP: một server giữ một địa chỉ IP riêng. Ví dụ hai server có hai IP khác nhau 12.34.56.7898.76.54.32; client phải chọn đúng IP của server mình muốn.
  • Anycast IP: tất cả các server dùng cùng một địa chỉ IP, và client được route tới server gần nhất. Ví dụ cả hai server đều là 12.34.56.78.

AWS Global Accelerator khai thác mạng nội bộ của AWS để dẫn traffic tới ứng dụng của bạn.

  • 2 Anycast IP được tạo cho ứng dụng của bạn.
  • Anycast IP đưa traffic trực tiếp tới các edge location gần người dùng.
  • Edge location gửi traffic tới ứng dụng của bạn qua mạng nội bộ AWS (private AWS) — thay vì đi tiếp qua Internet công cộng.

Các đặc điểm quan trọng:

  • Hoạt động với Elastic IP, EC2 instances, ALB, NLB, ở dạng public hoặc private.
  • Consistent Performance (hiệu năng ổn định)
    • Routing thông minh tới điểm có độ trễ thấp nhất và failover theo region rất nhanh.
    • Không gặp vấn đề với cache của client, vì địa chỉ IP không thay đổi.
    • Dùng mạng nội bộ của AWS.
  • Health Checks
    • Global Accelerator kiểm tra sức khỏe ứng dụng của bạn.
    • Giúp ứng dụng trở nên “global” — failover dưới 1 phút khi có thành phần không khỏe.
    • Rất tốt cho disaster recovery nhờ các health check này.
  • Security
    • Chỉ cần whitelist 2 IP bên ngoài.
    • Chống DDoS nhờ AWS Shield.

Hai dịch vụ này giống nhau ở chỗ đều dùng mạng global và edge location của AWS, và đều tích hợp với AWS Shield để chống DDoS. Khác biệt nằm ở loại traffic mà chúng tối ưu:

CloudFront Global Accelerator
Tối ưu cho Nội dung cacheable (ảnh, video) nội dung động (tăng tốc API, dynamic site delivery) Nhiều loại ứng dụng chạy trên TCP hoặc UDP
Cách xử lý Nội dung được phục vụ tại edge Proxy các packet tại edge tới ứng dụng chạy ở một hoặc nhiều AWS Region
Phù hợp thêm Các use case không phải HTTP: game (UDP), IoT (MQTT), Voice over IP; các use case HTTP cần địa chỉ IP tĩnh; các use case HTTP cần failover theo region nhanh và xác định (deterministic)
Chủ đề Phải nhớ
CloudFront CDN, cache ở hàng trăm edge location, chống DDoS, tích hợp Shield + WAF
Origins S3 (bảo vệ bằng OAC), VPC Origin (ALB/NLB/EC2 private), Custom Origin HTTP (S3 static website hoặc backend public)
CloudFront vs CRR CloudFront = edge toàn cầu, cache theo TTL, nội dung tĩnh; CRR = setup từng region, cập nhật near real-time, read only, nội dung động
ALB/EC2 public origin ALB phải public + cho phép public IP của edge; EC2 có thể private, chỉ cho phép SG của LB; không có LB thì EC2 phải public
Geo Restriction Allowlist / Blocklist theo quốc gia, dựa trên Geo-IP database bên thứ ba; use case bản quyền
Price Classes All (tốt nhất) · 200 (bỏ region đắt nhất) · 100 (chỉ region rẻ nhất)
Invalidation Buộc refresh cache, bỏ qua TTL; invalidate * hoặc /images/*
Anycast IP Mọi server dùng cùng một IP, client được route tới điểm gần nhất
Global Accelerator 2 Anycast IP, đi vào mạng AWS tại edge; hoạt động với EIP, EC2, ALB, NLB (public/private); health check failover < 1 phút; chỉ cần whitelist 2 IP
Chọn dịch vụ Cacheable/HTTP + dynamic delivery → CloudFront; TCP/UDP, non-HTTP, static IP, regional failover → Global Accelerator