Mesin alur kerja deterministik yang dibangun di atas Model Komponen WASM
Status proyek / Penafian
Ini adalah pra-rilis .
Repo ini berisi kode backend untuk pengembangan dan pengujian lokal. Perangkat lunak ini tidak memiliki jaminan kompatibilitas mundur untuk CLI, gRPC, atau skema database.
Platform yang didukung
Linuxx64
Prinsip inti
Skema pertama, menggunakan bahasa WIT model Komponen WASM sebagai antarmuka antara alur kerja dan aktivitas.
Kegembiraan pengembang backend
Proses tunggal untuk menjalankan pelaksana, alur kerja, dan aktivitas, dengan pintu keluar untuk aktivitas eksternal (direncanakan).
Percobaan ulang otomatis pada kesalahan, batas waktu, eksekusi alur kerja berlanjut setelah server mogok.
Observabilitas (direncanakan) - parameter dan hasil bersama dengan hierarki fungsi harus dipertahankan.
Komposabilitas - menyusun alur kerja, memanggil aktivitas yang ditulis dalam bahasa apa pun yang didukung
Putar ulang dan fork alur kerja yang ada (direncanakan). Perbaiki masalah dan lanjutkan.
Konsep dan fitur
Aktivitas yang harus bersifat idempoten (retriable), sehingga dapat dihentikan dan dicoba kembali kapan saja. Kontrak ini harus dipenuhi oleh kegiatan itu sendiri.
Kegiatan WASI dilaksanakan di sandbox WASM
Mampu menghubungi server HTTP menggunakan klien HTTP WASI 0.2.
Mampu membaca/menulis ke sistem file (direncanakan).
Dukungan durasi eksekusi maksimal, setelah itu eksekusi ditangguhkan hingga batas waktu terputus-putus.
Percobaan ulang pada kesalahan - pada perangkap WASM (panik), atau ketika mengembalikan hasil Kesalahan.
Percobaan ulang pada batas waktu dengan backoff eksponensial.
Hasil eksekusi tetap ada.
Opsi kinerja untuk menjaga eksekusi alur kerja induk tetap panas atau membongkar dan memutar ulang riwayat peristiwa.
Alur kerja deterministik
Dapat diputar ulang: Eksekusi dipertahankan pada setiap perubahan status, sehingga dapat diputar ulang setelah terjadi interupsi atau kesalahan.
Berjalan di kotak pasir WASM, terisolasi dari lingkungan
Secara otomatis mencoba lagi jika terjadi kegagalan seperti kesalahan basis data, batas waktu habis, atau bahkan jebakan (panik).
Mampu memunculkan alur kerja atau aktivitas anak, baik memblokir hingga hasil tiba atau menunggu hasil secara asinkron.
Alur kerja dapat diputar ulang dengan menambahkan pesan log dan perubahan lain yang tidak mengubah determinisme eksekusi (direncanakan).
Kumpulan gabungan memungkinkan konkurensi terstruktur, baik memblokir hingga eksekusi anak selesai, atau membatalkan eksekusi yang tidak ditunggu (direncanakan).
webhook WASI
Dipasang sebagai jalur URL, melayani lalu lintas HTTP.
Mampu menelurkan alur kerja atau aktivitas anak.
Eksekutor mencuri pekerjaan
Mengunci secara berkala kumpulan eksekusi yang sedang tertunda, memulai/melanjutkan eksekusinya
Membersihkan eksekusi gantung lama dengan kunci kadaluwarsa. Eksekusi yang ada anggarannya akan dicoba ulang (direncanakan).
Kontrol konkurensi - membatasi jumlah pekerja yang dapat dijalankan secara bersamaan.
docker exec$CONTAINER_ID obelisk client component list
# See Usage for more details
Biner yang sudah dibuat sebelumnya
Unduh rilis terbaru dari halaman Rilis GitHub.
Menggunakan versi terbaru dari crates.io
Unduh menggunakan kargo-binstall
cargo binstall --locked obelisk
atau membangun menggunakan kargo
cargo install --locked obelisk
serpihan Nix
nix --extra-experimental-features nix-command --extra-experimental-features flakes run github:obeli-sk/obelisk
Penggunaan
Menghasilkan file konfigurasi sampel
obelisk server generate-config
Memulai server
obelisk server run
Mendapatkan daftar fungsi yang dimuat
obelisk client component list
Mengirimkan fungsi untuk dieksekusi (baik alur kerja atau aktivitas)
# Call fibonacci(10) activity from the workflow 500 times in series.
obelisk client execution submit testing:fibo-workflow/workflow.fiboa ' [10, 500] ' --follow
Tonggak sejarah
Milestone 1: Melepaskan biner - selesai
Mengaktifkan dan menjalankan aplikasi obelisk sebagai biner Linux
Penjadwalan alur kerja dan aktivitas wasm, percobaan ulang pada batas waktu dan kegagalan
Kegigihan menggunakan sqlite
Meluncurkan alur kerja/aktivitas anak secara bersamaan menggunakan kumpulan gabungan
CLI dasar untuk konfigurasi dan penjadwalan komponen wasm
Rilis Github, gambar buruh pelabuhan, publikasikan ke crates.io, mendukung cargo-binstall
Milestone 2: Izinkan interaksi jarak jauh melalui CLI - selesai
Pindahkan komponen dan konfigurasi umum ke dalam file TOML
Tarik komponen -dari registri OCI
Publikasikan gambar obelisk ke Docker Hub (ubuntu, alpine)
dorongan komponen klien obelisk
gRPC API untuk manajemen eksekusi
Lacak induk paling atas
Params typecheck pada pembuatan, introspeksi tipe semua fungsi dalam sistem
Konfigurasi logging dan penelusuran, mengirimkan peristiwa ke kolektor OTLP
Tonggak Pencapaian 3: Webhook, Verifikasi, Konkurensi Terstruktur, UI Web - dimulai
Pemicu webhook HTTP dapat memulai eksekusi baru (alur kerja dan aktivitas), dapat menunggu hasil sebelum mengirimkan respons.
Meneruskan stdout dan stderr (dapat dikonfigurasi) aktivitas dan webhook
Dukungan untuk penelusuran terdistribusi, logging dari komponen yang dikumpulkan oleh OTLP
Memetakan dari hasil eksekusi apa pun (misalnya jebakan, batas waktu, varian err) ke hasil eksekusi lainnya melalui -await-next
Verifikasi server - mengunduh komponen, memeriksa konfigurasi TOML dan mencocokkan impor komponen dengan ekspor.
Konkurensi terstruktur untuk kumpulan gabungan - memblokir induk hingga semua eksekusi anak selesai
UI berbasis HTML untuk menampilkan eksekusi, riwayat peristiwa, dan relasi
Cetak impor dan ekspor setiap komponen dalam format WIT
Kumpulan gabungan heterogen, memungkinkan satu kumpulan gabungan menggabungkan beberapa tanda tangan fungsi dan penundaan
Ekspos sistem file dengan pemetaan direktori untuk aktivitas, webhook
Ekspos konfigurasi jaringan untuk aktivitas, webhook
Keepalives untuk beraktivitas, perpanjang kuncian hingga selesai
Contoh dengan C#, Go, JS, Python
Ide masa depan
CLI interaktif untuk manajemen eksekusi
Aktivitas eksternal API gRPC
Generator aktivitas OpenAPI
Proses pemijahan dari kegiatan WASM, pembacaan outputnya
Tekanan balik: Batasan antrian yang tertunda, atau strategi penggusuran, melambat pada LimitReached
Dukungan pelaksana eksternal - memulai eksekusi hanya berdasarkan ekspor WIT. Pelaksana eksternal harus berbagi akses tulis ke database sqlite.
Label yang membatasi alur kerja/aktivitas bagi pelaksana
Penjadwalan berkala
Propagasi tenggat waktu
Propagasi pembatalan
Pengaturan kapasitas antrian, menambahkan tekanan balik pada penyerahan eksekusi
Kemampuan untuk mensimulasikan perilaku sistem dengan kegagalan yang disuntikkan
Beritahu aktivitas. Saat dipanggil, nilai kembaliannya harus diberikan melalui titik akhir API.
API untuk mencantumkan eksekusi dengan aktivitas pemberitahuan terbukanya.
Fungsi kueri hanya baca yang dapat dipanggil selama titik tunggu atau setelah eksekusi selesai.
Stdout opsional, ketekunan / penerusan stderr
Perutean ketergantungan cerdas dari pemanggil melalui impor antarmuka ke salah satu dari banyak komponen yang mengekspornya.
Percobaan ulang cerdas - Coba ulang anggaran, nonaktifkan percobaan ulang ketika aktivitas gagal dalam % permintaan tertentu
Jitter yang dapat dikonfigurasi ditambahkan ke percobaan ulang
Snapshot memori alur kerja untuk pemutaran ulang yang lebih cepat
Debugger perjalanan waktu untuk alur kerja, yang berfungsi di seluruh penerapan WASM
Kemampuan untuk memperbaiki serangkaian alur kerja, dengan sistem persetujuan ketika non determinisme terdeteksi
Lacak string ke asalnya di seluruh alur kerja dan aktivitas
Pemetaan webhook: menjalankan satu fungsi, menerjemahkan antara parameter yang ditentukan HTTP dan WIT, serta nilai kembalian
Penerusan konteks pelacakan terdistribusi untuk HTTP keluar serta webhook
Izinkan menentukan varian kesalahan permanen sebagai anotasi di WIT
Dukungan untuk saga (terdistribusi) - tentukan pengembalian aktivitas, panggil aktivitas tersebut pada alur kerja yang gagal
Membangun dari sumber
Siapkan dependensi pengembangan menggunakan nix flakes:
nix develop
# or `direnv allow`, after simlinking .envrc-example -> .envrc
Atau unduh semua dependensi secara manual, lihat dev-deps.txt dan verifikasi berbasis Ubuntu Dockerfile Jalankan programnya
cargo run --release
Tes Berjalan
./scripts/test.sh
Tes deterministik menggunakan simulator madsim
./scripts/test-madsim.sh
Berkontribusi
Proyek ini memiliki peta jalan dan fitur ditambahkan dan diuji dalam urutan tertentu. Jika Anda ingin menyumbangkan fitur, silakan diskusikan fitur tersebut di GitHub. Agar kami dapat menerima patch dan kontribusi lainnya, Anda perlu mengadopsi Perjanjian Lisensi Kontributor kami ("CLA"). Versi CLA terkini dapat ditemukan di sini.