Zero-downtime deployment là gì? Triển khai bản mới không sập web
Zero-downtime deployment là gì? Triển khai bản mới không sập web
Website "sập" đúng lúc đội kỹ thuật cập nhật phiên bản mới — khách hàng không truy cập được, đơn hàng gián đoạn, cả đội cuống cuồng rollback trong đêm. Với website thương mại điện tử, mỗi phút downtime đều là doanh thu mất đi. Bài viết này giải thích cặn kẽ zero downtime deployment là gì, các chiến lược phổ biến và checklist áp dụng thực tế trên Cloud Server hoặc VPS.
Zero downtime deployment là gì?
Zero downtime deployment là phương pháp đưa phiên bản mới của ứng dụng lên production mà không gây gián đoạn dịch vụ cho người dùng đang truy cập. Trong suốt quá trình triển khai — từ lúc bản mới khởi động đến khi bản cũ bị gỡ bỏ — website vẫn hoạt động bình thường, không có khoảng thời gian "chết" nào.
So sánh với cách truyền thống: dừng ứng dụng, thay code mới, khởi động lại. Khoảng từ lúc dừng đến lúc chạy xong chính là downtime — vài chục giây đến hàng chục phút nếu bản mới gặp lỗi. Trước đây người ta chọn "giờ thấp điểm" như 2–3 giờ sáng để deploy, nhưng với dịch vụ 24/7 như sàn thương mại điện tử hay ngân hàng số, khái niệm "giờ thấp điểm" gần như không còn.
Nguyên tắc cốt lõi rất đơn giản: luôn duy trì ít nhất một phiên bản đang chạy phục vụ người dùng trong mọi thời điểm triển khai. Bản mới khởi động song song, kiểm tra sức khỏe kỹ, chỉ khi sẵn sàng mới nhận traffic; bản cũ chỉ tắt sau khi bản mới ổn định. Nếu phát hiện lỗi, hệ thống chuyển traffic về bản cũ gần như ngay lập tức — khả năng rollback nhanh mà phương pháp truyền thống không có.
Cần hiểu đúng: zero downtime deployment không đảm bảo "không bao giờ có lỗi". Nó loại bỏ khoảng gián đoạn có thể dự đoán trước trong lúc deploy và giảm thiệt hại khi bản mới gặp vấn đề.

