State Management
Pendahuluan
Di dalam dunia yang berubah, maka orang juga berubah, begitu pula dengan sistem
- Philosofer bala-bala
Tidak seperti lagunya Marcell :
Kehidupan menjadi berarti kalau berubah dan bergerak.
Tidak terkecuali untuk sebuah sistem.
Sebuah sistem yang misalnya awalnya adalah monolitik, sekarang menjadi microservice.
Atau sebuah sistem yang sebelumnya hanya punya satu buah server saja, sekarang menjadi cluster of server.
Kondisi terkini dari sebuah server itu, bisa kita anggap sebuah State.
Kenapa perlu state ?
Tentu saja perlu.
Ketika berhadapan dengan sistem yang kompleks, maka kita perlu tahu dulu seperti apa sistem yang sedang berjalan.
Koneksinya kemana, berbuat apa, dengan siapa, jam berapa..
Loh..kok..
Punya hubungan khusus dengan siapa, pakai cara apa, berapa lama, dst.
Sebelum akhirnya kita memutuskan apa saja yang harus dilakukan terhadapnya.
Tipe dari State ?
Kalau kita lihat, ada 2 tipe dari state :
- System State
- Transaction state.
Contoh :
System State
System state itu berhubungan dengan konfigurasi, misalnya :
- dalam membuat komponen di Cloud memakai Terraform, maka kita bisa mendapatkan terraform state berupa kondisi sekarang dari komponen yang ada di Cloud.
- misalnya ketika melakukan restart terhadap sebuah operating system, maka kita akan menemukan juga state nya Started, Ready, Running, shutdown, dll.
- ketika melakukan deployment komponen atau artifact, maka tentunya ada state : “Initiating”, “Deploying”, “Deployed”, dst
- di lingkungan microservice, untuk menentukan sebuah microservice bisa di call dari begitu banyak microservice, bisa dilihat dari state nya yang Starting, Registering, Shutdown, dst.
- dll.
Transaction State
Transaction state itu lebih ke abstraksi diatasnya lagi, seperti :
- di sebuah transaksi Saga Pattern, maka ada state bahwa sebuah submission pada saat ini berada di state/step A, belum sampai pada state terakhirnya.
- di sebuah transaksi Database, maka ada state mengenai transaksi tersebut, apakah lagi pending, committed, published, dll.
- di angular/react, juga ada state management untuk mengecek perubahan yang terjadi di UI , misalnya dengan zonejs atau signal (di Angular)
Mengelola state itu mudah ?
Siapa bilang ??
Mengelola state itu tidak mudah.
Mengelola state (termasuk mengambilnya, membandingkannya dengan yang baru , dan kemudian mengubahnya) bukan persoalan sederhana.
Mengelola state artinya kita harus punya beberapa hal :
- semua kemungkinan state yang mungkin terjadi.
- penambahan dan pengurangan state. = meyimpan data state dengan cara yang efektif.
- melakukan update state dengan cara yang efektif
- melakukan routing terhadap state yang ada.
- menyebarkan informasi state dengan cara yang efektif juga.
- dll..
Contohnya di dalam melakukan Manage State di microservice.
Katakanlah pada kasus Saga Pattern.
- untuk bisa menyimpan state sebuah Saga, maka kita misalnya implementasikan Outbox Pattern , yaitu menaruh state nya di Database atau file external.
- untuk bisa melanjutkan atau mengubah state nya, maka kita perlu membuat routing dari sebuah state ke state berikutnya.
- untuk bisa menyebarkan informasi mengenai state nya, kita perlu misalnya mengirimkan melalui messaging.
- dll.
Begitu pula untuk sistem lainnya.
State Management membutuhkan perencanaan dan implementasi yang komprehensif agar tidak keliru dalam pelaksanannya.