T
Trinh Digital
Triển khai Giải pháp

Zero-downtime deployment: Tại sao 'tắt website để update' là không chấp nhận được

Trinh Digital · · 8 phút đọc

Zero-downtime deployment — khái niệm nghe fancy nhưng thực ra trả lời cho câu hỏi rất thực tế: “Có cách nào update website/app mà không cần tắt hệ thống, user không bị ảnh hưởng không?” Câu trả lời: Có. Và trong 2026, “tắt website để bảo trì” không còn là lựa chọn chấp nhận được nữa.

Chi phí thực của downtime

Bao nhiêu tiền mỗi phút downtime?

Quy mô doanh nghiệpDoanh thu/ngàyChi phí downtime/giờChi phí downtime/phút
Cửa hàng online nhỏ5 triệu VND208K VND3.5K VND
SME e-commerce50 triệu VND2.08 triệu VND35K VND
Chuỗi bán lẻ online500 triệu VND20.8 triệu VND347K VND
SaaS platform200 triệu VND/tháng277K VND (MRR)4.6K VND

Nhưng đó chỉ là direct revenue loss. Thiệt hại thực tế bao gồm:

Thiệt hại gián tiếpTác động
SEO ranking giảmGoogle penalize website có uptime kém
Khách hàng chuyển đối thủ1 lần trải nghiệm xấu = mất khách vĩnh viễn
Ad spend lãng phíAds vẫn chạy, click vào → website down
Trust damage”Website hay sập” → khách không dám mua
SLA violationB2B contract phạt downtime ngoài window

Thực trạng tại SME Việt Nam

Nhiều SME vẫn deploy theo cách:

  • 23h đêm: Developer SSH vào server, chạy git pull, restart service
  • Thông báo: “Hệ thống bảo trì từ 23h-1h, xin quý khách thông cảm”
  • Downtime: 30 phút - 2 giờ mỗi lần update

Tần suất: 2-4 lần/tháng → 1-8 giờ downtime/tháng

Với e-commerce có doanh thu 50 triệu/ngày: 8 giờ downtime/tháng = mất ~17 triệu VND/tháng — chưa tính thiệt hại gián tiếp.

Zero-downtime deployment là gì?

Định nghĩa

Zero-downtime deployment là kỹ thuật deploy phiên bản mới mà user không bị gián đoạn. Không có “bảo trì”, không có error page, không có loading chậm. User đang dùng version 1.0 → refresh trang → đã dùng version 2.0 mà không biết.

3 chiến lược phổ biến

1. Blue-Green Deployment

Nguyên lý: Duy trì 2 môi trường production giống hệt nhau — Blue (đang active) và Green (standby).

Quy trình:

  1. Blue đang serve traffic (version 1.0)
  2. Deploy version 2.0 lên Green
  3. Test kỹ trên Green
  4. Chuyển traffic từ Blue → Green (switch load balancer)
  5. Green giờ là active (version 2.0)
  6. Blue giờ là standby (sẵn sàng rollback)

Ưu điểm:

  • Rollback cực nhanh (chuyển traffic ngược lại Blue = 30 giây)
  • Test trên production environment thật trước khi switch
  • Không ảnh hưởng user

Nhược điểm:

  • Cần gấp đôi infrastructure (2 môi trường production)
  • Database migration phức tạp (cả 2 version phải đọc cùng DB)

Chi phí thêm: +80-100% infrastructure cost

Phù hợp: Doanh nghiệp cần reliability cao, budget đủ cho infrastructure

2. Canary Deployment

Nguyên lý: Deploy version mới cho một % nhỏ user trước, monitor, rồi dần tăng lên 100%.

Quy trình:

  1. 100% traffic → version 1.0
  2. Deploy version 2.0, route 5% traffic → version 2.0
  3. Monitor 30 phút: error rate, response time, conversion
  4. OK → tăng lên 25% → monitor → 50% → 75% → 100%
  5. Nếu có vấn đề → route 100% traffic về version 1.0

Ưu điểm:

  • Risk thấp nhất (chỉ 5% user bị ảnh hưởng nếu bug)
  • Data-driven decision (monitor real traffic trước khi roll out)
  • Không cần gấp đôi infrastructure

Nhược điểm:

  • Triển khai phức tạp hơn (cần traffic routing)
  • 2 versions chạy cùng lúc → database compatibility
  • Rollout chậm hơn (tổng thời gian deploy 1-4 giờ)

Chi phí thêm: +20-30% infrastructure cost (thêm routing layer)

Phù hợp: SaaS, app có nhiều user, cần validate trước khi full release

3. Rolling Deployment

Nguyên lý: Thay thế từng server/instance từng cái một — luôn có server nào đó đang serve traffic.

Quy trình:

  1. 4 servers đang chạy version 1.0
  2. Tắt server 1, deploy version 2.0, bật lại → 3 servers v1.0 + 1 server v2.0
  3. Tắt server 2, deploy version 2.0 → 2 servers v1.0 + 2 servers v2.0
  4. Lặp lại cho server 3, 4
  5. Kết quả: 4 servers đều chạy version 2.0

Ưu điểm:

  • Không cần thêm infrastructure
  • Đơn giản, native trong Kubernetes/Docker Swarm
  • Rollback bằng cách reverse process

