Scaling Etsy Payments with Vitess: Part 2 – The "Seamless" Migration

Bài tóm tắt Etsy 2023 4. Điều chỉnh Độ khó: Nâng cao

Phần 2/3. Phần 1: Etsy 2023 · Phần 3: Etsy 2023.

Etsy · 2023 · 4. Điều chỉnh · Độ khó: Nâng cao — bài gốc

Bối cảnh

  • Dữ liệu thanh toán phải chia lại vào 40 shard mới, kiểm đủ, rồi chuyển đọc/ghi khỏi DB production đang chạy, trên đường thanh toán của cả Etsy.com.

Thay đổi chính

  • Staging dựng từ snapshot dữ liệu production (cả replica) cùng 40 shard đích: chạy chia dữ liệu, vứt đi, làm lại nhiều lần. Phát hiện trước các rào cản (ví dụ shard trên cột nullable), học dùng VDiff để kiểm nhất quán, chạy query thử qua Vitess để ước tải, tìm cách dùng secondary index (CreateLookupVindex, ExternalizeVindex).
  • VReplication / MoveTables: luồng replicate ghi từ nguồn sang đích (đúng shard); khi switch writes thì luồng đảo chiều từ đích về nguồn, nên switch lỗi thì quay lại được mà hai bên vẫn đồng bộ.
  • Một lần switch: trong vài phút query tăng 40 lần (khoảng 5.000 → 200.000/giây) trên cùng workload vì một query lọc theo cột không phải khoá shard thành scatter query tới cả 40 shard (đa số trả rỗng). Switch về, thêm secondary vindex (bảng lookup) để VTGate biết shard nào chứa dữ liệu; rà các query tương tự và thêm vindex sớm cho các đợt sau.
  • Bẫy: vindex do luồng VReplication duy trì chỉ externalize được sau khi switch writes. Lần switch có vindex, máy đích không chịu nổi tải nên switch về nguồn, làm hỏng vindex mới (CreateLookupVindex không còn chạy) → xoá bảng lookup, dựng lại, nâng cấu hình cụm đích, rồi switch + externalize + đi tiếp.
  • Kết quả: không gián đoạn, không downtime trong suốt các đợt migrate.

Vì sao

  • Với đường thanh toán, không có gì thay được môi trường giống production để thử đi thử lại; đường lùi (reverse replication) cho phép chấp nhận switch chưa hoàn hảo.

Bài học cho SWE

  • Dữ liệu từng cùng nằm một DB, khi shard theo khoá khác, biến query bình thường thành scatter; tải tăng theo số shard.
  • Kiểm tra ràng buộc thứ tự của công cụ (index chỉ dùng được sau khi switch) trước khi phải lùi giữa chừng.
  • Switch cần được coi là thao tác lặp lại được, không phải một lần duy nhất.

Liên quan