0
0
Lập trình
Admin Team
Admin Teamtechmely

So sánh Cold và Hot Deployment trong CI/CD cho Microservices

Đăng vào 7 tháng trước

• 6 phút đọc

Giới thiệu về Cold và Hot Deployment

Trong bài viết này, chúng ta sẽ tìm hiểu về hai phương thức triển khai ứng dụng phổ biến trong quy trình CI/CD: Cold Deployment và Hot Deployment. Đây là những khái niệm quan trọng đối với các nhà phát triển, đặc biệt trong bối cảnh phát triển ứng dụng microservices và Kubernetes. Chúng tôi sẽ đề cập đến sự khác biệt, quy trình thực hiện, và những lưu ý cần thiết khi triển khai.

Nội dung chính

  • Sự khác biệt giữa Cold và Hot Deployment
  • Cách triển khai trong ứng dụng monolithic so với microservices
  • Hướng dẫn từng bước với các lệnh thực tế

Khái niệm chính

Cold Deployment

  • Cold Deployment: Dừng ứng dụng, triển khai mã mới, sau đó khởi động lại ứng dụng. Thời gian ngừng hoạt động có thể ảnh hưởng đến người dùng.

Hot Deployment

  • Hot Deployment: Triển khai mã mà không cần dừng dịch vụ, giúp giảm thiểu thời gian ngừng hoạt động.

Lưu ý

  • Cold deployments thường thấy trong các hệ thống kế thừa.
  • Hot deployments là tiêu chuẩn trong các pipeline CI/CD hiện đại.
  • Việc hiểu rõ về thời gian ngừng hoạt động, khả năng phục hồi và rủi ro rất quan trọng trong môi trường sản xuất.

Cold Deployment trong Ứng dụng Web Truyền Thống

Tình huống: Triển khai file WAR lên Tomcat

Các bước thực hiện:

  1. Dừng server Tomcat:
    bash Copy
    sudo systemctl stop tomcat
  2. Thay thế file WAR cũ:
    bash Copy
    cp /tmp/app.war /opt/tomcat/webapps/app.war
  3. Khởi động lại Tomcat:
    bash Copy
    sudo systemctl start tomcat
  4. Kiểm tra tình trạng sức khỏe:
    bash Copy
    curl -f http://web1:8080/app/health || echo "Triển khai thất bại"

Lưu ý:

  • Người dùng không thể truy cập ứng dụng trong khoảng thời gian Tomcat tắt.
  • Thời gian ngừng hoạt động phụ thuộc vào thời gian khởi động ứng dụng.
  • Đây là phương pháp đơn giản nhưng rủi ro trong môi trường sản xuất.

Hot Deployment trong Ứng dụng Web Truyền Thống

Tình huống: Sử dụng Tomcat Manager

Các bước thực hiện:

  1. Tải file WAR mới mà không dừng server:
    bash Copy
    curl -u admin:password -T target/app.war \
    "http://web1:8080/manager/text/deploy?path=/app&update=true"
  2. Kiểm tra ứng dụng đang hoạt động:
    bash Copy
    curl -f http://web1:8080/app/health

Lưu ý:

  • Server vẫn hoạt động, không có thời gian ngừng hoạt động.
  • Rủi ro: Có thể xảy ra rò rỉ bộ nhớ hoặc mất phiên.
  • Giải pháp: Sử dụng Load Balancer để cập nhật theo kiểu rolling để triển khai hot an toàn hơn.

Cold Deployment trong Microservices

Tình huống: Docker Compose

Các bước thực hiện:

  1. Dừng các dịch vụ:
    bash Copy
    docker-compose -f docker-compose.prod.yml down
  2. Kéo hình ảnh mới:
    bash Copy
    docker-compose -f docker-compose.prod.yml pull
  3. Khởi động lại các dịch vụ:
    bash Copy
    docker-compose -f docker-compose.prod.yml up -d
  4. Kiểm tra các endpoint:
    bash Copy
    curl -f http://microservice:8080/health

Lưu ý:

  • Tất cả các container dừng lại trước khi các container mới khởi động, dẫn đến thời gian ngừng hoạt động.
  • Phương pháp này phù hợp cho các triển khai quy mô nhỏ.
  • Không được khuyến nghị cho các microservices trong môi trường sản xuất.

