Trong thời đại mà mọi công ty phần mềm đều muốn sản phẩm của mình đến với người dùng nhanh nhất có thể, CI/CD đã trở thành một phần thiết yếu. Đi cùng với đó là mục tiêu dịch vụ không bị gián đoạn (zero downtime) mỗi khi triển khai sản phẩm. Bài viết này giải thích các chiến lược deployment để đạt được mục tiêu đó, cùng với ưu nhược điểm của chúng.
Blue-Green deployment
Ý tưởng ở đây là có hai môi trường độc lập giống hệt nhau và có bộ cân bằng tải (load balancer) trước chúng. Load balancer sẽ chuyển lưu lượng truy cập đến môi trường Blue, là môi trường production hiện tại. Các thay đổi mới được deploy đến môi trường Green và việc testing được thực hiện độc lập. Sau khi đã ok với kết quả test, load balancer sẽ được route đến môi trường Green.
Ưu điểm:
- Zero downtime vì khi load balancer được chuyển đổi, lưu lượng sẽ được chuyển đến code base mới và người dùng sẽ không nhận thấy bất kỳ gián đoạn nào.
- Tests được thực hiện trên môi trường production, nhưng cần thận trọng vì việc này có thể tạo ra dữ liệu rác trên production.
- Dễ dàng rollback lại môi trường trước đó trong trường hợp có vấn đề.
Nhược điểm:
- Khi chuyển đổi traffic, các transactions & sessions đang diễn ra có thể bị mất.
- Có thể gây ra vấn đề tương thích dữ liệu vì cả phiên bản cũ và mới đều sử dụng cùng một database. Nếu có thay đổi ở database không được cover ở phiên bản code cũ hơn có thể gây ra lỗi.
Canary deployment
Release tính năng mới cho một tỷ lệ nhỏ users, sau đó release cho những users khác theo từng bước. Có thể dùng cách này để biết phản ứng của người dùng đối với tính năng mới, và dựa vào đó mới quyết định xem có release đến tất cả users hay không. Có thể cần sử dụng feature toggle/flag.
Ưu điểm:
- Zero downtime.
- Phản hồi của người dùng có thể được thu thập trước khi release tính năng mới cho mọi người.
Nhược điểm:
- Cũng có thể gặp vấn đề tương thích dữ liệu.
Rolling deployment
Chiến lược rolling deployment là thay thế dần các instance đang chạy của ứng dụng bằng các instance mới. Các instance cũ dần được loại bỏ sau khi instance mới được deploy.
Ưu điểm:
- Zero downtime
Nhược điểm:
- Cũng gặp vấn đề tương thích dữ liệu.
- Có yêu cầu số lượng instance nhiều hơn.
Kết luận
Những chiến lược deployment kể trên đều đáp ứng được zero downtime khi release tính năng mới lên production. Có thể quyết định phương pháp tốt nhất dựa trên tính chất của sản phẩm, hoặc sử dụng kết hợp các phương pháp.
Tìm hiểu thêm các chiến lược triển khai phần mềm khác: https://ant.ncc.asia/cac-chien-luoc-trien-khai-phan-mem/