AWS - DVA-C02

Các phương pháp deploy trong AWS Elastic Beanstalk

AWS Elastic Beanstalk cung cấp nhiều phương pháp triển khai (deployment) khác nhau, mỗi phương pháp đều có những ưu điểm và tình huống sử dụng riêng. Dưới đây là phân tích chi tiết về các phương pháp deploy trong Elastic Beanstalk:

1. All-at-once deployment

Cách thức hoạt động:

  • Tất cả các instance trong môi trường sẽ đồng thời ngừng phục vụ request
  • Các package triển khai mới được cài đặt trên tất cả các instance
  • Tất cả các instance được khởi động lại và trở lại hoạt động

Ưu điểm:

  • Nhanh nhất trong tất cả các phương pháp
  • Không tốn thêm chi phí cho các instance bổ sung

Nhược điểm:

  • Gây downtime trong quá trình triển khai
  • Rủi ro cao, nếu triển khai thất bại, toàn bộ ứng dụng sẽ offline
  • Không có rollback tự động

Phù hợp với:

  • Môi trường phát triển (development) và kiểm thử (testing)
  • Ứng dụng không yêu cầu zero-downtime
  • Triển khai các bản cập nhật nhỏ, ít rủi ro

2. Rolling deployment

Cách thức hoạt động:

  • Chia các instance thành các batch (lô)
  • Triển khai từng batch một, chỉ đưa một batch ra khỏi dịch vụ tại một thời điểm
  • Mỗi batch sẽ được cập nhật và kiểm tra sức khỏe trước khi chuyển sang batch tiếp theo

Ưu điểm:

  • Giảm thiểu downtime
  • Rủi ro thấp hơn so với all-at-once
  • Không tốn thêm chi phí cho instance bổ sung

Nhược điểm:

  • Trong quá trình triển khai, các phiên bản khác nhau của ứng dụng sẽ cùng hoạt động
  • Thời gian triển khai lâu hơn
  • Nếu triển khai thất bại, cần rollback thủ công
  • Giảm dung lượng trong quá trình triển khai

Phù hợp với:

  • Môi trường sản xuất (production) có thể chấp nhận được việc giảm dung lượng tạm thời
  • Ứng dụng có khả năng hoạt động đồng thời với nhiều phiên bản

3. Rolling with additional batch deployment

Cách thức hoạt động:

  • Tạo thêm một batch instance mới trước khi bắt đầu triển khai
  • Đảm bảo dung lượng không bị giảm trong quá trình triển khai
  • Sau khi triển khai xong, các instance bổ sung sẽ bị xóa

Ưu điểm:

  • Duy trì đầy đủ dung lượng trong quá trình triển khai
  • Giảm thiểu downtime
  • Rủi ro thấp hơn so với phương pháp rolling thông thường

Nhược điểm:

  • Tăng chi phí tạm thời do thêm instance mới
  • Các phiên bản khác nhau của ứng dụng vẫn cùng hoạt động
  • Nếu triển khai thất bại, cần rollback thủ công

Phù hợp với:

  • Môi trường sản xuất cần duy trì đầy đủ dung lượng
  • Ứng dụng có khả năng hoạt động đồng thời với nhiều phiên bản
  • Hệ thống có yêu cầu cao về tính sẵn sàng

4. Immutable deployment

Cách thức hoạt động:

  • Tạo một Auto Scaling Group (ASG) mới với các instance chạy phiên bản mới
  • Triển khai phiên bản mới trên tất cả các instance trong ASG mới
  • Khi các instance mới hoạt động bình thường, chúng được thêm vào môi trường và các instance cũ bị loại bỏ

Ưu điểm:

  • Không có downtime
  • Rủi ro thấp nhất – nếu triển khai thất bại, chỉ cần kết thúc ASG mới
  • Rollback nhanh chóng và đơn giản
  • Tránh được vấn đề về nhiều phiên bản cùng hoạt động

Nhược điểm:

  • Tốn thêm chi phí do cần duy trì hai bộ instance trong quá trình triển khai
  • Thời gian triển khai lâu hơn so với phương pháp all-at-once và rolling

Phù hợp với:

  • Môi trường sản xuất yêu cầu độ tin cậy cao
  • Ứng dụng quan trọng cần zero-downtime
  • Các bản cập nhật lớn hoặc có rủi ro cao

5. Blue/Green deployment (với lưu ý)

Elastic Beanstalk không trực tiếp hỗ trợ Blue/Green, nhưng có thể thực hiện bằng cách kết hợp với các dịch vụ khác như Route 53

