BookKeeper: Yahoo's Distributed Log Storage

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

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

Bối cảnh

  • BookKeeper do Yahoo tạo năm 2009: kho log tuần tự nhân bản, scale ngang trên phần cứng phổ thông; mở cho cộng đồng năm 2011, thành dự án cấp cao của Apache năm 2015.
  • Ban đầu làm write-ahead log cho HDFS, sau dùng cho hệ messaging Hedwig, rồi làm lớp lưu bền cho Cloud Messaging Service (CMS) của Yahoo.
  • Theo Yahoo, log là mẫu chung (journal của DB và file system, queue bền); ở quy mô lớn phải chịu hàng nghìn log với hàng triệu transaction mỗi giây mà không mất throughput hay latency.

Kiến trúc

  • Ứng dụng làm việc với ledger (tạo, mở, thêm entry, đọc entry). Entry được nhân bản lên một số tối thiểu bookie theo quorum, và rải (stripe) qua các bookie để tăng throughput. BookKeeper tự lo HA khi bookie hỏng hay mất kết nối; metadata của bookie và ledger nằm trong ZooKeeper.
  • Trên mỗi bookie: entry ghi đồng bộ vào journal tuần tự (trên SSD) để bền, rồi vào entry log (đệm qua file system cache); hỏng thì khôi phục entry log từ journal. Có index để tra entry nhanh khi đọc.
  • Ba điều Yahoo cần: scale ngang cả I/O lẫn dung lượng khi thêm máy, throughput cao nhờ I/O tuần tự, mọi reader thấy cùng một log kể cả khi có lỗi.

Ứng dụng: Cloud Messaging Service (2015)

  • Messaging đa tenant cho hơn 60 ứng dụng (thông báo mobile, Weather, nền tảng quảng cáo Gemini, trang chủ, kho Sherpa...), có hai chế độ best-effort và bảo đảm giao.
  • BookKeeper lưu message như một queue tin cậy và giữ vị trí của từng receiver để giao ít nhất một lần, nên ứng dụng không phải tự giữ vị trí.
  • Quy mô: hơn 10 data center replicate dạng full mesh; khoảng 10 tỷ message/ngày, dự kiến 100 tỷ cuối 2015; hơn 250 server, dự kiến hơn 1.500; từ 25.000 lên một triệu queue.
  • Việc tiếp theo: throughput mỗi bookie gấp 10 lần, số ledger mỗi bookie gấp 5, cô lập tenant khi đọc nặng, latency publish dưới 1 ms.

Bài học cho SWE

Liên quan