Tipe Saga Pattern
Pendahuluan
Pendahuluan mengenai Saga Pattern, silahkan lihat di sini
Penjelasan mengenai Saga Pattern - How To, silahkan lihat di sini
Saga pattern mempunyai beberapa kombinasi alur dan teknik.
Akan tetapi secara umum, ada 2 tipe/teknik yang dipakai, yaitu :
- Orkestrasi
- Koreografi
Orkestrasi
Meminjam istilah permusikan, maka Orkestrasi merupakan proses untuk membuat sebuah pertunjukan musik menjadi menarik dengan menggabungkan bunyi dari berbagai macam alat musik dengan panduan/arahan seorang Conductor di depan.
Dalam tipe orkestrasi ini, hal penting didalamnya adalah adanya seorang Conductor/Manager/Coordinator yang mengelola urutan musik dan alur lagunya.
Begitu pula dengan Saga Pattern berbasis Orkestrasi.
Akan ada sebuah proses utama bernama Orchestration Manager / Coordinator.
Proses Coordinator ini mengetahui secara lengkap mengenai tahapan-tahapan apa saja yang dibutuhkan dalam sebuah transaksi.
Ketika sebuah Saga pattern dimulai, maka Coordinator ini akan melakukan eksekusi dengan memanggil secara berurutan tahapan-tahapan terpisah yang dibutuhkan dalam sebuah transaksi.
Pemanggilan ini bisa dengan cara sinkronous, asynchronous, message-based, atau event-based.
Microservice yang menerima panggilan ini akan melakukan operasi yang dibutuhkan, kemudian mengirimkan status berhasil/gagal ke coordinator.
Berdasarkan status/message yang diterima oleh Coordinator, maka Coordinator akan memutuskan untuk melanjutkan ke microservice selanjutnya, atau melakukan inisiasi rollback terhadap transaksi, atau melakukan inisiasi retryable terhadap transaksi lokal yang gagal.
Koreografi
Meminjam istilah pertarian, maka Koreografi merupakan rancangan alur untuk sebuah pertunjukan tari dimana yang dilakukan adalah komposisi dan harmonisasi diantara penari di saat pertunjukan berlangsung.
Dalam tipe Koreografi ini, hal penting didalamnya adalah adanya harmonisasi diantara penari, dan tidak ada coordinator yang melakukan perintah di waktu pertunjukan kepada seorang / beberapa orang penari untuk melakukan sesuatu.
Masing-masing penari mempunyai posisi dan tugasnya untuk berinteraksi dengan beberapa penari yang sudah ditentukan sebelumnya.
Tergantung dari penari lainnya melakukan apa, penari tersebut akan menyesuaikan.
Akan tetapi sebenarnya di belakang layar tetap ada Coordinator yang melakukan pemantauan mengenai pertunjukan tari tersebut sesuai dengan yang diharapkan atau tidak.
Begitu pula dengan Saga Pattern berbasis Koreografi.
Akan tetap ada sebuah proses Coordinator, tetapi bukan untuk mengatur alur dari tahapan-tahapan tersebut atau interaksi antara tahapan-tahapan transaksi.
Akan tetapi akan berfungsi sebagai pengawas saja, dan menentukan sebuah transaksi berhasil atau gagal secara keseluruhan, atau bisa juga berfungsi untuk menginisiasi aksi tambahan ketika sebuah transaksi lokal gagal (seperti kirim alert kalau gagal, record data berapa kali gagal untuk data analitikal)
Sementara interaksi diantara tahapan-tahapan transaksi itu sendiri bisa saja tidak dikelola lagi oleh Coordinator, akan tetapi melalui koordinasi masing-masing microservice dengan memakai messaging atau event.
Proses dalam Saga pattern tipe ini bisa saja dimulai dari event/message yang masuk ke transaksi, atau bisa saja di mulai oleh Coordinator.
Microservice pertama yang menerima/subscribe event ini akan melakukan operasi yang dibutuhkan, kemudian mengirimkan event lain yang akan dikomsumsi oleh microservice lain.
Status dari operasi tiap tahapan ini tetap akan dikirimkan ke Coordinator, baik Coordinator sebagai proses terpisah, atau sebagai library yang ditempel ke tiap microservice yang terkait.
Berdasarkan status/message/event yang diterima oleh Coordinator, maka Coordinator akan memutuskan bahwa transaksi secara keseluruhan berhasil/gagal, atau perlu di retryable.