Kiến trúc giải pháp

2.1. Tổng quan kiến trúc
Hệ thống được xây dựng theo kiến trúc cloud-native microservices trên AWS. Các thành phần được container hóa và triển khai trên Amazon ECS Fargate.
Đường đi xử lý chính:
- Trình duyệt tải giao diện từ CloudFront. CloudFront đọc nội dung từ S3 WebBucket.
- Trình duyệt gọi API tới API Gateway (HTTP API).
- API Gateway chuyển request qua VPC Link tới Application Load Balancer.
- ALB định tuyến theo URL path tới từng microservice trên ECS Fargate.
- Microservice đọc ghi dữ liệu trên RDS for PostgreSQL.
- Microservice dùng Redis cho cache và Kafka cho message streaming khi cần.
- Microservice lưu media lên S3 ImagesBucket.
- Container ghi log vào CloudWatch Logs.
2.2. Các dịch vụ AWS sử dụng
- Amazon VPC: Mạng riêng cho toàn hệ thống. 2 Availability Zones. Public subnet và private subnet.
- Internet Gateway: Kết nối Internet cho tài nguyên public.
- NAT Gateway (2): Kết nối Internet outbound cho tài nguyên trong private subnet.
- Amazon S3:
- WebBucket: Lưu frontend dạng static.
- ImagesBucket: Lưu object media. Bật CORS cho upload và download.
- Amazon CloudFront: CDN cho WebBucket. Dùng Origin Access Control để đọc S3 private.
- Amazon API Gateway (HTTP API): Public endpoint cho API. Proxy vào ALB qua VPC Link.
- Application Load Balancer: Nhận request HTTP port 80. Route theo path tới ECS services.
- Amazon ECS on Fargate:
- 4 microservices: user, notification, chatbot, event.
- 2 service nội bộ: Redis, Kafka.
- AWS Cloud Map (Service Discovery): Cấp DNS nội bộ cho Redis và Kafka trong VPC.
- Amazon RDS for PostgreSQL: 3 DB instances trong private subnets. Bật encryption và backup.
- AWS IAM:
- ECS execution role cho ECS agent.
- ECS task role cho quyền ứng dụng.
- GitHub OIDC provider và GitHub deploy role cho CI/CD.
- Amazon CloudWatch Logs: Lưu log ECS. Retention 14 ngày.
- Application Auto Scaling: Scale ECS service theo CPU.
2.3. Thiết kế các thành phần hệ thống
2.3.1 CI/CD Pipeline
Source code được quản lý trên GitHub.
GitHub Actions thực hiện build và deploy tự động.
Pipeline backend bao gồm:
- Build ứng dụng Spring Boot
- Build Docker image
- Push image lên Amazon ECR
- Cập nhật ECS Task Definition
- Redeploy ECS Service
Pipeline frontend build ứng dụng NextJS và deploy static files lên S3.
CloudFront được invalidate sau mỗi lần deploy.
CI/CD sử dụng IAM Role với GitHub OIDC.
Không sử dụng access key tĩnh.
 |
 |
| Hình 1. Code file GitHub Actions workflow cho service |
Hình 2. Code file GitHub Actions workflow cho front-end |
2.3.2 Frontend
Frontend được build dưới dạng static website.
File được lưu trữ trên Amazon S3.
CloudFront phân phối nội dung đến người dùng.
Origin Access Control giới hạn quyền truy cập vào S3.
Người dùng không truy cập trực tiếp vào bucket.

2.3.3 Backend
Backend gồm nhiều microservices viết bằng Spring Boot.
Mỗi service chạy trong một ECS Service riêng biệt.
Các container chạy trong private subnet.
Service chỉ nhận traffic từ Application Load Balancer.
ALB sử dụng path-based routing để định tuyến request.
Mỗi microservice có Target Group riêng.

2.3.4 Database
Hệ thống sử dụng Amazon RDS PostgreSQL.
Mỗi nhóm chức năng sử dụng một database instance riêng.
RDS được triển khai trong private subnet.
Chỉ ECS Service được phép kết nối thông qua Security Group.
Mô hình database-per-service giảm phụ thuộc giữa các microservices.
Video tạo database RDS
Video kiểm tra kết nối RDS trên local
2.3.5 Dịch vụ nội bộ
Hệ thống sử dụng các service nội bộ sau:
- Redis: Caching và session management
- Apache Kafka: Giao tiếp bất đồng bộ giữa các microservices
Redis và Kafka chạy trên ECS Fargate.
Service Discovery được triển khai bằng AWS Cloud Map.
Các service kết nối thông qua DNS nội bộ trong VPC.
2.4. Kiến trúc bảo mật
Hệ thống áp dụng bảo mật nhiều lớp:
- Phân tách public subnet và private subnet
- ECS Task và RDS không có public IP
- Security Group kiểm soát luồng truy cập
- IAM Role áp dụng nguyên tắc phân quyền tối thiểu
- CloudFront hạn chế truy cập trực tiếp vào S3
- API Gateway cách ly client khỏi backend
Tất cả truy cập nội bộ diễn ra trong mạng riêng.
2.5. Thiết kế khả năng mở rộng
Hệ thống hỗ trợ mở rộng linh hoạt:
- ECS Service tự động scale theo CPU utilization
- Mỗi microservice scale độc lập
- ALB phân phối đều lưu lượng truy cập
- Kiến trúc triển khai trên hai Availability Zone
- CI/CD cho phép cập nhật phiên bản không gián đoạn dịch vụ
Thiết kế phù hợp với hệ thống có lưu lượng biến động lớn.