Tôi đồng ý với cách tiếp cận bập bênh hơn so với phương pháp lăn bạn đang tìm kiếm. Vấn đề là bạn kết thúc trong các tình huống mà cân bằng tải có thể ném người dùng qua lại giữa các phiên bản khác nhau của ứng dụng trong khi bạn đang chuyển đổi.
Các giải pháp mà chúng tôi đã đưa ra (trước khi tìm thấy SeeSaw, mà chúng tôi không sử dụng) là lấy một nửa của mongrels off line từ cân bằng tải. Tắt chúng đi. Cập nhật chúng. Bắt đầu chúng. Đặt những mongrels trở lại trực tuyến trong cân bằng tải và lấy nửa kia đi. Đóng nửa thứ hai xuống. Cập nhật nửa thứ hai. Bắt đầu chúng. Điều này giảm thiểu đáng kể thời gian mà bạn có hai phiên bản khác nhau của ứng dụng đang chạy đồng thời. Tôi đã viết một tập tin cửa sổ bat để làm điều này. (Triển khai trên Windows không được khuyến nghị, btw)
Điều quan trọng cần lưu ý là việc di chuyển cơ sở dữ liệu có thể làm cho toàn bộ phương pháp tiếp cận nguy hiểm một chút. Nếu bạn chỉ có các di chuyển phụ gia, bạn có thể chạy chúng bất cứ lúc nào trước khi triển khai. Nếu bạn đang xóa cột, bạn cần thực hiện sau khi triển khai. Nếu bạn đổi tên các cột, tốt hơn là chia nó thành một cột mới và sao chép dữ liệu vào trong đó di chuyển để chạy trước khi triển khai và một tập lệnh riêng biệt để loại bỏ cột cũ sau khi triển khai. Trên thực tế, có thể nguy hiểm khi sử dụng di chuyển thường xuyên của bạn trên cơ sở dữ liệu sản xuất nói chung nếu bạn không cố gắng tổ chức chúng. Tất cả điều này chỉ để thực hiện việc giao hàng thường xuyên hơn, do đó mỗi bản cập nhật đều có rủi ro thấp hơn và ít phức tạp hơn, nhưng đó là một chủ đề cho một phản ứng khác.
Cảm ơn matt, vâng, tôi đã không nghĩ đến nó, nhưng tôi chắc chắn sẽ sai về phía an toàn và hầu như bất kỳ di chuyển nào chỉ thực hiện một quá trình shutdown-migrate-startup hoàn chỉnh hơn –