Sticky Session (atau disebut juga session persistence) adalah metode yang digunakan oleh penyeimbang beban (load balancer) untuk mengarahkan permintaan (request) dari pengguna yang sama ke server backend yang sama selama durasi sesi tertentu. Berbeda dengan load balancing standar yang mendistribusikan setiap permintaan baru secara acak atau bergantian (round-robin) ke server manapun di dalam klaster, sticky session memastikan konsistensi koneksi berbasis identitas klien seperti alamat IP atau kuki (cookie).
Dalam arsitektur aplikasi modern, teknik ini krusial untuk menangani aplikasi yang menyimpan data sesi pengguna (stateful) secara lokal di memori server, seperti keranjang belanja e-commerce atau status login sementara, sebelum data tersebut disinkronkan ke basis data terpusat.
Matriks Perbandingan: Sticky Session vs Standard Load Balancing
| Parameter | Sticky Session | Standard Load Balancing |
|---|---|---|
| Routing Permintaan | Konsisten ke server yang sama berdasarkan sesi | Distribusi merata ke server berbeda (Round-Robin, dll) |
| Penyimpanan Sesi | Lokal di memori server backend tertentu | Memerlukan penyimpanan terpusat (Redis/Memcached) |
| Risiko Bottleneck | Tinggi jika satu server menerima trafik pengguna masif | Rendah karena beban tersebar merata |
| Penanganan Failover | Sesi hilang jika server tujuan down | Aman selama sesi disimpan di database eksternal |
Mekanisme Kerja Sticky Session
Load balancer menerapkan beberapa teknik utama untuk mengenali dan mempertahankan jalur koneksi pengguna ke server backend yang spesifik:
- Cookie Insertion: Load balancer menyisipkan kuki khusus pada respons pertama ke peramban (browser) pengguna. Permintaan selanjutnya akan membawa kuki ini sehingga load balancer tahu server mana yang harus dituju.
- Cookie Rewriting: Load balancer memodifikasi kuki yang sudah ada dari aplikasi server untuk menyertakan informasi identifikasi server.
- Source IP Affinity: Load balancer mencatat alamat IP sumber dari klien. Semua permintaan dari IP yang sama akan dirujuk ke server yang sama. Metode ini sering gagal jika pengguna berada di belakang NAT (Network Address Translation) perusahaan besar.
Kelebihan dan Kekurangan
Meskipun mempermudah pengelolaan aplikasi stateful tanpa arsitektur terdistribusi yang rumit, metode ini memiliki kelemahan struktural:
- Kelebihan: Mengurangi latensi karena tidak perlu mengambil ulang data sesi dari database eksternal setiap kali ada request, serta mempermudah migrasi aplikasi monolitik lama ke lingkungan klaster.
- Kekurangan: Menyebabkan ketidakseimbangan beban (load imbalance) jika ada satu pengguna yang menghasilkan trafik sangat tinggi. Selain itu, jika server tujuan mengalami kegagalan (crash), seluruh sesi pengguna yang terikat pada server tersebut akan hilang seketika.
Contoh Konfigurasi Nginx untuk Sticky Session
Berikut adalah contoh konfigurasi dasar menggunakan modul upstream hash pada Nginx berdasarkan kuki:
upstream backend_cluster {
ip_hash;
server 192.168.1.101:80;
server 192.168.1.102:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_cluster;
}
}
Penggunaan direktif ip_hash memastikan bahwa klien dengan IP yang sama akan selalu dilayani oleh server web Nginx yang sama di dalam blok upstream.