Portal/Notes πŸ“
Programming

Stateful VS Stateless

Perbedaan antara sistem stateful dan stateless β€” cara mereka mengelola state, kelebihan, kekurangan, dan contoh penggunaannya.

Versi Bahasa Indonesia. Baca dalam Bahasa Inggris

Istilah stateful dan stateless sering digunakan dalam pengembangan perangkat lunak untuk menggambarkan bagaimana sistem, aplikasi, atau layanan menangani dan mengelola state, yang mengacu pada data atau informasi tentang interaksi sebelumnya.

AspekStatefulStateless
Penyimpanan StateYaTidak
Konteks RequestBergantung pada interaksi sebelumnyaIndependen
KompleksitasLebih tinggiLebih rendah
ScalingMenantangLebih mudah
PemulihanMemerlukan restorasi stateSederhana, tanpa state
ContohGame online, sesi databaseRESTful API, HTTP, DNS

Stateful

Sistem atau aplikasi stateful mengingat state interaksi klien di berbagai request atau sesi.

Karakteristik

  • Mempertahankan State: Melacak data spesifik klien atau kemajuan operasi.
  • Tergantung pada Konteks: Setiap request terikat dengan interaksi sebelumnya.
  • Manajemen Sesi: Sering memerlukan mekanisme seperti session ID atau cookie untuk mempertahankan state.
  • Intensif Sumber Daya: Membutuhkan penyimpanan atau memori tambahan untuk melacak state.

Kelebihan

  • Pengalaman yang disesuaikan dan sadar konteks untuk pengguna.
  • Efisien untuk alur kerja yang memerlukan beberapa langkah.

Kekurangan

  • Kompleks untuk diskalakan karena state harus dibagikan atau direplikasi di seluruh server.
  • Lebih menantang untuk pulih dari kegagalan karena state perlu dipulihkan.

Contoh

  • TCP: karena kedua sistem perlu mempertahankan informasi tentang sesi itu sendiri selama siklus hidupnya.
  • Session-based Authentication: karena server menyimpan semua informasi tentang sesi menggunakan session_id.

Stateless

Sistem atau aplikasi stateless tidak menyimpan state apa pun antar request. Setiap request diperlakukan sebagai independen dan mandiri.

Karakteristik

  • Tidak Ada Memori Interaksi Sebelumnya: Setiap request berisi semua informasi yang diperlukan untuk pemrosesan.
  • Lebih Mudah untuk Scaling: Setiap request independen, memungkinkan horizontal scaling.
  • Pemulihan Lebih Sederhana: Tidak ada state yang perlu dipulihkan setelah kegagalan.
  • Ringan: Memerlukan lebih sedikit sumber daya karena tidak ada state yang disimpan.

Kelebihan

  • Skalabilitas dan fault tolerance lebih sederhana untuk dicapai.
  • Lebih mudah dipelihara dan diuji karena independensi request.

Kekurangan

  • Mungkin memerlukan data tambahan untuk dikirim dengan setiap request, meningkatkan overhead.
  • Kesesuaian terbatas untuk alur kerja kompleks yang memerlukan state.

Contoh

  • HTTP Protocol: Setiap request HTTP bersifat stateless secara default.
  • RESTful API: Prinsip REST menganjurkan komunikasi stateless.
  • Serverless Computing: Fungsi dipanggil dan dieksekusi tanpa menyimpan konteks.
  • DNS: Menyelesaikan nama domain ke alamat IP tanpa mempertahankan state.

Kesimpulan

  • API Stateless adalah pilihan yang lebih disukai untuk sistem yang dapat diskalakan karena menyederhanakan horizontal scaling dan fault tolerance.
  • API Stateless secara inheren lebih mudah untuk diskalakan karena setiap request mandiri dan tidak bergantung pada state sisi server. Ini memudahkan distribusi request di beberapa server.
  • Gunakan protokol komunikasi stateless (misalnya REST) dan sertakan semua data yang diperlukan (seperti token autentikasi atau konteks request) di setiap request API.
  • Gunakan token-based authentication seperti JWT (JSON Web Tokens), di mana data autentikasi dienkode dalam token dan diverifikasi tanpa state sisi server.

Edit on GitHub

Last updated on

Stateful VS Stateless | Faisal Affan