Triển khai blue-green trên VPS Singapore: health check, chuyển traffic và rollback

Lưu ý: Các lệnh và chỉ số trong bài để tham khảo, cần thử trong môi trường phù hợp và xác minh tính năng thực tế theo gói dịch vụ. Không sử dụng để truy cập hệ thống không được phép.

Deploy ứng dụng mới trên VPS Singapore có thể gây gián đoạn nếu thay code rồi restart trực tiếp tiến trình đang phục vụ người dùng. Blue-green deployment là cách duy trì hai phiên bản ứng dụng tách biệt: một phiên bản đang nhận traffic và phiên bản còn lại chờ nghiệm thu. Khi phiên bản mới vượt qua kiểm tra, lớp reverse proxy mới chuyển request sang nó.

Mô hình này có thể chạy trên một VPS với hai cổng ứng dụng, nhưng hai phiên bản cùng dùng tài nguyên của một máy nên không tạo ra tính sẵn sàng cao ở cấp hạ tầng. Hãy phân biệt giảm thời gian gián đoạn khi deploy với khả năng chịu lỗi khi VPS mất kết nối.

Chuẩn bị hai phiên bản chạy song song

Ví dụ phiên bản blue dùng 127.0.0.1:3001, phiên bản green dùng 127.0.0.1:3002. Cả hai chỉ lắng nghe trên loopback, còn Nginx công khai HTTPS. Không cần công khai cổng 3001 và 3002 ra Internet. Nếu ứng dụng cần Redis, database hoặc file upload, hãy xác định rõ tài nguyên nào dùng chung và tài nguyên nào riêng trước khi chạy hai phiên bản.

Một endpoint /health nên kiểm tra ứng dụng sẵn sàng phục vụ request cơ bản mà không làm thay đổi dữ liệu. Nếu health check luôn trả 200 dù database bị ngắt và mọi endpoint nghiệp vụ đều lỗi, tín hiệu sẽ sai. Ngược lại, health check cũng không nên quá phức tạp đến mức tạo tải nặng liên tục.

Cách tổ chức Nginx và chuyển traffic

Nginx có thể proxy tới một upstream được chọn. Bạn cập nhật upstream từ cổng blue sang green, chạy nginx -t rồi reload. Trước khi chuyển, thử truy cập phiên bản green trên địa chỉ nội bộ hoặc hostname staging có kiểm soát. Một lần reload thành công chỉ xác nhận cấu hình hợp lệ, không xác nhận tất cả chức năng của ứng dụng.

Nếu traffic lớn hoặc request dài, cần nghiên cứu cơ chế draining và phiên đăng nhập: người dùng có thể đang tải tệp, giữ WebSocket hoặc thực hiện giao dịch. Không nên kill blue ngay sau khi chuyển một giây. Ghi lại thời gian đổi cấu hình, phiên bản commit và điểm rollback để đội vận hành khôi phục có hệ thống.

Database migration là phần khó nhất

Blue và green thường truy cập cùng database. Nếu phiên bản green thay cấu trúc bảng theo cách blue không hiểu, rollback code sẽ không còn an toàn. Một chiến lược phổ biến là expand–migrate–contract: thêm trường mới theo cách tương thích, chuyển dữ liệu, cập nhật mã ứng dụng rồi chỉ loại bỏ cấu trúc cũ ở một release sau.

Mỗi migration cần sao lưu thích hợp và kiểm tra tác động locking hoặc thời gian chạy. Không dùng blue-green làm lý do bỏ thử restore backup. Nếu release chứa thay đổi dữ liệu không thể quay ngược, kế hoạch xử lý phải bao gồm cả phương án sửa dữ liệu hoặc tiến lên bản vá mới.

Điều kiện quyết định chuyển và quay lui

Trước cutover, yêu cầu test API trọng tâm, các thao tác ghi giả lập và quan sát log. Sau cutover, theo dõi tỷ lệ 5xx, p95 latency, độ bão hòa CPU/RAM và số lỗi nghiệp vụ. Nếu lỗi tăng bất thường, chuyển lại blue trong thời hạn đã định, đồng thời giữ bản green để điều tra thay vì xóa log.

Checklist rất ngắn nhưng thiết thực: có snapshot cấu hình; có danh sách health endpoint; có thời hạn quan sát; có người chịu trách nhiệm quyết định; có đường rollback; có lịch loại bỏ phiên bản cũ. Với VPS chỉ đủ RAM cho một tiến trình, cần giảm phạm vi hoặc dùng triển khai khác, không ép chạy song song dẫn đến OOM.

Vị trí Singapore ảnh hưởng gì đến quá trình deploy?

Khi đội vận hành ở Việt Nam, upload image/container và đồng bộ artifact xuyên biên giới có thể chịu dao động tuyến mạng. Lưu artifact tại vị trí phù hợp hoặc dùng registry đáng tin cậy giúp release dễ dự báo hơn. Tuy nhiên cần đo thực tế thay vì giả định rằng chỉ đổi vị trí VPS là triển khai nhanh hơn.

Danh sách VPS Singapore giúp đối chiếu dung lượng RAM và lưu trữ khi bạn cần chạy hai phiên bản tạm thời. Tính khả thi blue-green phụ thuộc ứng dụng, tài nguyên còn trống và phương án rollback, không phải tính năng đi kèm mặc định của một gói VPS.

Đọc tiếp trong cùng chủ đề

Xem thêm: Cấu hình Nginx reverse proxy trên VPS Singapore cho API: luồng request và log. Đối chiếu nhu cầu thực tế với trang VPS Singapore và thông tin gói đang bán.