Zero downtime deployment là gì: vì sao doanh nghiệp Việt Nam cần triển khai không downtime?
Thứ nhất, thói quen trực tuyến đã thay đổi. Người Việt truy cập website cả giờ nghỉ trưa, tối muộn và cuối tuần — những khung giờ từng được coi là "thấp điểm". Website bán hàng sập 15 phút lúc 21h có thể mất hàng chục đơn hàng. Với hệ thống B2B, downtime còn ảnh hưởng dây chuyền đến đối tác.
Thứ hai, tần suất triển khai ngày càng cao. Các đội áp dụng CI/CD mỗi tuần thậm chí mỗi ngày đều có bản cập nhật. Nếu mỗi lần deploy đều cần "cửa sổ bảo trì", tốc độ đổi mới sẽ bị kìm hãm. Zero downtime deployment cho phép deploy bất cứ lúc nào, kể cả giờ hành chính.
Thứ ba, cam kết SLA ngày càng khắt khe: uptime 99,9% tương đương chỉ được downtime khoảng 8,7 giờ mỗi năm. Mỗi lần deploy mất 10 phút, mỗi tháng 4 lần là đã "tiêu" gần hết ngân sách downtime cả năm.
Cuối cùng là trải nghiệm người dùng: vài lần thấy trang bảo trì là đủ để khách hàng chuyển sang đối thủ. Triển khai không downtime giúp đội kỹ thuật tự tin thử nghiệm tính năng mới.
Zero downtime deployment là gì: các chiến lược zero-downtime deployment phổ biến
Blue-Green Deployment duy trì hai môi trường production giống hệt nhau: Blue (đang chạy) và Green (chờ). Triển khai bản mới lên Green, kiểm thử đầy đủ, rồi chuyển toàn bộ traffic sang bằng cách đổi cấu hình load balancer. Có sự cố thì chuyển ngược lại Blue — rollback trong vài giây. Nhược điểm: tốn gấp đôi tài nguyên lúc deploy và cần đồng bộ dữ liệu cẩn thận.
Canary Deployment chỉ chuyển 5–10% traffic sang bản mới, theo dõi tỷ lệ lỗi, thời gian phản hồi, mức tiêu thụ tài nguyên. Ổn định thì tăng dần 25%, 50% rồi 100%; có vấn đề thì chỉ một nhóm nhỏ người dùng bị ảnh hưởng. Đây là chiến lược giảm rủi ro tốt nhất.
Rolling Update thay thế dần từng instance cũ bằng instance mới: tắt 1 server cũ, bật 1 server bản mới, kiểm tra sức khỏe rồi tiếp tục. Luôn có đủ server phục vụ nên người dùng không gián đoạn. Kubernetes và Docker Swarm hỗ trợ sẵn.
Feature Flag đưa code mới lên production nhưng ẩn sau "cờ tính năng", chỉ bật cho nhóm người dùng nhất định.
Zero downtime deployment là gì: so sánh các chiến lược triển khai
| Tiêu chí | Blue-Green | Canary | Rolling Update | Feature Flag |
|---|---|---|---|---|
| Tốc độ chuyển đổi | Ngay lập tức (100%) | Dần dần theo tỷ lệ | Dần dần theo instance | Theo nhóm người dùng |
| Tốc độ rollback | Rất nhanh | Nhanh | Trung bình | Rất nhanh |
| Tài nguyên cần thêm | Gấp đôi lúc deploy | Một phần nhỏ | Không đáng kể | Không đáng kể |
| Độ phức tạp | Trung bình | Cao | Thấp | Cao |
| Rủi ro khi lỗi | Trung bình | Thấp nhất | Trung bình | Thấp |
| Phù hợp với | Hệ thống vừa | Hệ thống lớn, traffic cao | Microservices trên K8s | Phát hành tính năng dần dần |
Không có chiến lược "tốt nhất" cho mọi trường hợp. Startup với 2–3 server có thể bắt đầu bằng rolling update. Sàn thương mại điện tử lớn nên đầu tư canary kết hợp feature flag. Điểm chung: tất cả đều cần hạ tầng ổn định phía dưới — load balancer, health check tự động, khả năng mở rộng nhanh.
Blue-Green deployment: các bước thực tế
Xét mô hình phổ biến: website chạy trên hai Cloud Server đặt sau load balancer.
Bước 1 — Chuẩn bị Green: dựng server thứ hai cấu hình giống hệt Blue. Trên Cloud Server, tạo snapshot từ Blue rồi dựng Green từ snapshot — đồng nhất tuyệt đối chỉ trong vài phút.
Bước 2 — Triển khai bản mới lên Green: đưa code mới lên, chạy migration database, khởi động ứng dụng và chạy kiểm thử tự động. Green chưa nhận traffic thật nên kiểm tra thoải mái.
Bước 3 — Shadow traffic: sao chép request thật từ Blue sang Green để phát hiện lỗi chỉ xuất hiện với dữ liệu thật.
Bước 4 — Chuyển traffic: cập nhật load balancer chuyển 100% traffic sang Green trong vài giây. Lưu ý: session phải lưu tập trung (Redis, database) thay vì trên từng server.
Bước 5 — Theo dõi và dọn dẹp: giữ Blue chạy thêm 30–60 phút đề phòng rollback khẩn cấp, rồi tắt để tiết kiệm tài nguyên hoặc giữ làm môi trường chờ cho lần deploy sau.
Lưu ý: blue-green cần database dùng chung hoặc cơ chế replicate dữ liệu cẩn thận, nếu không sẽ mất hoặc lệch dữ liệu sau khi chuyển đổi.
Canary deployment: phát hành từng phần
Canary phù hợp khi bản cập nhật rủi ro cao, ví dụ thay đổi logic thanh toán hay tính giá. Triển khai bản mới lên nhóm server nhỏ (1 trong 10 server), định tuyến khoảng 5% traffic đến đó. Giám sát tự động theo dõi tỷ lệ lỗi HTTP 5xx, thời gian phản hồi P95/P99, tỷ lệ chuyển đổi. Sau 15–30 phút nếu mọi chỉ số trong ngưỡng, tăng lên 25%, rồi 50%, cuối cùng 100%. Chỉ số vượt ngưỡng thì tự động quay về bản cũ.
Để triển khai canary cần lớp định tuyến thông minh: load balancer hỗ trợ weighted routing (HAProxy, Nginx), service mesh như Istio, hoặc Argo Rollouts/Flagger trên Kubernetes. Với WordPress trên VPS đơn, có thể làm canary "thủ công" bằng subdomain staging nhận một phần traffic theo tỷ lệ.
Biến thể hữu ích là canary theo nhóm người dùng: cho người dùng nội bộ hoặc beta tester dùng bản mới trước để thu thập phản hồi. Điểm cần nhớ: khi hai bản cùng chạy và dùng chung database, code phải tương thích ngược với schema.
Rolling update với Kubernetes và Docker Swarm
Trên Kubernetes, rolling update có sẵn, cấu hình vài dòng YAML. Khi cập nhật image, Kubernetes tạo Pod mới theo chiến lược RollingUpdate với maxSurge (số Pod mới tạo thêm tối đa) và maxUnavailable (số Pod được phép "chết" tối đa). Với 10 replica, maxSurge: 2 và maxUnavailable: 1 — luôn có ít nhất 9 Pod phục vụ.
Yếu tố quyết định là health check cấu hình đúng: readinessProbe quyết định Pod mới đã sẵn sàng nhận traffic chưa. Nếu probe chỉ kiểm tra "port đã mở" mà không kiểm tra kết nối database, Pod mới có thể nhận traffic khi chưa thực sự sẵn sàng. Hãy viết endpoint /healthz kiểm tra đầy đủ các phụ thuộc.
Với Docker Swarm, lệnh docker service update --update-parallelism 1 --update-delay 30s cập nhật từng container một, mỗi lần cách nhau 30 giây; kết hợp healthcheck trong Dockerfile để tự rollback khi container mới không đạt.
Database migration: điểm khó nhất
Nhiều đội deploy code không downtime rất tốt nhưng lại "sập" ở bước migrate database, vì database có trạng thái — không thể chạy hai schema song song như code. Kỹ thuật chuẩn là expand-contract, gồm ba lần deploy tách biệt.
Expand: thêm mới mà không xóa/sửa cái cũ. Ví dụ đổi tên cột username thành display_name: thêm cột mới, code ghi dữ liệu vào cả hai cột (dual-write). Code hiện tại vẫn đọc cột cũ nên không ảnh hưởng.
Migrate: chạy job nền sao chép dữ liệu từ cột cũ sang cột mới, rồi deploy bản code mới đọc từ cột mới (vẫn ghi cả hai cho an toàn).
Contract: khi không còn code nào dùng cột cũ, deploy bản code chỉ dùng cột mới, rồi mới xóa cột cũ. Ở bất kỳ thời điểm nào, code đang chạy cũng tương thích với schema hiện tại.
Nguyên tắc vàng: không deploy code và migration phá vỡ tương thích trong cùng một lần; không xóa cột/bảng ngay trong lần deploy đổi code; luôn backup database trước mỗi lần migrate lớn. Với MySQL/PostgreSQL, ALTER TABLE trên bảng lớn có thể khóa bảng — công cụ như pt-online-schema-change (Percona) cho phép đổi schema trực tuyến không khóa bảng.

