Zero-Downtime Deployment là cách triển khai ứng dụng mới mà người dùng không hề nhận ra hệ thống đang cập nhật.
Tức là dù bạn release bản mới, thay đổi API, cập nhật UI hay migrate database - dịch vụ vẫn hoạt động bình thường, không có gián đoạn.
Trong môi trường sản xuất (production), downtime dù chỉ vài phút cũng có thể gây:
-
Mất khách hàng (đặc biệt là hệ thống e-commerce, fintech)
-
Gây lỗi giao dịch hoặc mất dữ liệu tạm thời
-
Ảnh hưởng đến SEO, chỉ số uptime của dịch vụ
Mục tiêu của zero downtime là:
“Triển khai thay đổi mà người dùng không bao giờ thấy lỗi 502, 503 hoặc maintenance page.”
Tại sao lại có downtime khi deploy?
Downtime thường xuất hiện vì:
-
Quá trình build và restart service mất thời gian
→ Ví dụ: khi bạn restart container hoặc EC2, request đang đến bị ngắt.
-
Database schema thay đổi không tương thích với code cũ
→ Khi migrate DB, service mới chưa sẵn sàng, service cũ không đọc được dữ liệu mới.
-
Load balancer chưa cập nhật kịp target mới
→ Khi thay thế instance, có khoảng trễ giữa lúc gỡ server cũ và thêm server mới.
-
Triển khai trực tiếp (in-place)
→ Nghĩa là deploy đè lên instance đang chạy, khiến user truy cập vào phiên bản đang trong trạng thái “nửa cũ nửa mới”.
Các chiến lược phổ biến để đạt Zero Downtime
1. Blue-Green Deployment
Triển khai hai môi trường song song:
-
Blue: phiên bản đang chạy (production)
-
Green: phiên bản mới sẵn sàng
Khi bản Green được kiểm thử thành công, chỉ cần chuyển traffic từ Blue sang Green bằng Load Balancer.
Nếu có lỗi → rollback ngay lập tức bằng cách chuyển ngược lại.
AWS hỗ trợ sẵn:
-
Elastic Beanstalk Blue/Green Deployment
-
CodeDeploy + Application Load Balancer
-
ECS Service với hai Target Group
Ưu điểm: rollback nhanh, không downtime
Nhược điểm: tốn tài nguyên gấp đôi (chạy 2 môi trường cùng lúc)
2. Rolling Deployment
Thay thế dần từng phần instance hoặc container:
-
Một phần nhỏ server được cập nhật sang bản mới
-
Khi chúng chạy ổn → tiếp tục cập nhật nhóm tiếp theo
Rolling rất phổ biến trong Kubernetes, ECS, và EKS vì scheduler tự đảm bảo số lượng pod luôn đủ phục vụ traffic.
Ưu điểm: tiết kiệm tài nguyên
Nhược điểm: nếu lỗi nghiêm trọng, rollback phức tạp hơn Blue-Green
3. Canary Deployment
Triển khai bản mới cho một nhóm nhỏ người dùng trước (5–10%), đo lường hiệu năng, log, error rate → nếu ổn mới rollout cho toàn bộ.
Trên AWS, bạn có thể dùng:
-
CodeDeploy + Weighted Target Group
-
Route 53 Traffic Weighting để chia tỉ lệ request giữa version cũ/mới
-
Lambda Aliases để chia tỉ lệ version function
Ưu điểm: giảm rủi ro phát hành
Nhược điểm: yêu cầu hệ thống giám sát tốt (CloudWatch, Datadog, v.v.)
Cách triển khai Zero-Downtime trên môi trường Cloud / AWS
1. EC2 / Load Balancer
-
Dùng Auto Scaling Group (ASG) và Application Load Balancer (ALB)
-
Khi deploy:
-
Launch instance mới (version mới)
-
Đợi instance health check OK
-
Gỡ dần instance cũ khỏi target group
→ Người dùng không bao giờ chạm vào instance đang restart.
-
AWS CodeDeploy có sẵn tùy chọn:
deploymentConfigurationName: CodeDeployDefault.AllAtOnce deploymentConfigurationName: CodeDeployDefault.OneAtATime deploymentConfigurationName: CodeDeployDefault.HalfAtATime
→ Giúp điều chỉnh chiến lược rolling theo nhu cầu.
2. ECS / Fargate
ECS Service có sẵn deployment controller:
-
ECS (rolling update mặc định)
-
CODE_DEPLOY (dùng blue-green)
Khi ECS deploy bản mới:
-
Task mới được chạy trước
-
Khi sẵn sàng, Load Balancer chuyển traffic sang
-
Task cũ bị stop sau khi hết request
Tất cả diễn ra mà không downtime.
3. Kubernetes (EKS hoặc GKE, AKS)
Kubernetes hỗ trợ zero downtime “out-of-the-box” với RollingUpdate strategy:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
maxUnavailable: 0 đảm bảo luôn có đủ pod sẵn sàng phục vụ.
Bạn có thể nâng cấp image version mà không ảnh hưởng request đang xử lý.
Ngoài ra, có thể dùng Istio hoặc Argo Rollouts để triển khai canary/blue-green nâng cao.
4. Lambda
Lambda inherently hỗ trợ zero downtime nhờ mô hình version + alias:
-
Triển khai version mới
-
Gán alias trỏ từ version cũ sang version mới dần dần
-
Nếu lỗi → rollback alias lại version cũ
Kết hợp với CodeDeploy Weighted Alias để làm canary traffic routing.
Best Practice khi triển khai Zero-Downtime
-
Tách biệt Database Migration
-
Dùng chiến lược expand and contract:
-
Thêm cột mới (không xoá cũ ngay)
-
Cập nhật code để dùng cột mới
-
Xoá cột cũ sau khi toàn hệ thống đã update
-
-
-
Health Check kỹ càng
-
Đảm bảo mỗi instance/container có /health endpoint trả 200 OK
-
AWS/Load Balancer sẽ tự loại instance lỗi khỏi traffic
-
-
Monitor sau deploy
-
Theo dõi CloudWatch, error rate, latency
-
Dừng hoặc rollback nếu có spike bất thường
-
-
Dùng CI/CD pipeline chuyên biệt
-
GitHub Actions / GitLab CI / AWS CodePipeline có thể tự động hóa rolling hoặc blue-green
-
Giúp đảm bảo consistency mỗi lần release
-
Kết luận
Zero-Downtime Deployment không chỉ là “luxury feature”, mà là chuẩn mực trong hệ thống hiện đại.
Trong môi trường Cloud, AWS đã cung cấp đủ công cụ để thực hiện điều này dễ dàng — từ EC2, ECS, Lambda đến Kubernetes.
Quan trọng nhất vẫn là:
Thiết kế hạ tầng và quy trình release thông minh, thay vì chấp nhận downtime như điều hiển nhiên.









