Why We Switched Our Data Orchestration Service
Bài tóm tắt Spotify 2022 3. Quy mô lớn Độ khó: Dễ
Spotify · 2022 · 3. Quy mô lớn · Độ khó: Dễ — bài gốc
Bối cảnh
- Spotify chạy 20.000 pipeline batch mỗi ngày, định nghĩa trong hơn 1.000 repo, của hơn 300 team (2022). Đa số dựa vào Luigi (Python) và Flo (Java): workflow là các task phụ thuộc đệ quy, đóng gói cả vào một image Docker, Styx lập lịch và chạy trên GKE; đồ thị phụ thuộc chỉ được khám phá lúc chạy.
- Vấn đề của mô hình thư viện:
- Bảo trì hai thư viện cùng chức năng.
- Phải đẩy bản cập nhật tới mọi user, mà user không nâng phiên bản: khó đưa bản sửa và instrumentation mới tới hơn 1.000 repo; phiên bản phân mảnh.
- Container workflow là hộp đen với nền tảng: chỉ biết đồ thị task và upstream bị chặn sau khi chạy; một phần thời gian cụm GKE bị tốn cho việc poll phụ thuộc còn thiếu.
Thay đổi chính
- Từ 2019, mục tiêu: nâng cấp không ma sát (đẩy nhiều chức năng nhất có thể xuống nền tảng để tự động áp cho mọi người) và mở đường cho tự động hoá (tự backfill phía sau, hành động theo event, huỷ khi có alert, báo consumer khi workflow trễ/hỏng), mà cần nhìn thấy task và workflow.
- Từ thư viện sang dịch vụ: điều phối do một dịch vụ được quản lý làm; code nghiệp vụ chạy trong môi trường nền tảng kiểm soát; user định nghĩa workflow bằng SDK mỏng do nền tảng phát hành.
- Tiêu chí chọn: công migrate, làm mới hay dùng sản phẩm có sẵn, gánh bảo trì, khả năng mở rộng, nhìn được bên trong workflow, hỗ trợ nhiều ngôn ngữ. Chọn Flyte: mô hình thực thể gần với Luigi/Flo (dễ migrate), task là công dân hạng nhất, SDK mỏng vì logic ở backend, tách khỏi phần còn lại của hệ sinh thái, mở rộng được, đã chạy ở quy mô tương tự, mã nguồn mở (Spotify góp vào). Workflow đăng ký cả vào Flyte Admin lẫn Styx.
- Lúc viết đã chạy pipeline quan trọng trên Flyte, còn phải chuyển hết pipeline cũ từ Luigi.
Vì sao
- Logic nằm trong thư viện thì nền tảng không đẩy được thay đổi và không nhìn thấy được gì; logic nằm trong dịch vụ thì nền tảng tự cập nhật cho mọi người và có dữ liệu để tự động hoá (Nền tảng nội bộ cho service (đường ray chung), Pipeline dữ liệu và analytics).
Bài học cho SWE
- Ở quy mô hàng nghìn repo, đừng phát hành năng lực nền tảng dưới dạng thư viện dày; SDK mỏng + dịch vụ cho phép nâng cấp tập trung.
- Muốn tự động hoá trên workflow (backfill, báo trễ) thì nền tảng phải thấy được cấu trúc workflow trước khi chạy.
Liên quan
Pipeline dữ liệu và analyticsNền tảng nội bộ cho service (đường ray chung)Quản lý fleet và migrate code hàng loạt
#Data orchestration#Luigi#Flo#Styx#Flyte#Library vs service#Thin SDK#Workflow visibility#Batch pipeline
Được nhắc tới trong
Chủ đề (3)
Công ty (1)
Bài tóm tắt (6)