Hot Deployment trong Microservices

Tình huống: Cập nhật Rolling trong Docker Swarm

Các bước thực hiện:

  1. Xây dựng và đẩy hình ảnh Docker mới:
    bash Copy
    docker build -t registry/myapp:v2 .
    docker push registry/myapp:v2
  2. Cập nhật dịch vụ với chiến lược rolling:
    bash Copy
    docker service update --image registry/myapp:v2 \
    --update-parallelism 1 --update-delay 10s myapp_service
  3. Giám sát cập nhật:
    bash Copy
    docker service ps myapp_service

Lưu ý:

  • Các tác vụ cập nhật lần lượt, dịch vụ vẫn hoạt động.
  • Thời gian ngừng hoạt động thấp và an toàn cho người dùng.

Hot Deployment trong Kubernetes

Cập nhật Rolling (mặc định trong K8s)

Mẫu YAML triển khai:

yaml Copy
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1

Các bước thực hiện:

  1. Xây dựng và đẩy hình ảnh:
    bash Copy
    docker build -t registry/myapp:2.0 .
    docker push registry/myapp:2.0
  2. Cập nhật triển khai:
    bash Copy
    kubectl set image deployment/myapp myapp=registry/myapp:2.0 --record
  3. Giám sát quá trình triển khai:
    bash Copy
    kubectl rollout status deployment/myapp
    kubectl get pods -l app=myapp -w

Lưu ý:

  • Các pod mới phải vượt qua các probe sẵn sàng trước khi các pod cũ bị kết thúc.
  • Đảm bảo không có thời gian ngừng hoạt động.
  • Việc quay lại là dễ dàng:
    bash Copy
    kubectl rollout undo deployment/myapp

So sánh Cold và Hot Deployment

Khía cạnh Cold Deployment Hot Deployment
Thời gian ngừng hoạt động Không / Tối thiểu
Triển khai Web truyền thống Dừng server, thay thế artifact, khởi động lại server Tomcat Manager / Cập nhật rolling với Load Balancer
Microservices Dừng container, khởi động container mới Rolling / Blue-Green / Canary
Quay lại Thủ công Dễ dàng (hoặc quay lại hoặc chuyển đổi lưu lượng)
Rủi ro Cao (thời gian ngừng hoạt động cho người dùng) Thấp (đã được kiểm tra, tự động, không có thời gian ngừng hoạt động)

Thực hành tốt nhất

  • Luôn sử dụng các probe sẵn sàng/sống.
  • Giữ cho các dịch vụ không trạng thái.
  • Sử dụng feature flags để bật/tắt tính năng mà không cần triển khai lại.
  • Theo dõi chỉ số triển khai và quay lại nếu vượt quá ngưỡng lỗi.
  • Chạy các bài kiểm tra khói trước khi định tuyến lưu lượng.
  • Giữ log tập trung để xử lý sự cố (ELK / EFK).

Kết luận

Cold deployments đơn giản nhưng có thời gian ngừng hoạt động cho người dùng. Ngược lại, hot deployments đảm bảo không có thời gian ngừng hoạt động, an toàn hơn cho môi trường sản xuất. Đối với microservices và Kubernetes, việc sử dụng rolling, blue-green, và canary deployments là tiêu chuẩn trong ngành.

💡 Mẹo: Kết hợp tự động hóa CI/CD với chiến lược triển khai phù hợp và theo dõi để đạt được sản xuất không có thời gian ngừng hoạt động.

FAQ

Cold Deployment có an toàn không?

Cold Deployment có thể an toàn nếu được thực hiện cẩn thận, nhưng thường có thời gian ngừng hoạt động.

Hot Deployment có thể gây ra vấn đề gì không?

Hot Deployment có thể dẫn đến rò rỉ bộ nhớ hoặc mất phiên nếu không được quản lý tốt.

Tại sao nên sử dụng CI/CD cho triển khai?

CI/CD giúp tự động hóa quy trình triển khai, giảm thiểu lỗi và tăng tốc độ phát triển.

Làm thế nào để rollback khi có lỗi?

Với hot deployment, bạn có thể dễ dàng quay lại phiên bản trước đó bằng các lệnh đã được cung cấp trong bài viết này.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào