2. 18:15 12/08/2026
Chào bạn Phương Thảo,
Nguyên tắc nền tảng là expand rồi mới contract. Deployment phải cho phép code cũ và code mới cùng chạy an toàn trong một khoảng thời gian, vì web instance, worker, queue và cron không đổi phiên bản cùng lúc.
Một chu kỳ thường dùng:
1. Expand schema theo cách backward-compatible: thêm cột nullable/default an toàn, bảng/index mới hoặc feature flag; không xóa/đổi nghĩa cột ngay.
2. Deploy code có thể đọc cả dữ liệu cũ/mới, có fallback rõ và ghi song song nếu cần. Quan sát metric/error trước khi bật feature.
3. Backfill theo lô có checkpoint, giới hạn tải và idempotency; không mở transaction khổng lồ hoặc cập nhật toàn bảng trong giờ cao điểm.
4. Sau khi mọi consumer cũ đã bị loại bỏ và dữ liệu được xác minh, mới contract: ngừng dual-write, xóa cột/index/code cũ ở một release sau.
5. Migration cần versioning, owner, timeout, kế hoạch rollback; backup/restore không thay thế rollback logic cho migration phá vỡ tương thích.
Trên bảng lớn, hãy kiểm tra khả năng online DDL của phiên bản MySQL, lock behavior và thời gian chạy trong staging có dữ liệu gần thật. Điều quan trọng không phải deploy không có downtime trên slide, mà là mọi thành phần trong hệ thống có thể coexist và recover được khi migration chậm hoặc lỗi.
1