Checklist trước khi triển khai production
Code và bản build: đã review và merge vào nhánh chính; pipeline CI xanh 100%; bản build đánh tag phiên bản rõ ràng, lưu trữ immutable; biến môi trường, khóa API, chuỗi kết nối của production đã kiểm tra — tuyệt đối không nhầm cấu hình dev/staging.
Hạ tầng: tài nguyên server còn đủ cho bản mới (blue-green cần gấp đôi tạm thời); load balancer và health check cấu hình đúng; backup mới nhất của database và source code đã hoàn tất và kiểm tra khôi phục được; kế hoạch rollback viết cụ thể — ai quyết định, các bước thao tác, mất bao lâu.
Giám sát và truyền thông: monitoring hoạt động, có người trực suốt quá trình deploy; ngưỡng cảnh báo tự động đã bật; các bên liên quan (CSKH, kinh doanh) đã được thông báo lịch deploy.
Sau deploy: theo dõi chỉ số ít nhất 30–60 phút; kiểm tra tay các luồng quan trọng (đăng nhập, đặt hàng, thanh toán); xác nhận log không có lỗi mới; chỉ dọn môi trường cũ khi hoàn toàn yên tâm.
Kết luận
Zero downtime deployment không phải kỹ thuật xa xỉ chỉ dành cho các "ông lớn". Với hạ tầng cloud hiện đại và công cụ CI/CD mã nguồn mở, đội ngũ nhỏ với vài Cloud Server cũng triển khai được blue-green, canary hay rolling update bài bản. Mấu chốt: luôn giữ một phiên bản ổn định phục vụ người dùng, kiểm tra kỹ bản mới trước khi chuyển traffic, migrate database theo expand-contract, và chuẩn bị sẵn rollback.
Khi tầng ứng dụng đã "không sập vì deploy", giá trị hạ tầng ổn định phía dưới mới phát huy trọn vẹn. Cloud Server với cam kết uptime 99,98% và snapshot nhanh để dựng môi trường blue-green là nền tảng vững chắc cho mọi chiến lược zero-downtime. Nếu đội ngũ bạn muốn xây dựng CI/CD chuyên nghiệp trên hạ tầng cloud trong nước, hãy liên hệ SunCloud qua hotline 083 979 3434 hoặc truy cập suncloud.vn — dùng thử Cloud Server 10 ngày miễn phí trước khi quyết định.
Câu hỏi thường gặp
Zero downtime deployment có đảm bảo website không bao giờ sập không?
Không. Phương pháp này chỉ loại bỏ khoảng gián đoạn có thể dự đoán trước trong lúc triển khai bản mới. Website vẫn có thể gặp sự cố do lỗi code, quá tải traffic hay tấn công mạng — nhưng khi bản mới có vấn đề, bạn rollback về bản ổn định trong vài giây đến vài phút.
Một VPS đơn có áp dụng được không?
Có. Trên một VPS đơn, dựng thêm container hoặc thư mục mã nguồn thứ hai làm môi trường "green" tạm thời, rồi dùng Nginx làm reverse proxy chuyển traffic giữa hai phiên bản. Chưa hoàn hảo như hai server riêng, nhưng tốt hơn nhiều so với dừng toàn bộ ứng dụng để deploy.
Nên chọn Blue-Green hay Canary?
Blue-green phù hợp khi cần chuyển đổi nhanh, rollback tức thì và có đủ tài nguyên dự phòng gấp đôi. Canary phù hợp khi bản cập nhật rủi ro cao (thay đổi logic thanh toán, tính giá) và bạn muốn giới hạn phạm vi ảnh hưởng ở mức tối thiểu. Nhiều tổ chức lớn kết hợp cả hai.
Rolling update có làm chậm website lúc deploy không?
Nếu cấu hình đúng thì không. Năng lực phục vụ chỉ giảm nhẹ trong thời gian ngắn. Tuy nhiên, số instance còn lại phải đủ xử lý traffic đỉnh — đừng deploy rolling update đúng giờ cao điểm khi server đang chạy 90% công suất.
Có cần sửa code ứng dụng không?
Có, ở một số điểm: ứng dụng cần khởi động nhanh, tắt graceful khi nhận tín hiệu dừng, không lưu session trên bộ nhớ cục bộ từng server (dùng Redis hoặc database tập trung), và code phải tương thích ngược với schema database cũ trong giai đoạn chuyển đổi.
Công cụ CI/CD nào hỗ trợ tốt nhất?
Jenkins, GitLab CI, GitHub Actions đều làm được khi kết hợp với Kubernetes (Argo Rollouts hoặc Flagger cho canary/blue-green) hoặc Docker Swarm. Quan trọng hơn công cụ là quy trình: health check chuẩn, giám sát đầy đủ và checklist rõ ràng.
