castomFLOW

Run yang dapat Anda percaya

Tidak ada yang memperhatikan sebuah otomatisasi sampai ia mengirim sesuatu dua kali

Lalu semua orang memperhatikannya. Empat mekanisme di halaman ini ada karena kegagalan perangkat lunak semacam ini selalu sama, empat kegagalan itu, dan semuanya dapat dihindari lewat desain, bukan lewat kehati-hatian.

Simulasikan sebelum Anda menerbitkan

Dorong catatan nyata melalui alur kerja yang sedang dimatikan, dan baca kembali persis apa yang akan terjadi: jalur yang diambil, setiap nilai di setiap langkah, rumusan setiap pesan, dan permintaan yang akan dikirim ke setiap sistem eksternal.

Tidak ada yang keluar dari sistem. Tidak ada surel yang dikirim, tidak ada faktur yang dibuat, tidak ada penagihan yang dicoba, tidak ada baris yang ditulis. Panggilan eksternal dicatat sebagai niat, beserta muatan yang seharusnya dikirim, sehingga Anda dapat memastikan pemetaannya benar sebelum menjadi masalah seseorang.

Simulasi adalah cara Anda menjawab pertanyaan yang membuat orang enggan mengaktifkan otomatisasi: apa sebenarnya yang akan dilakukan ini?

Simulasi · pesanan 88 214Tidak ada yang dikirim
  • 1Validasi alamatCocok. Akan menulis 6 kolom.
  • ?KondisiPesanan di atas 1 000 zł? Tidak — 289,00 zł. Jalur pendek yang diambil.
  • 3FakturAkan melakukan POST ke sistem penagihan. Muatan ditampilkan selengkapnya.
  • !Tertangkap di siniTarif PPN dipetakan dari kolom yang salah. Ditemukan dalam simulasi, bukan di kotak masuk akuntan.

Terkirim: tidak adaDitagih: tidak ada

Setiap eksekusi berjalan pada versi saat ia masuk

Menerbitkan perubahan pada alur kerja tidak memengaruhi eksekusi yang sudah berada di dalamnya. Setiap eksekusi dikunci pada versi saat ia dimulai dan menyelesaikan versi tersebut, berapa pun lamanya dan seberapa pun banyak Anda menulis ulang di sela waktu.

Jadi Anda dapat menyusun ulang alur kerja sementara sepuluh ribu orang berada di tengah-tengahnya, dan setiap orang menyelesaikan alur yang dijanjikan kepada mereka. Alternatifnya — desain di mana seluruh jalur hilir dimaterialisasi saat masuk — adalah alasan mengapa menyunting otomatisasi yang sedang berjalan terasa berbahaya di sebagian besar alat. Di sini hal itu biasa saja.

Eksekusi baru mendapatkan versi baru sejak Anda menerbitkannya. Versi yang dijalankan oleh suatu eksekusi tercatat pada eksekusi itu, sehingga pertanyaan tentang perilaku di bulan Maret memiliki jawaban di bulan September.

Menyunting saat berjalanv4 → v5
  • 1Sebelum2 918 eksekusi sedang berjalan, semuanya di v4. Beberapa menunggu selama dua hari.
  • 2Terbitkan v5Dua langkah diurutkan ulang, satu pesan ditulis ulang.
  • 3Sesudah2 918 eksekusi itu menyelesaikan v4. Semua yang dimulai sejak 11:40 menjalankan v5.
  • §Tidak ada seorang punyang menerima setengah dari satu alur kerja dan setengah dari alur kerja lain.

Versi tercatat pada setiap eksekusiVersi lama disimpan

Percobaan ulang yang tidak dapat mengirim ganda

Sebuah langkah adalah fungsi murni dari masukannya, dan efeknya dikomit bersamaan dengan kemajuan eksekusi ke langkah berikutnya. Tidak ada celah di mana pesan sudah terkirim tetapi eksekusi tidak mengetahuinya.

Itulah seluruh kuncinya, dan itu sifat struktural, bukan sekadar janji. Worker yang mati di tengah langkah — deploy, crash, atau mesin yang hilang — meninggalkan eksekusi tepat di posisinya. Worker lain mengambilnya dan menjalankan ulang langkah tersebut. Karena efek dan kemajuan dikomit sebagai satu, keduanya terjadi atau tidak keduanya.

Panggilan keluar ke sistem yang mendukung kunci idempotensi membawa satu, diturunkan dari eksekusi dan langkahnya, sehingga pihak lain juga dapat mengenali pengulangan tersebut.

Worker mati di tengah pengirimanDipulihkan
  • 1Langkah 5 dimulaiKirim pemberitahuan pengiriman.
  • ✕Worker matiDeploy. Tidak ada yang terkomit.
  • 2Diambil kembaliWorker lain menemukan eksekusi masih di langkah 5.
  • ✓Terkirim sekaliPelanggan menerima satu surel, bukan dua.

Efek dikomit bersama kemajuanKunci idempotensi per eksekusi dan per langkah

Log yang ditulis agar dapat dibaca manusia

Setiap eksekusi, setiap langkah, cabang yang diambil, dan nilai yang menentukannya. Waktu tempuh per langkah. Permintaan dan respons dari setiap panggilan eksternal, dengan kredensial disensor. Versi tempat eksekusi berjalan. Di mana eksekusi sedang menunggu dan sampai kapan.

Ketika seseorang bertanya apa yang terjadi pada pesanan yang dibuat pada tanggal empat belas, ada jawabannya, dan menemukannya butuh satu menit, bukan satu sore penuh mencocokkan log dari tiga sistem.

Eksekusi yang gagal terkumpul di satu tempat dengan penyebab yang dikelompokkan, sehingga "empat puluh satu kegagalan semalam" terjawab menjadi "satu pemasok mengembalikan 503 selama sembilan menit", bukan empat puluh satu penyelidikan terpisah.

Semalam, dikelompokkan41 kegagalan
  • 1Satu penyebabAPI pemasok mengembalikan 503 antara pukul 02:41 dan 02:50.
  • 2Apa yang terjadiSeluruh 41 dicoba ulang; 39 berhasil pada percobaan kedua.
  • 3TersisaDua berhenti dan menunggu penanganan manusia. Keduanya tercantum beserta baris yang gagal.
  • §Bukan empat puluh satupenyelidikan. Hanya satu, plus keputusan tentang dua catatan.

Kredensial disensorVersi tercatat

Yang tidak kami klaim

Kami tidak menampilkan angka uptime di halaman pemasaran, karena angka tanpa jendela pengukuran dan definisi "aktif" hanyalah hiasan. Jika Anda membutuhkannya secara kontraktual, tanyakan dan kami akan membahas apa yang benar-benar dapat kami janjikan.

Kami juga tidak dapat membuat API milik pihak lain menjadi andal. Jika sebuah penyedia sedang mati, alur kerja yang bergantung padanya akan menunggu, mencoba ulang, dan akhirnya berhenti dengan alasan yang jelas. Yang dapat kami janjikan adalah kegagalan itu terlihat, tidak merusak apa pun, dan melanjutkan eksekusi tidak mengirim pesan tersebut untuk kedua kalinya.

Tentang penundaan: eksekusi yang menunggu selama dua hari berupa wake_at pada eksekusi tersebut, bukan pekerjaan yang duduk dalam antrean. Itulah sebabnya sebuah alur kerja dapat menahan seratus ribu eksekusi dalam penundaan tiga minggu tanpa biaya apa pun, dan mengapa jumlah eksekusi yang sedang menunggu bukanlah hal yang perlu Anda pikirkan.

Eksekusi yang tidak pernah Anda pikirkan adalah yang berhasil.