-
Maestro: Bộ điều phối workflow của Netflix
-
TL;DR
- Netflix đã công khai mã nguồn của Maestro
- Có thể bắt đầu từ kho GitHub, và nếu thấy hữu ích thì hãy gắn sao cho dự án
-
Maestro là gì
- Maestro là một workflow orchestrator đa dụng, có thể mở rộng theo chiều ngang, được thiết kế để quản lý các workflow quy mô lớn
- Quản lý toàn bộ vòng đời của các workflow như data pipeline và pipeline huấn luyện mô hình machine learning
- Người dùng có thể đóng gói business logic dưới nhiều định dạng như Docker image, notebook, bash script, SQL, Python, v.v.
- Không giống các workflow orchestrator truyền thống chỉ hỗ trợ DAG (Directed Acyclic Graph), Maestro hỗ trợ cả workflow không chu trình lẫn có chu trình, đồng thời gồm nhiều mẫu tái sử dụng như vòng lặp foreach, subworkflow và rẽ nhánh có điều kiện
-
Hành trình cùng Maestro
- Đã di chuyển thành công hàng trăm nghìn workflow với mức gián đoạn tối thiểu cho người dùng
- Trong 1 năm qua, số lượng job được chạy đã tăng 87,5%, và hiện đang chạy trung bình 500.000 job mỗi ngày
-
Khả năng mở rộng và tính đa dụng
- Maestro là một workflow orchestrator được quản lý hoàn toàn, cung cấp Workflow-as-a-Service cho hàng nghìn người dùng cuối, ứng dụng và dịch vụ tại Netflix
- Hỗ trợ nhiều trường hợp sử dụng workflow như ETL pipeline, ML workflow và AB testing pipeline
- Netflix tin rằng vì các bảng dữ liệu của họ nằm trong một data warehouse duy nhất, nên cần một orchestrator duy nhất để xử lý chúng
-
Giới thiệu về Maestro
- Sử dụng các định nghĩa workflow được khai báo ở định dạng JSON
- Kết hợp các trường do người dùng cung cấp với các trường do Maestro quản lý để tạo nên định nghĩa điều phối linh hoạt và mạnh mẽ
- Định nghĩa workflow gồm các thuộc tính và workflow được quản lý phiên bản
- Các thuộc tính bao gồm thông tin tác giả và chủ sở hữu, cấu hình thực thi, v.v.
- Workflow được quản lý phiên bản bao gồm định danh duy nhất, tên, mô tả, thẻ, cấu hình timeout và mức độ ưu tiên
-
Chiến lược thực thi workflow
- Chiến lược thực thi tuần tự: chạy từng workflow theo thứ tự FIFO
- Chiến lược thực thi tuần tự nghiêm ngặt: chặn thực thi khi có lỗi chặn và yêu cầu xử lý lỗi thủ công
- Chiến lược chỉ chạy cái đầu tiên: loại bỏ các workflow instance mới khỏi hàng đợi cho đến khi workflow đang chạy hiện tại hoàn tất
- Chiến lược chỉ chạy cái cuối cùng: chỉ chạy workflow được kích hoạt mới nhất và dừng các instance đang chạy trước đó
- Chiến lược thực thi song song có giới hạn đồng thời: chạy song song nhiều workflow instance theo giới hạn đồng thời được định nghĩa trước
-
Hỗ trợ tham số và ngôn ngữ biểu thức
- Hỗ trợ tham số động và chèn mã, giúp tăng mạnh tính linh hoạt và tính động của workflow
- Đã phát triển một trình phân tích ngôn ngữ biểu thức tùy chỉnh riêng để giải quyết các vấn đề về bảo mật và an toàn
- Simple and Safe Expression Language (SEL): ngôn ngữ biểu thức đơn giản và an toàn được phát triển để xử lý các rủi ro liên quan đến chèn mã
- Tham số đầu ra: có thể trả các tham số đầu ra từ phần thực thi của người dùng về hệ thống
- Workflow có tham số: được khởi tạo theo từng bước tại runtime dựa trên các tham số do người dùng định nghĩa
-
Mẫu thực thi workflow
- Hỗ trợ Foreach: dùng để lặp lại cùng một tác vụ với các tham số khác nhau
- Hỗ trợ rẽ nhánh có điều kiện: chỉ chạy các bước tiếp theo khi điều kiện cụ thể được thỏa mãn
- Hỗ trợ subworkflow: cho phép chia sẻ chức năng dùng chung giữa nhiều workflow
-
Runtime của bước và tham số bước
- Giao diện runtime của bước: giao diện mô tả tác vụ tại thời điểm thực thi
- Hợp nhất tham số bước: chèn tham số runtime và thẻ trước khi thực thi bước để điều khiển động hành vi của bước
-
Phụ thuộc giữa các bước và tín hiệu
- Có thể biểu diễn phụ thuộc thực thi bằng phụ thuộc giữa các bước
- Tín hiệu là các mẩu thông điệp truyền tải thông tin, bao gồm cả giá trị tham số
-
Breakpoint
- Có thể đặt breakpoint trong các bước của workflow, hoạt động tương tự breakpoint ở cấp độ mã nguồn
- Khi chạm tới breakpoint, bước đó sẽ chuyển sang trạng thái "tạm dừng" và tiến trình của đồ thị workflow sẽ dừng lại cho đến khi người dùng tự tay tiếp tục
-
Timeline
- Ghi lại mọi sự kiện quan trọng, bao gồm cả timeline thực thi của bước
- Hữu ích cho việc debug và cung cấp insight về trạng thái của bước
-
Chính sách retry
- Hỗ trợ chính sách retry cho các bước đã đi tới trạng thái kết thúc do thất bại
- Phân biệt giữa retry do lỗi nền tảng và retry theo điều kiện do người dùng định nghĩa
-
Chế độ xem tổng hợp
- Có thể xem trạng thái tổng hợp của tất cả các bước trong một workflow instance
- Tính toán trạng thái tổng hợp bằng cách kết hợp dữ liệu runtime của lần chạy hiện tại với tổng hợp cơ sở
-
Rollup
- Cung cấp bản tóm tắt ở mức cao cho workflow instance
- Mô tả chi tiết trạng thái của từng bước và số lượng bước ở mỗi trạng thái
-
Phát hành sự kiện Maestro
- Tạo sự kiện và phát hành tới hệ thống bên ngoài khi định nghĩa workflow, workflow instance hoặc step instance thay đổi
- Được chia thành sự kiện nội bộ và sự kiện bên ngoài
-
Bắt đầu với Maestro
- Đã được sử dụng rộng rãi tại Netflix, và nay đã công khai mã nguồn
- Có thể tìm mã trong kho GitHub, và nếu có câu hỏi hay ý kiến thì hãy tạo GitHub issue
-
Lời cảm ơn
- Gửi lời cảm ơn tới các thành viên trong nhóm đã đóng góp cho dự án Maestro và các đồng nghiệp tại Netflix
Tổng hợp của GN⁺
- Maestro là orchestrator được thiết kế để quản lý các workflow quy mô lớn của Netflix, hỗ trợ business logic ở nhiều định dạng khác nhau
- Thông qua tham số động và chèn mã, nó cải thiện đáng kể tính linh hoạt và tính động
- Cung cấp nhiều chiến lược và mẫu thực thi, giúp dễ dàng định nghĩa và quản lý các workflow phức tạp
- Phù hợp để xử lý một nguồn dữ liệu duy nhất như data warehouse của Netflix
- Những orchestrator khác cung cấp tính năng tương tự gồm có Apache Airflow và Prefect
1 bình luận
Ý kiến trên Hacker News
Từng ấn tượng với các blog kỹ thuật doanh nghiệp và hệ thống nội bộ, nhưng giờ nhận ra mã nguồn cũng là một khoản nợ
Thắc mắc vì sao cần nhiều vòng lặp đến vậy để các kỹ sư hài lòng với một giải pháp workflow
Ý kiến từ nhà sáng lập Windmill.dev
Chia sẻ trải nghiệm dùng Activebatch
Sự khó hiểu quanh việc sử dụng Netflix/Conductor
Ý kiến về các orchestrator
So sánh với Temporal
Đánh giá tích cực về dự án
Câu hỏi về sự khác biệt với Conductor
Chỉ trích nội dung bài viết