GRIT: a Protocol for Distributed Transactions across Microservices

Bài tóm tắt eBay 2019 3. Quy mô lớn Độ khó: Nâng cao

eBay · 2019 · 3. Quy mô lớn · Độ khó: Nâng cao — bài gốc

Bài giới thiệu một protocol nghiên cứu (paper ICDE 2019) và một hiện thực cho kho graph. Không nói về mức độ dùng trong production của eBay.

Bối cảnh

  • Trong microservices, một ứng dụng gọi nhiều service do nhiều team viết, mỗi service dùng DB riêng. Vẫn có nhu cầu thật về giao dịch ACID xuyên service.
  • 2PC là lựa chọn duy nhất không đòi ứng dụng làm thêm gì, nhưng không hợp với nền tảng scale-out: đường đi dài qua nhiều bên tham gia, và giữ khoá suốt các pha. Cách dùng transaction log do ứng dụng tự thực thi (saga) thì đẩy độ phức tạp sang ứng dụng.

Thay đổi chính: protocol GRIT

Kết hợp optimistic concurrency control (OCC), 2PC và ý tưởng deterministic database.

  • Thành phần:
    • GTM/GTL: quản lý và log giao dịch toàn cục; thứ tự trong GTL quyết định thứ tự tuần tự hoá giữa các giao dịch toàn cục;
    • DBTM/DBTL: quản lý và log giao dịch của từng DB; DBTM kiểm tra xung đột và ra quyết định commit cục bộ;
    • LogPlayer: áp log xuống storage theo thứ tự.
  • Ba pha:
    1. thực thi lạc quan: DB service ghi lại read-set và write-set, chưa sửa dữ liệu;
    2. commit logic: mỗi DBTM kiểm tra xung đột (OCC) và ra quyết định cục bộ; GTM gom lại thành quyết định toàn cục. Giao dịch coi như đã commit khi write-set được ghi bền vào log;
    3. áp vật lý: LogPlayer áp log xuống storage bất đồng bộ.
  • Không có khoá bi quan trong lúc chạy hay commit, và không phải chờ commit vật lý. Theo eBay, hợp với giao dịch ít xung đột.
  • Hiện thực cho một DB (NuGraphStore, backend cho JanusGraph): plugin lưu trữ ghi lại read-set (cặp key và LSN) và write-set; DBTM kiểm tra OCC; LogStore được nhân bản đóng vai WAL; LogPlayer áp vào storage; storage hỗ trợ snapshot theo LSN; triển khai trên hai AZ.

Bài học cho SWE

  • Hai trường phái giao dịch xuyên service: hạ tầng lo (2PC, GRIT) hay ứng dụng lo (saga, TCC, bù trừ như Mercari, Mercari 2019). Hạ tầng lo thì ứng dụng đơn giản nhưng cần một tầng điều phối chung (Giao dịch phân tán và nhất quán xuyên service).
  • Tách quyết định commit (nhanh, trên log) khỏi áp dữ liệu (chậm, bất đồng bộ), giống cách replication áp log.
  • OCC thắng khi xung đột hiếm; với điểm nóng (hot row) thì kém, như bài toán tồn kho ở Alibaba 2019.

Liên quan