4 poin oleh GN⁺ 2024-07-24 | 1 komentar | Bagikan ke WhatsApp
  • Maestro: Orkestrator Workflow Netflix

  • TL;DR

    • Netflix telah merilis source code Maestro
    • Bisa mulai dari repositori GitHub, dan jika menurut Anda berguna, mereka meminta Anda untuk memberi bintang
  • Apa itu Maestro

    • Maestro adalah orkestrator workflow serbaguna yang dapat diskalakan secara horizontal, dirancang untuk mengelola workflow berskala besar
    • Mengelola seluruh siklus hidup workflow seperti pipeline data dan pipeline pelatihan model machine learning
    • Pengguna dapat mengemas logika bisnis dalam berbagai format seperti image Docker, notebook, skrip bash, SQL, Python, dan lainnya
    • Berbeda dari orkestrator workflow tradisional yang hanya mendukung DAG (Directed Acyclic Graph), Maestro mendukung workflow asiklik maupun siklik, serta mencakup berbagai pola yang dapat digunakan kembali seperti loop foreach, subworkflow, dan percabangan kondisional
  • Perjalanan bersama Maestro

    • Berhasil memigrasikan ratusan ribu workflow dengan gangguan seminimal mungkin bagi pengguna
    • Selama satu tahun terakhir, jumlah job yang dijalankan meningkat 87,5%, dan saat ini menjalankan rata-rata 500 ribu job per hari
  • Skalabilitas dan multifungsi

    • Maestro adalah orkestrator workflow fully managed yang menyediakan Workflow-as-a-Service bagi ribuan pengguna akhir, aplikasi, dan layanan di Netflix
    • Mendukung berbagai use case workflow seperti pipeline ETL, workflow ML, dan pipeline pengujian AB
    • Netflix meyakini bahwa karena tabel data mereka berada dalam satu data warehouse tunggal, satu orkestrator harus menangani semuanya
  • Pengenalan Maestro

    • Menggunakan definisi workflow yang ditetapkan dalam format JSON
    • Menggabungkan field yang disediakan pengguna dan field yang dikelola Maestro untuk membentuk definisi orkestrasi yang fleksibel dan kuat
    • Definisi workflow terdiri dari properti dan workflow yang dikelola versinya
    • Properti mencakup informasi penulis dan pemilik, pengaturan eksekusi, dan lainnya
    • Workflow berversi mencakup pengenal unik, nama, deskripsi, tag, pengaturan timeout, dan tingkat prioritas
  • Strategi eksekusi workflow

    • Strategi eksekusi sekuensial: Menjalankan workflow satu per satu dalam urutan FIFO
    • Strategi eksekusi sekuensial ketat: Memblokir eksekusi jika ada error yang memblokir dan mengharuskan penyelesaian manual
    • Strategi hanya jalankan yang pertama: Menghapus instance workflow baru dari antrean sampai workflow yang sedang berjalan selesai
    • Strategi hanya jalankan yang terakhir: Hanya menjalankan workflow terbaru yang dipicu dan menghentikan instance lama yang masih berjalan
    • Strategi eksekusi paralel dengan batas konkurensi: Menjalankan beberapa instance workflow secara paralel sesuai batas konkurensi yang telah ditentukan
  • Dukungan parameter dan bahasa ekspresi

    • Mendukung parameter dinamis dan penyisipan kode, sehingga sangat meningkatkan fleksibilitas dan sifat dinamis workflow
    • Mengembangkan parser bahasa ekspresi kustom sendiri untuk menangani masalah keamanan dan keselamatan
    • Simple and Safe Expression Language (SEL): Bahasa ekspresi sederhana dan aman yang dikembangkan untuk mengatasi risiko terkait penyisipan kode
    • Parameter output: Dapat mengembalikan parameter output dari eksekusi pengguna ke sistem
    • Workflow terparametrisasi: Diinisialisasi langkah demi langkah saat runtime berdasarkan parameter yang ditentukan pengguna
  • Pola eksekusi workflow

    • Dukungan Foreach: Digunakan untuk menjalankan tugas yang sama berulang kali dengan parameter berbeda
    • Dukungan percabangan kondisional: Menjalankan langkah lanjutan hanya jika kondisi tertentu terpenuhi
    • Dukungan subworkflow: Memungkinkan fungsi umum dibagikan di beberapa workflow
  • Runtime langkah dan parameter langkah

    • Antarmuka runtime langkah: Antarmuka yang mendeskripsikan job saat waktu eksekusi
    • Penggabungan parameter langkah: Menyuntikkan parameter runtime dan tag sebelum eksekusi langkah untuk mengendalikan perilaku langkah secara dinamis
  • Dependensi langkah dan sinyal

    • Dapat menggunakan dependensi langkah untuk mengekspresikan dependensi eksekusi
    • Sinyal adalah potongan pesan yang menyampaikan informasi termasuk nilai parameter
  • Breakpoint

    • Dapat menetapkan breakpoint pada langkah workflow, bekerja mirip dengan breakpoint pada level kode
    • Saat mencapai breakpoint, langkah tersebut masuk ke status "paused" dan progres graf workflow dihentikan sampai pengguna melanjutkannya secara manual
  • Timeline

    • Menangkap semua event penting termasuk timeline eksekusi langkah
    • Berguna untuk debugging dan memberikan insight terhadap status langkah
  • Kebijakan retry

    • Mendukung kebijakan retry untuk langkah yang mencapai status terminal karena kegagalan
    • Membedakan retry untuk error platform dan kondisi yang ditentukan pengguna
  • Tampilan agregat

    • Dapat melihat status agregat dari semua langkah dalam instance workflow
    • Menghitung status agregat dengan menggabungkan data runtime eksekusi saat ini dan agregasi dasar
  • Rollup

    • Memberikan ringkasan tingkat tinggi dari instance workflow
    • Merinci status setiap langkah dan jumlah langkah pada tiap status
  • Publikasi event Maestro

    • Menghasilkan event dan menerbitkannya ke sistem eksternal saat definisi workflow, instance workflow, atau instance langkah berubah
    • Dibedakan menjadi event internal dan event eksternal
  • Memulai dengan Maestro

    • Telah digunakan secara luas di Netflix, dan kini source code-nya dibuka
    • Kode tersedia di repositori GitHub, dan mereka meminta agar pertanyaan atau masukan disampaikan dengan membuat issue di GitHub
  • Ucapan terima kasih

    • Menyampaikan terima kasih kepada anggota tim yang berkontribusi pada proyek Maestro dan rekan-rekan di Netflix

