Search Federation Architecture at LinkedIn

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

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

Bối cảnh

  • LinkedIn có nhiều "search backend" theo use case (People, Job...). Tầng federation ở giữa làm ba việc: mở rộng query (query understanding, spell check), fan-out tới các backend, rồi "blend" kết quả.
  • Ba mid-tier lần lượt ra đời: federated-search-rest (2012), typeahead-rest (Q1/2014), seas-federated-search (Q2/2014).
  • Đầu 2015, team xác định ba vấn đề:
    • search và typeahead có logic gần giống nhau nhưng viết theo hai kiểu, nên thêm một tính năng là sửa và deploy nhiều service;
    • thiết kế dựa trên kế thừa làm các vertical dính nhau, đầy if-else;
    • test coverage thấp, không service nào deploy được hằng ngày.
  • Quy mô: khoảng 700 triệu lượt search mỗi ngày; năm 2017 có hơn 110 người đóng góp code.

Thay đổi chính

  • Gộp service: dồn hai mid-tier cũ về một mid-tier federation mới; mọi truy cập backend đều đi qua đây.
  • Cô lập code theo vertical bằng workflow framework (SeaS, sau là ReMix): mỗi use case là một workflow ghép từ các operator dùng chung, không còn if-else.
  • Làm theo từng đợt:
    • Q4/2015–Q2/2016: chuyển hơn 40 use case sang workflow;
    • 2016 → Q1/2017: gộp typeahead, QPS của mid-tier mới giảm từ 16K xuống 8K, không có sự cố;
    • 2017: gộp search, dành một phần ba nhân lực trong ba quý.
  • Parity check: một thư viện so kết quả luồng cũ và mới trước khi A/B test. 95% kết quả chính trùng khớp; 5% lệch do nâng cấp spell check và query tagging. Ramp 5% member, p90 latency cải thiện 3%.

Vì sao (theo LinkedIn)

Lợi ích họ nêu: gom logic chung để tái sử dụng, dễ dùng hơn (không phải sửa và deploy nhiều service), cô lập vertical, iterate nhanh. Coverage lên 87% và phần lớn service deploy được hằng ngày. Mặt trái họ tự nhận: seas-federated-search giờ là một service monolith ôm nhiều vertical, nên một vertical lỗi có thể chặn release hoặc làm chậm cả hệ. Đây là việc cần làm tiếp.

Bài học cho SWE

  • Không phải lúc nào cũng tách: ở đây gộp service mới giải được trùng lặp. Đổi lại, cô lập lỗi lại thành bài toán mới.
  • Migration logic nghiệp vụ cần parity check tự động giữa cũ và mới trước khi đưa cho user, cùng tinh thần shadow/parallel run (Zalando 2021).
  • Cùng thời kỳ, LinkedIn chọn giữ monolith API và chia cụm (LinkedIn 2017).

Liên quan