- Windmill membuktikan melalui benchmark bahwa dibandingkan mesin workflow lain seperti Airflow, Prefect, dan Temporal, ini adalah mesin workflow open-source yang dapat di-self-host paling cepat
- Windmill mendukung berbagai bahasa pemrograman dan menyediakan lingkungan pengembangan terintegrasi yang memungkinkan membangun serta menguji workflow hanya dalam hitungan menit tanpa SDK yang rumit atau proses deployment yang kompleks
- Airflow/Prefect hanya mendukung satu runtime (Python), tetapi Windmill mendukung Python, Typescript, Go, Bash, serta mendukung kueri SQL langsung untuk BigQuery, Snowflake, Mysql, dan Postgresql
- Dibandingkan dengan Temporal, Temporal lebih berfokus pada pengelolaan job queue, sedangkan Windmill juga berfungsi sebagai mesin eksekusi yang durable dengan fitur menunggu event (reactivity)
Perbedaan antara mesin workflow dan job queue
- Job queue adalah inti dari mesin workflow, dan banyak developer membangun logika mereka sendiri sehingga memanfaatkan job queue tanpa menggunakan mesin workflow
- Sudah ada berbagai implementasi queue seperti SQS, Kafka, Redis with RMSQ, dan Orban
- Banyak developer membangun logika mereka sendiri dengan berpusat pada job queue dan merasakan kepuasan serupa dengan mesin workflow (seolah membuat mesin workflow mereka sendiri)
Apa itu mesin workflow "all-inclusive"
- Mesin workflow mengoordinasikan workflow dalam sistem terdistribusi untuk menyelesaikan pekerjaan sambil mematuhi batasan dependensi antar tugas
- 5 keuntungan utama mesin workflow:
- Alokasi resource: dapat memanfaatkan cluster semaksimal mungkin, menetapkan semua tugas ke worker berbeda dengan resource berbeda (CPU, memori, GPU), dan memastikan seluruh resource worker dapat digunakan untuk tugas tersebut
- Pemrosesan paralel: jika karena batasan workflow beberapa tahap dapat dijalankan secara paralel (branch, for-loop), mesin workflow dapat mendispatch tahap tersebut bukan hanya ke thread, tetapi juga ke banyak worker yang terpisah secara fisik
- Observabilitas: setiap tugas memiliki ID unik dan dapat diamati secara individual, termasuk memeriksa input, log, output, dan status
- Durabilitas: jika mesin berhenti atau terjadi efek samping karena alasan tak terduga, workflow harus dapat dimulai ulang
- Workflow harus bisa restart secepat mungkin saat terjadi event tak terduga, dan salah satu cara mencapainya adalah idempotensi, yaitu satu tugas yang dijalankan berkali-kali memberikan efek yang sama seperti saat dijalankan sekali
- Jika tidak yakin, replay seluruh alur tanpa menghasilkan akibat tambahan. Ini biasanya diimplementasikan menggunakan file log dan SDK yang melewati efek samping jika ID unik yang melekat pada tugas menjadi bagian dari log
- Cara lain adalah membuat snapshot transaksional dari state alur dan menyimpan state setelah setiap tugas. Untuk restart, cukup muat ulang state terakhir lalu lanjutkan dari sana
- Windmill menggunakan pendekatan kedua dan mengasumsikan bahwa pengguna dapat mengimplementasikan idempotensi saat diperlukan di sisi user space
- Reaktivitas: menjeda alur sampai dapat dilanjutkan kembali berdasarkan event seperti webhook atau approval
Rahasia kecepatan Windmill
- Windmill memaksimalkan efisiensi melalui desain yang sederhana dan optimisasi dengan memanfaatkan Postgresql dan Rust
Desain sistem dan queue
- Windmill menyediakan satu binary yang dikompilasi dengan Rust, dan worker maupun server terhubung ke Postgresql, tetapi tidak saling terhubung satu sama lain
- Queue diimplementasikan langsung di dalam Postgresql, dan tugas dapat dipicu dari luar melalui API
State
- Mesin workflow merepresentasikan tugas sebagai finite state machine (FSM), sedangkan Windmill memperlakukan keseluruhan alur itu sendiri sebagai FSM
Pengiriman data
- Windmill menyediakan berbagai cara untuk pengiriman data, termasuk ekspresi JavaScript, berbagi folder sementara, dan integrasi S3
Efisiensi worker
- Worker Windmill memproses satu tugas pada satu waktu dan meningkatkan performa dengan menjalankan tugas tanpa container
Kesimpulan
- Windmill adalah runtime dan platform serverless open-source yang dapat di-self-host, berbasis Postgresql dan Rust, yang menawarkan kecepatan sangat tinggi melalui desain sederhana dan optimisasi
Opini GN⁺
Poin terpenting dari artikel ini adalah bahwa Windmill mendukung berbagai bahasa pemrograman dan menyediakan lingkungan pengembangan terintegrasi yang memungkinkan workflow dibangun dan diuji dengan cepat tanpa SDK yang rumit atau proses deployment yang kompleks. Karakteristik ini sangat berguna bagi software developer, dan performa serta efisiensi Windmill yang tinggi akan membantu developer merilis produk yang lebih baik dengan lebih cepat. Artikel ini berisi hal-hal menarik bagi developer, terutama mereka yang ingin membangun mesin workflow sendiri atau mengoptimalkan mesin yang sudah ada.
2 komentar
Windmill - platform open source untuk pembuatan aplikasi internal perusahaan berbasis Python dan otomatisasi
Tahun lalu pada bulan Mei sempat diperkenalkan sekilas, lalu developernya bilang belum siap untuk dipublikasikan dan berkata, “10 menit lagi saya akan wawancara YC!” lalu... dia menulis komentar bahwa dia lolos YC.
Setelah lolos YC dan melaju selama satu setengah tahun, akhirnya produknya resmi diluncurkan.
Komentar Hacker News