DataHub: A generalized metadata search & discovery tool

Bài tóm tắt LinkedIn 2019 4. Điều chỉnh Độ khó: Trung bình

LinkedIn · 2019 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc

Bối cảnh

  • WhereHows (mở mã nguồn 2016): kho metadata trung tâm cho dataset (schema, owner, lineage, job) kèm search. Khi mở rộng sang nhiều loại metadata, LinkedIn rút ra năm bài học:
    1. Push tốt hơn pull: đội crawler theo từng loại nguồn do một team trung tâm giữ thành ác mộng; để nguồn tự đẩy qua API hoặc message thì tươi hơn.
    2. Tổng quát tốt hơn chuyên biệt: model metadata gắn cứng làm một thay đổi nhỏ kéo theo sửa cả stack.
    3. Online quan trọng như offline: dump vào Hadoop chưa đủ; kiểm soát truy cập, xử lý quyền riêng tư cần query metadata mới nhất.
    4. Quan hệ là công dân hạng nhất (lineage, owner).
    5. Nhiều tâm: không chỉ dataset, còn người, team, metric, feature AI, dashboard...

Thay đổi chính

  • Khoảng 2018 viết lại từ đầu thành DataHub: tách monolith WhereHows thành UI module hoá (Ember) và backend metadata tổng quát.
  • Mô hình hoá bằng Pegasus (ngôn ngữ schema của Rest.li) với phần mở rộng cho quan hệ. Entity có URN; metadata gắn vào entity thành các aspect (Ownership, Profile...) do các team khác nhau sở hữu và tiến hoá độc lập.
  • Ingest hai đường: API Rest.li (cần đọc-sau-ghi) hoặc Kafka với Metadata Change Event (schema Avro sinh tự động từ Pegasus; mọi thay đổi schema bắt buộc tương thích ngược, kiểm lúc build). LinkedIn chủ yếu dùng Kafka; một job Samza đơn giản chuyển MCE thành call API. Hàng triệu MCE mỗi ngày.
  • Phục vụ bằng nhiều kho: Espresso (document), Galene (full-text), graph DB (quan hệ, join), sau các DAO chung để thay được kho (và mở mã nguồn với kho phổ biến).
  • CDC chuẩn hoá: mọi ghi qua DAO phát Metadata Audit Event (ảnh trước/sau của aspect); job Samza xử lý MAE dựng index search và graph, partition theo URN để giữ thứ tự từng entity.
  • Năm 2019: 19 loại entity, hàng chục triệu bản ghi; hơn 1.500 nhân viên dùng mỗi tuần; đồ thị metadata gồm hơn 1 triệu dataset, 23 hệ lưu trữ, 25.000 metric, hơn 500 feature AI.

Vì sao

  • Metadata cũng là dữ liệu và đến từ nhiều nơi; một team trung tâm không theo kịp nếu phải tự kéo và tự định nghĩa mọi loại.

Bài học cho SWE

  • Kho trung tâm nên nhận đẩy từ nguồn qua schema có hợp đồng, không tự đi kéo.
  • Chia một entity thành các aspect có chủ riêng cho phép nhiều team cùng mở rộng mô hình.
  • Mọi ghi phát change event → index search và graph là dẫn xuất, dựng lại được.

Liên quan