Case study cloud migration này kể câu chuyện một sàn thương mại điện tử Việt Nam — từ lúc server sập mỗi lần Flash Sale đến khi xử lý êm ái 100x traffic nhờ kiến trúc auto-scaling trên AWS. Chi phí, kiến trúc, bài học — tất cả được chia sẻ chi tiết.
Bối cảnh: “Mỗi Flash Sale = 1 cơn ác mộng”
Về doanh nghiệp
- Ngành: Thương mại điện tử (thời trang + mỹ phẩm)
- Quy mô: 80 nhân viên, 50,000 sản phẩm, 200,000 users/tháng
- Doanh thu: 60 tỉ VND/năm, 40% đến từ các đợt Flash Sale
- Hạ tầng cũ: 2 server Dell vật lý đặt tại data center Viettel IDC
Vấn đề
Mỗi tháng có 2-3 đợt Flash Sale, traffic tăng 50-100 lần so với ngày thường:
| Chỉ số | Ngày thường | Flash Sale |
|---|---|---|
| Concurrent users | 500-1,000 | 50,000-100,000 |
| Requests/giây | 100 | 10,000+ |
| Orders/phút | 5-10 | 500-1,000 |
| Bandwidth | 50 Mbps | 5 Gbps |
Kết quả với server cũ:
- Flash Sale tháng 1: Server sập sau 3 phút, downtime 45 phút → mất ước tính 800 triệu doanh thu
- Flash Sale tháng 2: Upgrade server trước → sập sau 10 phút → mất 500 triệu
- Flash Sale tháng 3: Thuê thêm 2 server tạm → chạy được nhưng checkout chậm 30 giây → 60% giỏ hàng bị bỏ
Tổng thiệt hại 3 tháng: ~2 tỉ VND doanh thu mất + uy tín brand bị ảnh hưởng.
Giải pháp tạm thời đã thử
| Giải pháp | Chi phí | Kết quả |
|---|---|---|
| Nâng cấp server (thêm RAM, CPU) | 80 triệu | Chịu được 10x, không đủ cho 100x |
| Thuê thêm server tạm | 30 triệu/lần | Load balancing thủ công, vẫn chậm |
| Giới hạn user Flash Sale | 0 | Khách hàng phàn nàn, mất doanh thu |
Quyết định: Chuyển lên cloud với auto-scaling.
Giải pháp: Kiến trúc Cloud-native trên AWS
Kiến trúc tổng quan
[Users] → [CloudFront CDN] → [ALB] → [ECS Auto-scaling]
↓
[ElastiCache Redis]
↓
[RDS Aurora MySQL]
(Read Replicas)
↓
[S3 - Static files]
Chi tiết từng thành phần
| Thành phần | Dịch vụ AWS | Vai trò | Chi phí/tháng |
|---|---|---|---|
| CDN | CloudFront | Cache static content, giảm tải server | $50-200 |
| Load Balancer | ALB | Phân tải giữa các server | $20 |
| App servers | ECS Fargate | Chạy ứng dụng, auto-scale 2→50 containers | $100-800 |
| Cache | ElastiCache Redis | Cache database queries, sessions | $70 |
| Database | Aurora MySQL | Auto-scaling read replicas | $200-400 |
| Storage | S3 | Hình ảnh sản phẩm, static files | $30 |
| Monitoring | CloudWatch | Theo dõi performance, alerts | $20 |
| Queue | SQS | Xử lý order queue tránh overload | $5 |
Auto-scaling strategy
Scaling chính sách:
| Metric | Threshold | Action |
|---|---|---|
| CPU > 60% | Trigger | Thêm 2 containers (30 giây) |
| CPU > 80% | Urgent | Thêm 5 containers (30 giây) |
| Request count > 5000/phút | Trigger | Thêm 3 containers |
| CPU < 30% trong 10 phút | Scale down | Giảm 1 container |
| Minimum | Luôn luôn | 2 containers |
| Maximum | Giới hạn | 50 containers |
Scheduled scaling cho Flash Sale:
- 30 phút trước Flash Sale: Pre-warm lên 20 containers
- Trong Flash Sale: Auto-scale dựa trên CPU/request
- 1 giờ sau Flash Sale: Gradual scale down
Quá trình migration (6 tuần)
Tuần 1-2: Setup infrastructure
- Tạo VPC, subnets, security groups
- Setup ECS cluster, task definitions
- Setup RDS Aurora + read replicas
- Setup ElastiCache Redis
Tuần 3: Migrate application
- Dockerize ứng dụng
- Refactor session management (dùng Redis thay local session)
- Refactor file upload (dùng S3 thay local disk)
- Setup CI/CD pipeline (GitHub Actions → ECR → ECS)
Tuần 4: Data migration
- Migrate database từ MySQL on-premise → Aurora
- Migrate hình ảnh → S3
- Validate data integrity
Tuần 5: Testing
- Load testing với k6: simulate 100,000 concurrent users
- Chaos testing: kill containers, test auto-recovery
- Performance tuning: optimize queries, caching
- Security audit
Tuần 6: Cutover
- DNS switchover (zero-downtime)
- Monitor 24/7 trong 3 ngày đầu
- Rollback plan: DNS trỏ về server cũ trong 5 phút nếu cần
Kết quả
Flash Sale đầu tiên trên cloud
| Chỉ số | Server cũ | AWS Cloud |
|---|---|---|
| Peak concurrent users | 5,000 (rồi sập) | 120,000 (chạy mượt) |
| Response time | > 30 giây (overload) | 200ms trung bình |
| Uptime | 92% (sập 45 phút) | 100% |
| Orders processed | 2,000 (trước khi sập) | 25,000 |
| Doanh thu Flash Sale | 800 triệu | 3.5 tỉ |
| Containers used | N/A | Peak 45, sau 2h giảm về 5 |
Chi phí so sánh
Chi phí hạ tầng cũ:
| Hạng mục | Chi phí/tháng |
|---|---|
| 2 servers (khấu hao) | 5 triệu |
| Data center hosting | 8 triệu |
| Part-time sysadmin | 10 triệu |
| Thuê server tạm Flash Sale | 30 triệu (2-3 lần/tháng) |
| Tổng | 53 triệu/tháng |
| Doanh thu mất do downtime | 300-800 triệu/tháng |
Chi phí AWS cloud:
| Hạng mục | Ngày thường | Tháng có Flash Sale |
|---|---|---|
| ECS Fargate | 4 triệu | 12 triệu |
| Aurora MySQL | 7 triệu | 10 triệu |
| ElastiCache | 2 triệu | 2 triệu |
| CloudFront | 1.5 triệu | 5 triệu |
| S3 + Others | 1.5 triệu | 2 triệu |
| Tổng | 16 triệu | 31 triệu |
| Doanh thu mất do downtime | 0 | 0 |
ROI:
- Chi phí tăng: 0 (thực tế giảm so với cũ)
- Doanh thu tăng: +2.7 tỉ/Flash Sale (từ 800 triệu → 3.5 tỉ)
- ROI sau 3 tháng: > 2,000%
Kết quả sau 6 tháng
| Chỉ số | Trước | Sau 6 tháng |
|---|---|---|
| Uptime | 95% | 99.99% |
| Flash Sale downtime | 45 phút/lần | 0 |
| Doanh thu/Flash Sale | 800 triệu-1.5 tỉ | 3-5 tỉ |
| Chi phí hạ tầng/tháng | 53 triệu | 20-35 triệu |
| Deploy frequency | 1 lần/2 tuần | 5 lần/ngày |
| Time to market | 2 tuần | 2 ngày |
Bài học rút ra
1. Cloud-native, không phải Lift & Shift
Nếu chỉ thuê EC2 chạy giống server cũ, sẽ đắt hơn. Phải dùng managed services (Aurora, ElastiCache, CloudFront) và containerization (ECS/EKS).
2. Pre-warm trước peak traffic
Auto-scaling cần 30-60 giây để thêm server mới. Nếu traffic tăng đột ngột từ 0→100x trong 10 giây, scale không kịp. Giải pháp: scheduled scaling trước sự kiện.
3. Cache là king
80% requests được serve từ CloudFront và Redis cache — không cần đến database. Giảm tải database 80%, giảm chi phí compute 60%.
4. Kiến trúc microservices
Tách riêng: catalog (xem sản phẩm), cart (giỏ hàng), checkout (thanh toán), payment (xử lý tiền). Flash Sale chỉ cần scale checkout + payment, không cần scale toàn bộ.
5. Đầu tư vào load testing
Trước mỗi Flash Sale, chạy load test simulate 150% dự kiến traffic. Phát hiện bottleneck trước khi khách hàng phát hiện.
Công nghệ và tools sử dụng
| Mục đích | Tool |
|---|---|
| Containerization | Docker + ECS Fargate |
| CI/CD | GitHub Actions |
| Infrastructure as Code | Terraform |
| Monitoring | CloudWatch + Datadog |
| Load testing | k6 |
| Log management | CloudWatch Logs + Kibana |
| Alerting | PagerDuty |
FAQ — Câu hỏi thường gặp
1. SME nhỏ hơn có cần kiến trúc phức tạp như vậy?
Không. Kiến trúc này phù hợp cho e-commerce có Flash Sale / traffic biến động lớn. SME traffic ổn định chỉ cần 1-2 EC2 instances + RDS + CloudFront là đủ. Chi phí 5-15 triệu/tháng.
2. Chi phí migration 6 tuần là bao nhiêu?
Tổng chi phí migration: ~180 triệu VND (bao gồm tư vấn kiến trúc, implementation, testing, cutover). Hoàn vốn sau 1 Flash Sale đầu tiên.
3. Có cần đội DevOps full-time?
Trong case study này, đội DevOps 2 người (1 senior + 1 junior). SME có thể outsource DevOps cho managed service provider với chi phí 10-20 triệu/tháng.
Hệ thống của bạn không chịu được traffic cao điểm? Liên hệ Trinh Digital để được tư vấn kiến trúc cloud và auto-scaling phù hợp.