1. Kiến trúc 3 tầng trên AWS [0]

thumbnail Kiến trúc 3 tầng trên AWS được thiết kế để đạt độ tin cậy cao bằng cách sử dụng cấu hình chủ động-thụ động giữa các khu vực và tính năng tự động mở rộng quy mô, đảm bảo khả năng phục hồi tối đa ngay cả khi toàn bộ khu vực gặp sự cố.

1.1. Luồng truy cập và bảo mật [0]

  1. Luồng truy cập ban đầu [0]
    • Lưu lượng truy cập ban đầu đi vào Route 53, một dịch vụ DNS giúp phân giải tên miền và định tuyến đến CloudFront distribution phù hợp.
  2. Lớp bảo mật ứng dụng web [4]
    • Trước khi đến CloudFront, lưu lượng được lọc bởi AWS Web Application Firewall (WAF) để ngăn chặn các cuộc tấn công web phổ biến như SQL injection hoặc cross-site scripting.
  3. Bảo vệ bổ sung (tùy chọn) [6]
    • Có thể bổ sung AWS Shield để tăng cường bảo vệ chống lại bot và tấn công DDoS, nhưng trong kiến trúc này, tác giả đã chọn không sử dụng.

1.2. Cấu trúc kiến trúc 3 tầng [7]

  1. Tổng quan về kiến trúc 3 tầng [7]
    • CloudFront distribution kết nối với kiến trúc 3 tầng tiêu chuẩn, bao gồm: tầng web (front-end), tầng ứng dụng (back-end) và tầng cơ sở dữ liệu.
  2. Môi trường mạng ảo (VPC) [8]
    • Toàn bộ cấu hình 3 tầng nằm trong một VPC (Virtual Private Cloud) duy nhất tại khu vực US East 1.
    • VPC cung cấp một không gian địa chỉ mạng chung, tương tự như mạng tại chỗ (on-premise).
    • VPC trải rộng trên hai Availability Zones (AZs), có thể hình dung như các trung tâm dữ liệu khác nhau của AWS, giúp tăng khả năng chịu lỗi nếu một AZ gặp sự cố.
  3. Tầng Web/Front-end [12]
    • Điểm vào dữ liệu là Elastic Load Balancer (ELB), luôn ở cấu hình active-active, nghĩa là cả hai AZ đều được sử dụng mặc định.
    • ELB phân phối dữ liệu đến các EC2 instances (máy ảo AWS) trong một auto-scaling group.
    • Auto-scaling group tự động điều chỉnh số lượng EC2 instances dựa trên tải, ví dụ, nếu tải trung bình vượt quá 80%, nhóm sẽ thêm các instance mới.
    • Mã ứng dụng chạy trên các EC2 instances của máy chủ web gửi yêu cầu đến các máy chủ ứng dụng (back-end servers).
  4. Tầng Ứng dụng/Back-end [18]
    • Các máy chủ ứng dụng nhận yêu cầu từ tầng web.
  5. Tầng Cơ sở dữ liệu [20]
    • Tầng ứng dụng có thể liên hệ với tầng cơ sở dữ liệu ở dưới cùng.
    • Tác giả sử dụng Amazon RDS (Relational Database Service), hỗ trợ nhiều cơ sở dữ liệu SQL phổ biến như MySQL, SQL server, hoặc Postgres.
    • Có các subnet riêng biệt cho mỗi tầng và mỗi AZ, đây là thực hành tốt nhất để phân tách, cho phép các instance trong cùng một subnet giao tiếp với nhau nhưng hạn chế truy cập từ bên ngoài trừ khi được cho phép rõ ràng.

1.3. Cấu hình mạng và bảo mật chi tiết [24]

  1. Truy cập vào các tầng [24]
    • Các load balancer có cài đặt security group hoặc Access Control List (ACL) để có thể giao tiếp với các instance trong subnet.
  2. Subnet công cộng và riêng tư [26]
    • Hai subnet công cộng ở trên cùng có kết nối với internet, khác với các subnet riêng tư khác.
  3. Truy cập từ xa và quản trị [27]
    • Để truy cập các instance trong subnet riêng tư cho mục đích quản trị, có hai NAT gateway.
    • NAT gateway được sử dụng khi các instance riêng tư cần giao tiếp với thế giới bên ngoài, ví dụ để nhận các bản vá bảo mật và cập nhật.
    • Có một Bastion host để hỗ trợ quản trị nói chung.

1.4. Sao lưu và phục hồi dữ liệu [30]

  1. Sao lưu dữ liệu quan trọng [30]
    • Có hai AWS backup instances để máy chủ web và ứng dụng gửi dữ liệu quan trọng đến một backup vault.
  2. Cấu hình dự phòng giữa các khu vực [31]
    • Ở phía bên phải, có một cấu hình tương tự tại khu vực US West 2 với cấu hình active-passive.
    • Điều này có nghĩa là dịch vụ CloudFront chỉ gửi dữ liệu đến khu vực này khi khu vực chính (US East 1) gặp sự cố.
    • Cấu hình này cho phép khả năng chịu lỗi cực cao, đạt "five nines" (99.999%), với thời gian ngừng hoạt động tối đa trung bình là 5.2 phút mỗi năm.
    • Để thực hiện điều này, backup vault thực hiện sao lưu liên tục giữa các khu vực (cross-region backup).
    • Một backup vault ở khu vực khác sử dụng backup restore để giữ cho tầng web và ứng dụng luôn cập nhật.
    • Điều tương tự cũng áp dụng cho tầng cơ sở dữ liệu.

1.5. Phục hồi cơ sở dữ liệu và khả năng mở rộng [37]

  1. Phục hồi cơ sở dữ liệu liên tục [37]
    • RDS có một instance active và một instance secondary trong một khu vực, được kết nối với khu vực khác thông qua cross-region replica.
    • Điều này đảm bảo luôn có một instance cơ sở dữ liệu cập nhật sẵn sàng chờ.
  2. Khả năng mở rộng và phục hồi toàn diện [39]
    • Với cấu hình này, hệ thống có thể mở rộng quy mô vô thời hạn khi nhu cầu tăng lên.
    • Mọi thành phần đều có thể gặp lỗi và sẽ được thay thế.
    • Nếu một instance gặp lỗi, sẽ có các instance khác sẵn sàng và auto-scaling groups sẽ đảm bảo có các instance mới.
    • Nếu một Availability Zone gặp sự cố nghiêm trọng, có một AZ khác trong cùng khu vực.
    • Nếu cả một khu vực gặp sự cố, cơ chế failover active-passive trên CloudFront distribution sẽ chuyển sang một khu vực khác có cấu hình tương tự.

1.6. Chi phí và cân nhắc [44]

  1. Thực hành tốt nhất và chi phí [44]
    • Cấu hình này được coi là thực hành tốt nhất cho các tập đoàn lớn hoặc khi yêu cầu khả năng chịu lỗi cao.
    • Tuy nhiên, nó làm tăng chi phí đáng kể vì cần có cơ sở hạ tầng dự phòng không sử dụng, tùy thuộc vào tốc độ cần kích hoạt khi có sự cố.
    • Mặt khác, tính năng tự động mở rộng quy mô sẽ xử lý việc tăng tải khi cần.
  2. Cân nhắc về thời gian ngừng hoạt động [46]
    • Quá trình chuyển đổi có thể mất vài phút. Nếu yêu cầu không có thời gian ngừng hoạt động tuyệt đối và muốn chuyển đổi khu vực diễn ra ngay lập tức, có thể cân nhắc cấu hình active-active cho cả hai khu vực.