14 puan yazan GN⁺ 2023-11-24 | 2 yorum | WhatsApp'ta paylaş
  • 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

 
xguru 2023-11-24

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.

 
GN⁺ 2023-11-24
Hacker News görüşleri
  • Windmill geliştiricileri sanki "tek bir işi iyi yap" tavsiyesini tam tersine uygulamış gibi görünüyor. Windmill.dev'e bakınca bile yazılımın ne için kullanıldığı net değil. Retool, Airflow, Temporal rakibi mi, no-code workflow builder mı, sürükle-bırak UI builder mı, online IDE mi, yoksa tonla entegrasyonu olan bir araç mı, kafa karıştırıyor.
  • Bir workflow engine'in hızının belli bir seviyenin ötesinde ne kadar önemli olduğu şüpheli. Birçok workflow uzun süren işler içerdiği için önemli olan şey multi-tenancy; yani kullanıcının istediği kadar işi desteklerken her işin workflow engine içinde tek işmiş gibi planlanıp çalıştırılabilmesi.
  • İş süreçlerini spreadsheet'lerden, kişisel e-postalardan ve yöneticinin hafızasından web formlarına, yüklemelere, otomatik e-postalara ve dashboard'lara taşımak istiyorum. Airtable, Smartsheet, Budibase vb. araçlara baktım ama bunlar daha çok proje yönetimine odaklı gibi görünüyor ve takvim entegrasyonu, e-posta veya zamanlanmış script'ler konusunda tatmin edici değiller. Veriler için API varsa ya da gerekirse kod yazabilirim; yöneticilerin spreadsheet görünümüyle biraz UI işi yapabildiği ve programcıların entegrasyonları üstlendiği low-code bir yaklaşımı tercih ediyorum.
  • İnsanların bu kadar zaman ve emek harcayıp yazı yazdıktan sonra bir kez bile yazım denetleyici kullanmamasına şaşırıyorum. 2023'te hâlâ varsayılan olarak yazım denetimi yapmayan metin editörleri kullanan insanlar olup olmadığını merak ediyorum.
  • Open source olduğunu söylerken SSO için 10 kullanıcı sınırı olması kafa karıştırıcı. Open source normalde kodun değiştirilmesine izin verir, ama 10 kişilik sınırın nasıl uygulandığını merak ettim. Kaynak koda baktığımda lisans kontrol kodu var. Open source ise herkes o kodu çıkaramaz mı? Değiştirilemiyorsa bu "source-available"dır, "open source" değil. Proje havalı göründüğü için yöneticime önermek istedim ama bu kısmı nasıl açıklayacağımı bilmiyorum.
  • Windmill'i HN lansmanından beri takip ediyorum ve 1 yıldan kısa bir süredir daha yoğun kullanıyorum. Discord sunucusu çok aktif ve Ruben hafta sonları bile birkaç dakika içinde yanıt verip bug düzeltiyor.
  • Windmill sistemini kullanmak istiyorum ama lisans sorunu yüzünden tereddüt ediyorum. Yazılımın çoğu AGPLv3 altında olsa da README'deki ticari lisans bölümü AGPL için oldukça geniş bir yorum ima ediyor. Windmill üzerinden özellik geliştirmek için ürününüzün de AGPLv3 olması gerekiyorsa, bu API üzerinden çağrı yapmanın bile telif hukukunu tetikleyebileceği anlamına gelir. Bu da Windmill'i "tamamen open source" diye konumlandırmayı teknik olarak doğru kılsa da pratikte daha çok "source-available"a yaklaştırıyor. Windmill lisansı bu şekilde yorumlamak istemiyorsa bunu netleştirmeli.
  • Windmill harika. Self-host edilebilmesi ve geliştirici deneyimine (Developer Experience, DX) sadık kalması gerekiyor. İşte kullanmam gerekmedi ama evde küçük web crawler'lar ve yt-dlp işleri çalıştırmak için kullanıyorum. Oldukça eğlenceli bir araç.
  • Lisans konusunda kafam karışık.
  • Kodu veritabanında saklayıp web IDE üzerinden düzenlemek ile kodu Git'e commit edip yalnızca normal geliştirme ve peer review süreçleriyle değiştirmek arasındaki dengeyi nasıl kuracağımı hâlâ bulamadım. Windmill esas olarak kodu veritabanında saklıyor ama Git repository'den senkronize olabilen bir API sunuyor. Belirli script'lere/özelliklere/secrets'a erişimi yalnızca sağlanan repository'den içe aktarılan workflow'larla sınırlayan kuralları zorunlu kılacak bir mekanizma olup olmadığını merak ediyorum.