Authorization at LinkedIn's Scale

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

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

Bối cảnh

  • Phân quyền giữa các service (không phải giữa user và sản phẩm): một microservice chỉ được đọc dữ liệu khi có lý do nghiệp vụ, để dữ liệu thành viên không lan rộng và để giới hạn thiệt hại nếu một service nội bộ bị chiếm.
  • Mô hình là ACL đơn giản: (service, thao tác, ALLOW/DENY) trên từng resource Rest.li. Cái khó là quy mô (2019): hơn 700 microservice, tổng cộng hàng chục triệu call mỗi giây, hàng trăm nghìn resource có ACL, và mỗi service hay đường gọi mới lại cần ACL mới.
  • Ba yêu cầu: kiểm tra nhanh, đẩy thay đổi ACL nhanh, quản lý được số lượng ACL lớn.

Thay đổi chính

  • Client phân quyền chạy trong mọi service, gắn sẵn vào khung service chuẩn nên service mới có mặc định. Không được tốn thêm một network call cho mỗi lần check, nên ACL liên quan được giữ trong bộ nhớ của service; mỗi service chỉ cần luật của chính nó nên dữ liệu đủ nhỏ.
  • Làm mới định kỳ ở nền: client gọi ACL server theo chu kỳ. Chu kỳ ngắn thì thay đổi có hiệu lực nhanh nhưng tải tăng.
  • Lưu trữ: ACL trong Espresso, Couchbase làm cache phía server; khi ACL bị sửa, CDC qua Brooklin báo để xoá cache.
  • Log mọi lần check bất đồng bộ qua Kafka để debug, phân tích traffic và phục vụ audit; số liệu đẩy lên inGraphs.
  • Thực thi phân tán, dữ liệu tập trung: ACL server có REST API; người dùng sửa ACL qua Nuage hoặc CLI. Tập trung cho phép áp chính sách mới hàng loạt, ví dụ khi có sự cố production, engineer được cấp quyền tạm thời vào mọi resource cần debug, phải qua duyệt và tự hết hạn sau thời gian ngắn.
  • Hướng tới: chuyển từ kéo định kỳ sang đẩy để thay đổi đến nhanh hơn và bớt traffic giữa client và server.

Vì sao

  • Ở hàng chục triệu call mỗi giây, một lần check qua mạng sẽ cộng dồn độ trễ trên toàn site. Đánh đổi là độ trễ lan truyền thay đổi ACL bằng chu kỳ làm mới.

Bài học cho SWE

  • Quyết định phân quyền trên đường nóng phải tính bằng dữ liệu đã có trong bộ nhớ; nguồn sự thật tập trung, điểm thực thi phân tán.
  • Đưa client phân quyền vào khung service mặc định thì phủ được toàn fleet mà không phải đi thuyết phục từng team.
  • Quyền khẩn cấp nên là cơ chế có duyệt và tự hết hạn, không phải cấp tay rồi quên thu hồi.

Liên quan