Cách thức hoạt động:

  • Tạo một môi trường Elastic Beanstalk mới (Green) bên cạnh môi trường hiện tại (Blue)
  • Triển khai phiên bản mới trên môi trường Green
  • Kiểm tra và xác thực môi trường Green
  • Chuyển lưu lượng từ Blue sang Green (sử dụng swap URLs của Elastic Beanstalk hoặc điều hướng DNS)

Ưu điểm:

  • Không có downtime
  • Rủi ro cực thấp, rollback chỉ đơn giản là chuyển lại lưu lượng
  • Môi trường cũ vẫn hoạt động cho đến khi môi trường mới được xác nhận ổn định
  • Cho phép kiểm tra đầy đủ trước khi chuyển giao

Nhược điểm:

  • Chi phí cao nhất do phải duy trì hai môi trường đầy đủ
  • Cần quan tâm đến việc xử lý dữ liệu và trạng thái giữa các môi trường

Phù hợp với:

  • Các ứng dụng mission-critical, yêu cầu zero-downtime
  • Các triển khai phức tạp cần kiểm tra kỹ lưỡng trong môi trường thực tế
  • Tổ chức có ngân sách đủ lớn để duy trì nhiều môi trường

6. Traffic-splitting deployment

Cách thức hoạt động:

  • Triển khai phiên bản mới đến một môi trường kiểm tra tạm thời
  • Chuyển một phần nhỏ lưu lượng người dùng sang môi trường kiểm tra
  • Theo dõi hiệu suất và lỗi
  • Nếu mọi thứ ổn định, hoàn thành triển khai immutable cho tất cả lưu lượng

Ưu điểm:

  • Cho phép kiểm tra phiên bản mới với người dùng thật
  • Giới hạn tác động của các vấn đề tiềm ẩn
  • Tích hợp tốt với các phương pháp deployment khác

Nhược điểm:

  • Yêu cầu cấu hình phức tạp hơn
  • Chi phí cao hơn do cần duy trì môi trường kiểm tra
  • Cần giải quyết vấn đề về tính nhất quán của dữ liệu

Phù hợp với:

  • Ứng dụng có nhiều người dùng và cần kiểm tra thực tế
  • Tổ chức áp dụng phương pháp kiểm tra canary
  • Triển khai có rủi ro cao cần phương pháp thận trọng

Yếu tố cần cân nhắc khi lựa chọn phương pháp triển khai

  1. Yêu cầu về thời gian hoạt động: Nếu ứng dụng cần zero-downtime, tránh phương pháp all-at-once.
  2. Ngân sách: Các phương pháp như immutable và blue/green tốn kém hơn do cần thêm tài nguyên.
  3. Độ phức tạp của ứng dụng: Ứng dụng phức tạp có thể cần phương pháp an toàn hơn như immutable hoặc blue/green.
  4. Môi trường triển khai: Development, staging hay production? Mỗi môi trường có thể sử dụng phương pháp khác nhau.
  5. Chiến lược rollback: Một số phương pháp cho phép rollback nhanh hơn và dễ dàng hơn.
  6. Tính tương thích giữa các phiên bản: Nếu nhiều phiên bản không thể hoạt động đồng thời, nên chọn phương pháp immutable hoặc blue/green.

Cấu hình phương pháp triển khai

Có thể cấu hình phương pháp triển khai trong Elastic Beanstalk thông qua:

  • AWS Management Console: Điều hướng đến môi trường của bạn > Configuration > Updates and Deployments > Deployment preferences
  • AWS CLI: Sử dụng lệnh eb deploy với các tùy chọn phù hợp
  • Tệp cấu hình .ebextensions: Tạo tệp JSON hoặc YAML trong thư mục .ebextensions trong gói triển khai

Kết luận

AWS Elastic Beanstalk cung cấp nhiều lựa chọn triển khai phù hợp với các yêu cầu khác nhau về thời gian hoạt động, chi phí và rủi ro. Mỗi tổ chức cần đánh giá nhu cầu cụ thể của mình để chọn phương pháp triển khai tối ưu. Trong hầu hết các trường hợp, phương pháp immutable là sự cân bằng tốt giữa độ tin cậy, chi phí và độ phức tạp cho môi trường sản xuất, trong khi phương pháp all-at-once có thể đủ cho môi trường phát triển.

12 Views

Leave a Reply

Your email address will not be published. Required fields are marked *