Nhược điểm:

  • 2 versions chạy cùng lúc (tạm thời) → cần backward compatibility
  • Rollback chậm hơn Blue-Green
  • Nếu version 2.0 có bug → một số user đã bị ảnh hưởng

Chi phí thêm: ~0% (dùng infrastructure hiện tại)

Phù hợp: Team nhỏ, budget hạn chế, dự án không quá critical

So sánh 3 chiến lược

Tiêu chíBlue-GreenCanaryRolling
Độ phức tạpTrung bìnhCaoThấp
Infrastructure cost+100%+20-30%~0%
Rollback speed< 1 phút< 1 phút5-15 phút
RiskThấpRất thấpTrung bình
User impact0%0-5% (canary group)0-25% (tạm thời)
Deployment time5-15 phút1-4 giờ (gradual)10-30 phút
Best forMission-criticalHigh-traffic appsStandard apps

Hướng dẫn triển khai Rolling Deployment với Docker

Cho SME muốn bắt đầu đơn giản nhất:

Bước 1: Docker Compose với multiple replicas

version: '3.8'
services:
  app:
    image: my-app:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 30s
        order: start-first
      rollback_config:
        parallelism: 1
        delay: 10s
    ports:
      - "3000:3000"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 10s
      timeout: 5s
      retries: 3

Bước 2: Deploy update

docker compose up -d --no-deps app

Docker sẽ tự rolling update: start container mới → health check pass → stop container cũ → lặp lại.

Bước 3: Rollback nếu cần

docker compose rollback app

Database Migration trong Zero-Downtime

Vấn đề

Database migration là phần khó nhất của zero-downtime deployment. Khi 2 versions chạy cùng lúc, database phải tương thích với cả 2.

Nguyên tắc: Expand-Contract Pattern

Phase 1 — Expand: Thêm column/table mới, KHÔNG xóa cái cũ. Cả version cũ và mới đều hoạt động.

Phase 2 — Migrate: Deploy version mới, bắt đầu ghi data vào column mới.

Phase 3 — Contract: Sau khi 100% traffic chạy version mới, xóa column/table cũ.

Ví dụ: Đổi tên column namefull_name

  1. Migration 1: Thêm column full_name, copy data từ name
  2. Deploy code: Đọc từ full_name, ghi vào cả namefull_name
  3. Migration 2 (sau khi 100% traffic): Xóa column name

Các lỗi thường gặp

LỗiHậu quảGiải pháp
Xóa column trước khi deploy code mớiCode cũ crash vì thiếu columnLuôn expand trước, contract sau
Migration chạy quá lâuLock table, timeoutDùng online migration tool (gh-ost, pt-online-schema-change)
Không test migration trên stagingProduction crashLuôn chạy migration trên staging + review

Chi phí triển khai zero-downtime

Mức độChiến lượcChi phí setupChi phí/tháng thêm
Cơ bảnRolling (Docker Compose)5-15 triệu VND0 - 500K VND
Trung bìnhBlue-Green (2 environments)20-40 triệu VND1-5 triệu VND
Nâng caoCanary (Kubernetes + Istio)40-80 triệu VND5-15 triệu VND

FAQ — Câu hỏi thường gặp

1. SME có website WordPress — áp dụng zero-downtime được không?

Được nhưng phức tạp hơn. WordPress không design cho zero-downtime natively. Giải pháp: dùng staging plugin (WP Staging), test trên staging trước, rồi push lên production. Hoặc dùng WordPress hosting có zero-downtime built-in (Cloudways, Kinsta). Chi phí từ 300K-1 triệu/tháng.

2. Downtime 5 phút có đáng để đầu tư zero-downtime không?

Phụ thuộc vào business. Nếu bạn deploy 2 lần/tháng, mỗi lần 5 phút = 10 phút downtime/tháng — có thể chấp nhận được. Nhưng nếu deploy hàng ngày (CI/CD), hoặc doanh thu phụ thuộc 24/7 (e-commerce, SaaS), thì zero-downtime là must-have, không phải nice-to-have.

3. Rollback mất bao lâu nếu deploy bị lỗi?

Blue-Green: < 1 phút (switch traffic). Canary: < 1 phút (route 100% về version cũ). Rolling: 5-15 phút (reverse update). Deploy thủ công không có plan: 30 phút - 4 giờ (tìm backup, restore, test…). Zero-downtime deployment luôn có rollback plan sẵn — đó là lý do nó an toàn hơn deploy thủ công.

Kết luận

“Tắt website để bảo trì” là legacy practice của thế kỷ trước. Với Docker, CI/CD, và các chiến lược deployment hiện đại, SME hoàn toàn có thể deploy nhiều lần/ngày mà user không hề biết.

Bắt đầu đơn giản với Rolling Deployment + Docker Compose (chi phí gần 0), sau đó nâng cấp lên Blue-Green hoặc Canary khi business grow.

Nếu bạn cần hỗ trợ thiết kế và triển khai zero-downtime deployment cho hệ thống, hãy liên hệ Trinh Digital — chúng tôi sẽ giúp bạn deploy tự tin mà không lo downtime.

#zero downtime#deployment#blue-green#canary
Chia sẻ: Z

Sẵn sàng chuyển đổi số cùng Trinh Digital?

Liên hệ ngay để nhận tư vấn miễn phí. Đội ngũ chuyên gia sẽ phân tích nhu cầu và đề xuất giải pháp tối ưu.

Zalo