-
Maestro: Netflix'in iş akışı orkestratörü
-
TL;DR
- Netflix, Maestro'nun kaynak kodunu yayınladı
- GitHub deposundan başlayabilirsiniz; faydalı bulursanız yıldız vermenizi rica ediyorlar
-
Maestro nedir
- Maestro, büyük ölçekli iş akışlarını yönetmek için tasarlanmış genel amaçlı, yatay ölçeklenebilir bir iş akışı orkestratörüdür
- Veri pipeline'ları ve makine öğrenimi model eğitimi pipeline'ları gibi iş akışlarının tüm yaşam döngüsünü yönetir
- Kullanıcılar iş mantığını Docker imajları, notebook'lar, bash script'leri, SQL, Python ve benzeri çeşitli biçimlerde paketleyebilir
- Yalnızca geleneksel DAG'leri (Directed Acyclic Graph) destekleyen iş akışı orkestratörlerinin aksine Maestro, hem döngüsüz hem de döngüsel iş akışlarını destekler; ayrıca foreach döngüleri, alt iş akışları ve koşullu dallanma gibi yeniden kullanılabilir birçok pattern içerir
-
Maestro ile yolculuk
- Yüz binlerce iş akışını kullanıcılar için en az kesintiyle başarıyla migrate ettiler
- Son 1 yılda çalıştırılan iş sayısı %87,5 arttı ve günde ortalama 500 bin iş çalıştırılıyor
-
Ölçeklenebilirlik ve çok yönlülük
- Maestro, Netflix'teki binlerce son kullanıcıya, uygulamaya ve servise Workflow-as-a-Service sunan tamamen yönetilen bir iş akışı orkestratörüdür
- ETL pipeline'ları, ML iş akışları, AB test pipeline'ları gibi çeşitli kullanım senaryolarını destekler
- Netflix, veri tablolarının tek bir veri ambarında bulunduğu için bunu tek bir orkestratörün ele alması gerektiğine inanıyor
-
Maestro'ya giriş
- JSON formatında tanımlanan iş akışı tanımlarını kullanır
- Kullanıcı tarafından sağlanan alanlar ile Maestro'nun yönettiği alanları birleştirerek esnek ve güçlü orkestrasyon tanımları oluşturur
- İş akışı tanımı; özellikler ve versiyonlanmış iş akışlarından oluşur
- Özellikler arasında yazar ve sahip bilgileri ile çalıştırma ayarları yer alır
- Versiyonlanmış iş akışları; benzersiz tanımlayıcı, ad, açıklama, etiketler, timeout ayarları ve öncelik seviyelerini içerir
-
İş akışı yürütme stratejileri
- Sıralı yürütme stratejisi: İş akışlarını FIFO sırasıyla teker teker çalıştırır
- Katı sıralı yürütme stratejisi: Engelleyici hata varsa yürütmeyi durdurur ve hatanın manuel olarak çözülmesini gerektirir
- Yalnızca ilki çalıştır stratejisi: Hâlihazırda çalışan iş akışı tamamlanana kadar yeni iş akışı instance'larını kuyruktan kaldırır
- Yalnızca sonuncuyu çalıştır stratejisi: Yalnızca en son tetiklenen iş akışını çalıştırır ve mevcut çalışan instance'ları durdurur
- Eşzamanlılık sınırına sahip paralel yürütme stratejisi: Önceden tanımlanmış eşzamanlılık sınırına göre birden fazla iş akışı instance'ını paralel çalıştırır
-
Parametreler ve ifade dili desteği
- Dinamik parametreleri ve kod eklemeyi destekleyerek iş akışlarının esnekliğini ve dinamizmini büyük ölçüde artırır
- Güvenlik ve emniyet sorunlarını çözmek için kendi özelleştirilmiş ifade dili parser'ını geliştirdi
- Basit ve güvenli ifade dili (SEL): Kod eklemeyle ilgili riskleri çözmek için geliştirilen basit ve güvenli bir ifade dili
- Çıktı parametreleri: Kullanıcı çalıştırmalarından çıktı parametreleri sisteme geri döndürülebilir
- Parametreli iş akışları: Kullanıcı tanımlı parametrelere göre çalışma anında adım adım başlatılır
-
İş akışı yürütme pattern'leri
- Foreach desteği: Aynı işi farklı parametrelerle tekrar tekrar çalıştırmak için kullanılır
- Koşullu dallanma desteği: Sonraki adımları yalnızca belirli koşullar sağlandığında çalıştırır
- Alt iş akışı desteği: Ortak işlevlerin birden fazla iş akışı arasında paylaşılmasını sağlar
-
Adım runtime'ı ve adım parametreleri
- Adım runtime arayüzü: Çalışma anında işi tanımlayan arayüz
- Adım parametre birleştirme: Adım çalıştırılmadan önce runtime parametreleri ve etiketler enjekte edilerek adım davranışı dinamik olarak kontrol edilir
-
Adım bağımlılıkları ve sinyaller
- Adım bağımlılıkları, yürütme bağımlılıklarını ifade etmek için kullanılabilir
- Sinyaller, parametre değerleri de dahil olmak üzere bilgi taşıyan mesaj parçalarıdır
-
Breakpoint'ler
- İş akışı adımlarına breakpoint koyarak kod seviyesindeki breakpoint'lere benzer şekilde çalışmasını sağlar
- Bir breakpoint'e ulaşıldığında ilgili adım
paused durumuna geçer ve kullanıcı manuel olarak devam ettirene kadar iş akışı grafiğinin ilerleyişi durur
-
Timeline
- Adım yürütme timeline'ı dahil tüm önemli olayları kaydeder
- Debug için faydalıdır ve adım durumları hakkında içgörü sağlar
-
Retry politikası
- Başarısızlık nedeniyle terminal duruma ulaşan adımlar için retry politikasını destekler
- Platform hataları ile kullanıcı tanımlı koşullara yönelik retry'ları birbirinden ayırır
-
Toplu görünüm
- İş akışı instance'ındaki tüm adımların toplu durumunu görmeyi sağlar
- Mevcut çalıştırmanın runtime verileri ile temel aggregation'ı birleştirerek toplu durumu hesaplar
-
Rollup
- İş akışı instance'ı için yüksek seviyeli bir özet sunar
- Her adımın durumunu ve her durumdaki adım sayısını ayrıntılandırır
-
Maestro olay yayını
- İş akışı tanımı, iş akışı instance'ı veya adım instance'ı değiştiğinde olay üretir ve bunları harici sistemlere yayınlar
- İç olaylar ve dış olaylar olarak ayrılır
-
Maestro'ya başlarken
- Netflix'te geniş ölçekte kullanıldı ve artık kaynak kodu yayınlandı
- Kod GitHub deposunda bulunabiliyor; soru veya görüşleriniz varsa GitHub issue oluşturmanız isteniyor
-
Teşekkür
- Maestro projesine katkıda bulunan ekip üyelerine ve Netflix'teki çalışma arkadaşlarına teşekkür ediliyor
GN⁺ özeti
- Maestro, Netflix'in büyük ölçekli iş akışlarını yönetmek için tasarlanmış bir orkestratördür ve iş mantığını farklı biçimlerde destekler
- Dinamik parametreler ve kod ekleme sayesinde esnekliği ve dinamizmi büyük ölçüde artırır
- Çeşitli yürütme stratejileri ve pattern'ler sunarak karmaşık iş akışlarının kolayca tanımlanıp yönetilmesini sağlar
- Netflix'in veri ambarı gibi tekil veri kaynaklarını işlemek için uygundur
- Benzer işlevler sunan diğer orkestratörler arasında Apache Airflow ve Prefect bulunur
1 yorum
Hacker News görüşleri
Kurumsal teknoloji bloglarından ve iç sistemlerden etkilendiğini, ancak artık kodun bir yük olduğunu fark ettiğini söylüyor
Mühendislerin bir iş akışı çözümünden memnun kalana kadar neden bu kadar çok yinelemeye ihtiyaç duyduğunu merak ediyor
Windmill.dev kurucusunun görüşü
Activebatch kullanım deneyimi paylaşılıyor
Netflix/Conductor kullanımıyla ilgili kafa karışıklığı
Orkestratörler hakkındaki görüş
Temporal ile karşılaştırma
Projeye dair olumlu değerlendirme
Conductor’dan farkına dair soru
Yazıya eleştiri