

Lỗi mã nguồn làm sập hệ thống ngay khi vừa go-live? Để kiểm soát rủi ro, các doanh nghiệp thường áp dụng chiến lược Canary như một tấm lưới bảo hiểm cho quy trình CI/CD. Vậy Canary Deployment là gì và cơ chế hoạt động của nó giúp duy trì sự ổn định như thế nào? Hãy cùng VNPT Cloud tìm hiểu qua bài viết dưới đây.
Canary deployment là một chiến lược triển khai trong đó hệ thống được vận hành song song trên hai môi trường: một môi trường đang xử lý lưu lượng truy cập thực tế và một môi trường còn lại chứa phiên bản mã đã được cập nhật nhưng chưa nhận traffic. Thay vì chuyển toàn bộ người dùng sang phiên bản mới cùng một lúc, lưu lượng sẽ được phân bổ dần từ phiên bản cũ sang phiên bản mới.
Quá trình này thường bắt đầu với một tỷ lệ nhỏ, chẳng hạn 1% lưu lượng thực tế, sau đó tăng dần lên 10%, 25% và tiếp tục mở rộng cho đến khi toàn bộ traffic được chuyển sang phiên bản mới. Cách triển khai này giúp doanh nghiệp kiểm thử phần mềm ngay trong môi trường production, đồng thời thu thập phản hồi thực tế, phát hiện lỗi sớm và đánh giá độ ổn định của bản cập nhật.
Thuật ngữ “canary” bắt nguồn từ cách nói “canary in a coal mine” - hình ảnh chim hoàng yến trong hầm mỏ dùng để cảnh báo sớm nguy cơ khí độc. Khi con chim có dấu hiệu bất ổn, thợ mỏ sẽ biết để sơ tán kịp thời trước khi thảm họa xảy ra. Tương tự, trong triển khai phần mềm, nếu phiên bản mới gặp sự cố, lưu lượng truy cập có thể nhanh chóng được chuyển lại về phiên bản ổn định ban đầu. Nhờ đó, canary deployment giúp giảm rủi ro khi phát hành phần mềm mới.

Canary deployment là phương pháp triển khai trong đó hai phiên bản của ứng dụng cùng chạy song song trong một khoảng thời gian. Phiên bản cũ được xem là stable (phiên bản ổn định), còn phiên bản mới là canary (phiên bản thử nghiệm). Có hai cách phổ biến để thực hiện mô hình này, gồm rolling deployment (triển khai cuốn chiếu) và side-by-side deployment (triển khai song song trên môi trường tách biệt).
Với rolling deployment, bản cập nhật được triển khai theo từng đợt nhỏ trên một số máy chủ, trong khi các máy còn lại vẫn tiếp tục chạy phiên bản ổn định. Khi phiên bản canary bắt đầu hoạt động trên một phần hạ tầng, chỉ một nhóm nhỏ người dùng được tiếp cận bản mới. Trong suốt quá trình này, hệ thống sẽ được theo dõi để phát hiện lỗi, vấn đề hiệu năng và phản hồi từ người dùng.
Nếu phiên bản mới hoạt động đúng như kỳ vọng, quá trình triển khai sẽ tiếp tục được mở rộng trên các máy chủ còn lại cho đến khi toàn bộ hệ thống được cập nhật. Ngược lại, nếu phát sinh sự cố, các máy đã nâng cấp có thể được rollback về trạng thái ban đầu. Đây là cách triển khai khá trực quan và thường được dùng khi muốn cập nhật dần trên hạ tầng hiện có.
Với side-by-side deployment, thay vì cập nhật từng máy theo từng giai đoạn, một môi trường mới giống hệt môi trường hiện tại sẽ được tạo ra để cài đặt phiên bản canary.
Giả sử ứng dụng đang chạy trên nhiều máy hoặc container, cùng với một số dịch vụ và một cơ sở dữ liệu.
Để triển khai, các tài nguyên phần cứng sẽ được nhân bản và các bản cập nhật sẽ được cài đặt lên môi trường mới. Khi phiên bản canary đã chạy trên môi trường này, nó sẽ được hiển thị cho một phần người dùng. Việc này thường được thực hiện thông qua router (bộ định tuyến), load balancer (bộ cân bằng tải), reverse proxy (proxy ngược) hoặc một số logic nghiệp vụ khác trong ứng dụng.
Tương tự rolling deployment, phiên bản canary sẽ được theo dõi trong khi ngày càng có nhiều người dùng được chuyển dần khỏi control version (phiên bản đối chứng, tức phiên bản cũ đang làm mốc so sánh). Quá trình này tiếp tục cho đến khi hoặc phát hiện ra sự cố, hoặc toàn bộ người dùng đều đã được chuyển sang phiên bản canary.
Khi quá trình triển khai hoàn tất, control environment (môi trường đối chứng, tức môi trường chạy phiên bản cũ) sẽ được gỡ bỏ để giải phóng tài nguyên. Lúc này, phiên bản canary sẽ trở thành phiên bản stable mới.

