Sticky session là cấu hình load balancer luôn đẩy request của cùng một client về đúng một backend, thường bằng cookie do LB phát ra hoặc hash IP nguồn.
upstream app {
ip_hash; # same client IP -> same backend
server app1:8080;
server app2:8080;
}Vì sao nên tránh:
- Tải lệch: một backend hút phải nhóm client nặng thì không san sẻ được, thuật toán cân bằng mất tác dụng.
- Mất dữ liệu khi node chết: session nằm trong RAM node đó, node restart là user bị đăng xuất.
- Cản autoscaling: thêm node mới không nhận được lưu lượng cũ; muốn scale-in phải chờ drain.
- Deploy khó: rolling update nào cũng đá một phần user ra.
Cách đúng: làm app stateless, đẩy session ra kho dùng chung (Redis) hoặc dùng token tự chứa (JWT) — khi đó request nào rơi vào node nào cũng như nhau.
Khi nào chấp nhận: kết nối có trạng thái thật sự (WebSocket đang mở, phiên upload nhiều phần đang dở), hoặc hệ legacy giữ session in-memory chưa kịp tách. Ngay cả khi đó vẫn nên coi sticky là giải pháp tạm.