Tidak semua proses bisnis selesai dalam satu request HTTP. Pembuatan pesanan, pembayaran, pengiriman, provisioning layanan, dan sinkronisasi ke beberapa sistem biasanya terdiri dari beberapa langkah yang dapat berjalan lama serta memiliki kemungkinan gagal di tengah jalan.
Laravel News memperkenalkan Saga Lara Flow, package Laravel dari Andriy Karpishyn yang dirancang untuk menjalankan proses bisnis panjang sebagai metode PHP yang dapat direplay. Package ini juga menangani compensating transaction ketika salah satu langkah tidak berhasil.
Masalah yang ingin diselesaikan
Queue biasa memang dapat menjalankan pekerjaan di background, tetapi alur multi-langkah tetap membutuhkan cara untuk mengetahui langkah terakhir yang berhasil, melanjutkan proses, dan membatalkan efek dari langkah sebelumnya. Tanpa pola yang jelas, kode workflow mudah berubah menjadi kumpulan kondisi retry yang sulit dipantau.
Pola saga membagi proses menjadi beberapa aksi. Setiap aksi dapat memiliki aksi kompensasi. Jika langkah berikutnya gagal, sistem tidak melakukan rollback database global seperti transaksi singkat, melainkan menjalankan kompensasi yang sudah disiapkan untuk mengurangi dampak dari pekerjaan sebelumnya.
Contoh alur di aplikasi
- Membuat order dan menyimpan status awal.
- Memesan stok dari layanan inventory.
- Meminta proses pembayaran.
- Mengirim instruksi ke layanan pengiriman.
- Jika langkah tertentu gagal, jalankan kompensasi yang sesuai dan catat statusnya.
Contoh tersebut bukan berarti semua sistem harus menggunakan package saga. Pemilihannya bergantung pada jumlah integrasi, kebutuhan retry, konsistensi data, serta kemampuan tim dalam melakukan observability dan recovery.
Hal yang perlu diperhatikan
Compensating transaction bukan penghapus kejadian. Jika pembayaran eksternal sudah berhasil, kompensasi bisa berupa refund atau pembatalan, bukan mengembalikan database ke kondisi semula. Karena itu, setiap aksi sebaiknya idempotent, memiliki status yang jelas, dan menyimpan informasi untuk audit.
Retry juga harus dirancang dengan hati-hati. Tim perlu menentukan batas percobaan, timeout, dead-letter handling, serta cara memberitahu operator ketika kompensasi gagal. Workflow yang durable tetap membutuhkan monitoring yang baik.
Kesimpulan
Saga Lara Flow menarik bagi aplikasi Laravel yang memiliki proses bisnis panjang dan membutuhkan pemulihan terstruktur. Nilai utamanya terletak pada cara workflow dirangkai, direplay, dan dikompensasi ketika terjadi kegagalan—bukan sekadar menjalankan job secara asynchronous.
Sumber asli:
https://laravel-news.com/saga-lara-flow