Với chiến lược Canary, phiên bản ứng dụng mới sẽ được triển khai một cách dần dần, ban đầu chỉ tiếp nhận một tập hợp nhỏ lưu lượng truy cập thực tế. Chỉ một số lượng ít người dùng thực được trải nghiệm phiên bản mới, trong khi những người còn lại vẫn tiếp tục sử dụng phiên bản hiện tại.
Nhóm người dùng nhỏ này đóng vai trò như một hệ thống cảnh báo sớm cho các vấn đề tiềm ẩn trong phiên bản mới. Khi mức độ tin cậy tăng lên, phiên bản Canary sẽ được mở rộng quy mô và cho phép nhiều người dùng tiếp cận hơn. Cuối cùng, toàn bộ lưu lượng truy cập thực tế sẽ được chuyển sang phiên bản mới, và từ đó, phiên bản Canary chính thức trở thành phiên bản vận hành (production) mới.
Cả canary deployment và blue/green deployment đều vận hành song song hai phiên bản khác nhau của ứng dụng. Điểm khác biệt chính là blue/green deployment chỉ cho người dùng thấy một phiên bản tại một thời điểm, trong khi canary deployment cho cả hai phiên bản chạy song song và dần dần mở rộng mức độ tiếp cận của phiên bản canary.
Blue/green deployment phù hợp hơn canary deployment trong các đợt triển khai nhỏ, ít rủi ro, cần phát hành nhanh và thường xuyên hơn.
Blue/green deployment là chiến lược triển khai giúp cập nhật ứng dụng production mà không gây downtime bằng cách duy trì hai môi trường giống hệt nhau phía sau load balancer hoặc service mesh. Một môi trường đang phục vụ người dùng. Môi trường còn lại được triển khai và kiểm thử phiên bản mới. Khi sẵn sàng, toàn bộ lưu lượng sẽ được chuyển sang môi trường mới. Môi trường cũ trở thành phương án dự phòng để rollback nếu có sự cố.

Canary deployment được áp dụng không chỉ để giảm rủi ro khi phát hành phiên bản mới, mà còn mang lại nhiều lợi ích rõ rệt trong quá trình vận hành hệ thống.
Dù mang lại nhiều lợi ích trong kiểm soát rủi ro khi phát hành phiên bản mới, canary deployment vẫn tồn tại không ít hạn chế. Dưới đây là những nhược điểm thường gặp của mô hình triển khai này:
Tóm lại, Canary Deployment là gì không chỉ là câu hỏi về định nghĩa, mà là lời giải cho bài toán cân bằng giữa tốc độ phát triển và sự ổn định của hệ thống. Bằng cách kiểm soát lưu lượng truy cập thực tế theo từng giai đoạn, doanh nghiệp có thể tự tin triển khai các tính năng mới mà không lo ngại rủi ro sập hệ thống hay gián đoạn dịch vụ. Đây chính là bước tiến quan trọng trong việc hiện đại hóa quy trình CI/CD và nâng cao trải nghiệm người dùng cuối.
