4 puan yazan GN⁺ 2024-07-24 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2024-07-24
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

    • Açık kaynak kullanımını tercih ediyor ve kodun bakımının yapılması, yeni özellikler eklenmesi gerektiğini belirtiyor
    • İş açısından kritik olmayan kodun kaynak israfı olduğunu düşünüyor
  • Mühendislerin bir iş akışı çözümünden memnun kalana kadar neden bu kadar çok yinelemeye ihtiyaç duyduğunu merak ediyor

    • Netflix, Uber ve Amazon’un hepsi birden fazla çözüm geliştirdi
    • Mühendislerin iş akışı motorları inşa etmeye ilgi duyduğunu söylüyor
  • Windmill.dev kurucusunun görüşü

    • Maestro ile Windmill arasında çok sayıda benzerlik var
    • Başlıca farklar:
      • Windmill Rust ile yazılmış
      • Maestro CockroachDB kullanırken, Windmill kendi sharding algoritmasını kullanıyor
      • Lisans farkı: Maestro Apache 2.0, Windmill ise AGPL
      • Netflix tarafından desteklenen Maestro ile karşılaştırıldığında Windmill küçük bir şirket
      • Maestro’nun self-hosting dokümantasyonu ve UI’ı yetersiz
  • Activebatch kullanım deneyimi paylaşılıyor

    • Activebatch, basit bir MS SQL DB ve Windows GUI kurulumu ile güçlü bir otomasyon ortamı sunuyor
    • Airflow ve diğer açık kaynak rakipler karmaşık
    • Kurumsal satış modeli nedeniyle Activebatch’in yaygınlaşmamış olması üzücü bulunuyor
  • Netflix/Conductor kullanımıyla ilgili kafa karışıklığı

    • Proje Netflix/Conductor kullanıyormuş gibi görünüyor, ancak arşivlenmiş bir sürüm kullanılıyor
    • Orkes Conductor kullanılmıyor
  • Orkestratörler hakkındaki görüş

    • Açık kaynak ve açık geliştirme harika, ancak zaten çok sayıda orkestratör var
    • Yeni bir seçeneğin ticari kullanımda yaygınlaşma ihtimali düşük görülüyor
  • Temporal ile karşılaştırma

    • Maestro Java ile, Temporal ise Go ile yazılmış
  • Projeye dair olumlu değerlendirme

    • ML ve veri mühendisliği projelerinde benzer bir şey yapmak istemiş
    • Denemeyi dört gözle bekliyor
  • Conductor’dan farkına dair soru

    • Kodda çok sayıda benzerlik bulunduğu söyleniyor
    • JSON, iş akışı tanım dili olarak kullanılıyor
  • Yazıya eleştiri

    • Yapay zeka tarafından yazılmış gibi hissettiriyor
    • Gerçek kullanım senaryolarına ait örnek iş akışlarına ihtiyaç olduğu belirtiliyor