- Windmill, Airflow, Prefect, Temporal gibi diğer iş akışı motorlarıyla karşılaştırıldığında en hızlı self-host edilebilen açık kaynaklı iş akışı motoru olduğunu benchmark’larla gösteriyor
- Windmill, çeşitli programlama dillerini destekliyor ve karmaşık SDK’lar ya da dağıtım süreçleri olmadan birkaç dakika içinde iş akışları kurup test etmeyi sağlayan entegre bir geliştirme ortamı sunuyor
- Airflow/Prefect yalnızca tek bir runtime’ı (Python) desteklerken, Windmill Python, Typescript, Go, Bash destekliyor ve BigQuery, Snowflake, Mysql, Postgresql için doğrudan SQL sorgularını destekliyor
- Temporal ile karşılaştırıldığında Temporal iş kuyruğu yönetiminde uzmanlaşmışken, Windmill olay bekleme (reaktivite) özelliğini de içeren dayanıklı bir yürütme motoru olarak da çalışıyor
İş akışı motoru ile iş kuyruğu arasındaki fark
- İş kuyruğu, iş akışı motorunun çekirdeğidir ve birçok geliştirici kendi mantığını kurarak iş akışı motoru kullanmadan iş kuyruğundan yararlanır
- SQS, Kafka, Redis with RMSQ, Orban gibi çeşitli kuyruk implementasyonları zaten mevcut
- Birçok geliştirici mantığını iş kuyruğu merkezli kurarak iş akışı motoruna benzer bir tatmin duyar (kendi iş akışı motorunu yapmak gibi)
"Her Şey Dahil" iş akışı motoru nedir
- İş akışı motoru, görevlerin bağımlılık kısıtlarına uyarak dağıtık sistemlerde iş akışlarını koordine eder ve görevlerin tamamlanmasını sağlar
- İş akışı motorlarının 5 temel avantajı:
- Kaynak tahsisi: kümeyi en üst düzeyde kullanabilir; tüm görevleri farklı kaynaklara (CPU, bellek, GPU) sahip farklı worker’lara atayabilir ve worker’ın tüm kaynaklarının göreve kullanılmasını sağlayabilir
- Paralel işleme: iş akışının kısıtları nedeniyle bazı adımlar paralel çalıştırılabiliyorsa (branch, for loop), iş akışı motoru bu adımları yalnızca thread’lere değil, fiziksel olarak ayrılmış birden fazla worker’a da dispatch edebilir
- Gözlemlenebilirlik: her görevin benzersiz bir ID’si vardır; girdileri, log’ları, çıktıları ve durumu incelenebilir, yani tek tek gözlemlenebilirler
- Dayanıklılık: makine beklenmedik bir nedenle durursa veya yan etkiler oluşursa iş akışının yeniden başlatılması gerekir
- Beklenmedik olaylar yaşandığında iş akışı mümkün olduğunca hızlı yeniden başlatılabilmelidir; bunu başarmanın bir yolu, aynı görevin birden çok kez çalıştırılmasının tek kez çalıştırılmasıyla aynı etkiyi üretmesini sağlayan idempotence’tır
- Emin olunmadığında, tüm akış hiçbir sonuç üretmeden yeniden oynatılır. Bu genellikle, göreve eklenmiş benzersiz ID’nin log’un parçası olduğu durumlarda yan etkileri atlayan log dosyaları ve SDK’lar kullanılarak uygulanır
- Başka bir yöntem de akış durumunun işlemsel snapshot’larını oluşturarak her görevden sonra durumu kaydetmektir. Yeniden başlatmak için son durum yeniden yüklenir ve oradan devam edilir
- Windmill ikincisini kullanıyor ve kullanıcı alanında istenirse idempotence’ın uygulanabileceğini varsayıyor
- Reaktivite: webhook veya onay gibi olaylara bağlı olarak tekrar devam ettirilene kadar akışı duraklatır
Windmill’in hızının sırrı
- Windmill, Postgresql ve Rust kullanarak basit tasarım ve optimizasyonlarla verimliliği en üst düzeye çıkarıyor
Sistem tasarımı ve kuyruk
- Windmill, Rust ile derlenmiş tek bir binary sunuyor; worker’lar ve sunucu Postgresql’e bağlanıyor, ancak birbirlerine bağlanmıyor
- Kuyruk doğrudan Postgresql üzerinde uygulanıyor ve işler API üzerinden dışarıdan tetiklenebiliyor
Durum
- İş akışı motorları görevleri sonlu durum makinesi (FSM) olarak ifade eder; Windmill ise tüm akışın kendisini FSM olarak ele alır
Veri aktarımı
- Windmill, veri aktarımı için JavaScript ifadeleri, geçici klasör paylaşımı, S3 entegrasyonu gibi çeşitli yöntemler sunuyor
Worker verimliliği
- Windmill worker’ları aynı anda tek bir işi işler ve işleri container olmadan çalıştırarak performansı artırır
Sonuç
- Windmill, Postgresql ve Rust tabanlı, basit tasarım ve optimizasyonlar sayesinde çok yüksek hız sunan açık kaynaklı ve self-host edilebilen bir serverless runtime ve platformdur
GN⁺ görüşü
Bu yazının en önemli noktası, Windmill’in çeşitli programlama dillerini desteklemesi ve karmaşık SDK’lar ya da dağıtım süreçleri olmadan iş akışlarını hızla kurup test etmeyi sağlayan entegre bir geliştirme ortamı sunmasıdır. Bu özellikler yazılım geliştiriciler için çok kullanışlıdır; Windmill’in yüksek performansı ve verimliliği de geliştiricilerin daha iyi ürünleri daha hızlı piyasaya sürmesine yardımcı olabilir. Yazı geliştiriciler için ilgi çekici içerikler sunuyor; özellikle kendi iş akışı motorunu kurmak veya mevcut motorları optimize etmek isteyenler için cazip olacaktır.
2 yorum
Windmill - Python tabanlı şirket içi uygulama geliştirme ve otomasyon platformu, açık kaynak
Geçen yıl mayısta kısa süreliğine duyurulmuştu; geliştirici henüz herkese açık olmaya hazır olmadığını söyleyip "10 dakika sonra YC mülakatına gireceğim!" demişti... sonra da yoruma YC'yi geçtiğini yazmıştı.
YC'yi geçip 1,5 yıl boyunca hızla ilerledikten sonra ürünü resmen piyasaya sürmüş oldular.
Hacker News görüşleri