Ringkasan GN⁺

  • Maestro adalah orkestrator yang dirancang untuk mengelola workflow berskala besar di Netflix dan mendukung logika bisnis dalam berbagai format
  • Melalui parameter dinamis dan penyisipan kode, fleksibilitas serta sifat dinamisnya meningkat secara signifikan
  • Menyediakan beragam strategi eksekusi dan pola untuk memudahkan definisi serta pengelolaan workflow yang kompleks
  • Cocok untuk menangani sumber data tunggal seperti data warehouse Netflix
  • Orkestrator lain dengan fungsi serupa antara lain Apache Airflow dan Prefect

1 komentar

 
GN⁺ 2024-07-24
Komentar Hacker News
  • Terkesan dengan blog teknik perusahaan dan sistem internal, tetapi kini menyadari bahwa kode adalah utang

    • Lebih memilih menggunakan open source, meski perlu pemeliharaan kode dan penambahan fitur
    • Hal yang bukan kode penting bagi bisnis adalah pemborosan sumber daya
  • Bertanya-tanya mengapa perlu banyak iterasi sebelum para engineer puas dengan solusi workflow

    • Netflix, Uber, dan Amazon semuanya membangun beberapa solusi
    • Para engineer tampaknya tertarik membuat workflow engine
  • Pendapat pendiri Windmill.dev

    • Maestro dan Windmill memiliki banyak kesamaan
    • Perbedaan utama:
      • Windmill ditulis dalam Rust
      • Maestro menggunakan CockroachDB, Windmill menggunakan algoritme sharding sendiri
      • Perbedaan lisensi: Maestro menggunakan Apache 2.0, Windmill menggunakan AGPL
      • Dibandingkan Maestro yang didukung Netflix, Windmill adalah perusahaan kecil
      • Maestro kurang memiliki dokumentasi self-hosting dan UI
  • Berbagi pengalaman menggunakan Activebatch

    • Activebatch menyediakan lingkungan otomasi yang kuat hanya dengan instalasi DB MS SQL sederhana dan GUI Windows
    • Airflow dan pesaing open source lainnya rumit
    • Disayangkan Activebatch tidak digunakan secara luas karena model penjualan enterprise
  • Kebingungan tentang penggunaan Netflix/Conductor

    • Proyek ini tampak seperti menggunakan Netflix/Conductor, tetapi memakai versi yang sudah diarsipkan
    • Tidak menggunakan Orkes Conductor
  • Pendapat tentang orchestrator

    • Open source dan pengembangan terbuka itu bagus, tetapi orchestrator sudah sangat banyak
    • Kecil kemungkinan opsi baru akan digunakan secara komersial
  • Perbandingan dengan Temporal

    • Maestro ditulis dalam Java, sedangkan Temporal ditulis dalam Go
  • Penilaian positif terhadap proyek ini

    • Ingin membuat sesuatu yang mirip untuk proyek ML dan data engineering
    • Menantikan untuk mencobanya
  • Pertanyaan tentang perbedaan dengan Conductor

    • Menemukan banyak kemiripan di dalam kode
    • Menggunakan JSON sebagai bahasa definisi workflow
  • Kritik terhadap isi artikel

    • Terasa seperti ditulis oleh AI
    • Membutuhkan contoh workflow untuk use case nyata