Dual-write vào cả cũ lẫn mới, backfill lịch sử ở nền, dùng CDC để bắt kịp phần đuôi, kiểm chứng bằng shadow read, rồi lật read một cách atomic — với đường rollback ở mọi bước. Bạn không bao giờ tắt app; chạy song song hai database cho tới khi cái mới chứng minh được là giống hệt, rồi mới cutover.
Kiến trúc
text
┌── write ──▶ OLD DB (source of truth) ──CDC (Debezium)──┐
App ───┤ ▼
└── write ──▶ NEW DB ◀──── backfill job (historical rows)
│
shadow reads (compare OLD vs NEW) ─▶ diff metrics ─▶ atomic cutover ─▶ NEW is truth
(flip flag; rollback = flip back)
