Order management in Mercari Global Marketplace

Bài tóm tắt Mercari 2025 3. Quy mô lớn Độ khó: Trung bình

Mercari · 2025 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Một bài trong series Global App (ngoài sheet). Bối cảnh: Mercari 2025.

Bối cảnh

  • Hệ quản lý đơn hàng của Mercari Nhật trưởng thành nhưng khó mở rộng cho thị trường toàn cầu: một mẫu chuyển trạng thái duy nhất gắn với một luồng nghiệp vụ (thêm/bớt bước ảnh hưởng nhiều phần hệ thống), và nhất quán giữa các tài nguyên lõi dựa vào transaction DB dùng chung. Đội chọn xây mới thay vì sửa.

Thay đổi chính

  • Lifecycle theo từng mặt hàng: mỗi item trong đơn tham chiếu một lifecycle định nghĩa các chuyển trạng thái hợp lệ; loại giao dịch mới chỉ cần định nghĩa lifecycle mới; các item trong cùng đơn đi theo lifecycle khác nhau; kiểm tra chuyển trạng thái ở mức lifecycle.
  • Saga có điều phối (orchestration): ví dụ đặt đơn xuyên biên giới: kiểm tra đơn → trừ coupon (module promotion) → thanh toán qua Merpay → ghi đơn → yêu cầu đối tác mua hộ. Bước nào lỗi thì engine chạy giao dịch bù cho các bước trước (coupon được trả lại), nhất quán cuối cùng mà không cần khoá phân tán.
    • Saga thay vì TCC vì TCC bắt mọi module tham gia viết ba API Try/Confirm/Cancel; TCC chỉ xét từng trường hợp cho thao tác khó hoàn tác.
    • Orchestration thay vì choreography vì có một điểm nhìn toàn cục, dễ làm, dễ debug.
    • Engine là Magician, công cụ nội bộ do Merpay viết (workflow saga, retry, worker bất đồng bộ), đã chạy các luồng thanh toán của Merpay và Mercoin.
  • Checkout và thanh toán dùng lại giải pháp của Merpay (UI checkout theo "element", ẩn nhà cung cấp thanh toán thật), thanh toán là một bước trong saga.
  • Hiện mới có luồng giao dịch xuyên biên giới cơ bản (2025).

Vì sao

  • Khi các module có DB riêng (không có transaction xuyên module, xem Mercari 2025), nhất quán phải chuyển từ transaction DB sang điều phối có bù trừ.

Bài học cho SWE

  • Mô hình hoá trạng thái đơn hàng thành dữ liệu (lifecycle) thay vì code cứng cho một luồng, để thêm loại giao dịch không đụng luồng cũ.
  • Saga + điều phối tập trung là mặc định hợp lý; dùng lại engine đã chạy production cho thanh toán thay vì tự viết.

Liên quan