Back to Blog

Stateless Backend

February 1, 20263 min
Stateless ArchitectureREST DesignCloud-Native Systems
Stateless Backend

Stateless Backend

Stateless Nedir?

Stateless, sunucunun her isteği bağımsız bir işlem olarak ele aldığı mimari yaklaşımdır.

Sunucu:

  • Önceki istekleri hatırlamaz
  • Kullanıcıya ait session bilgisini RAM’de tutmaz
  • Her isteği “ilk mesaj” gibi değerlendirir

Bu yüzden her request, işlem için gerekli tüm bilgileri kendi içinde taşımalıdır.

Stateful Nedir?

Stateful sistemde sunucu kullanıcıya ait durumu (state) belleğinde tutar.

Örnek:

  • “Ahmet giriş yaptı”
  • “Sepetinde 3 ürün var”

Bu bilgiler sunucunun RAM’inde saklanır.

Sorunlar:

  • Sunucu ölürse session kaybolur
  • Load balancer başka sunucuya yönlendirirse kullanıcı düşer
  • Sticky session gerekir

Stateless Nasıl Çalışır?

Stateless mimaride:

  • Sunucu kullanıcıyı hatırlamaz
  • Kullanıcı her istekte kimliğini kanıtlar
  • Sunucu doğrular
  • İşlemi yapar
  • Unutur

Örnek:

GET /orders
Authorization: Bearer eyJhbGciOi...

Sunucu:

  1. Token’ı alır
  2. Token’ı doğrular
  3. Kullanıcıyı belirler
  4. İşlemi yapar
  5. Hiçbir state saklamaz

Request bittiğinde süreç tamamen sona erer.

Stateless Mimaride State Nerede Tutulur?

Stateless, “hiç state yok” demek değildir. “State sunucunun belleğinde tutulmaz” demektir.

1. Client Tarafında

Genelde JWT kullanılır.

  • Kullanıcı kimliği
  • Yetkiler
  • Expiration

Token her istekte gönderilir.

2. External Store

Eğer state server tarafında tutulacaksa:

  • Redis
  • Memcached
  • Database

gibi tüm sunucuların erişebildiği merkezi bir yerde tutulur.

Stateless ve Horizontal Scaling

Stateless mimari, horizontal scaling için idealdir.

Client
  ↓
Load Balancer
  ↓
App1   App2   App3

Her sunucu aynı şekilde çalışır.

Hiçbir sunucu kullanıcıya özel state tutmadığı için:

  • İstek herhangi bir sunucuya gidebilir
  • Sticky session gerekmez
  • Failover sorunsuzdur

Stateful vs Stateless Karşılaştırma

ÖzellikStatefulStateless
SessionRAM’de tutulurClient / Redis’te tutulur
Sunucu çökmesiSession kaybolurEtkilenmez
Horizontal scalingZorKolay
Load balancerSticky session gerekirDirekt çalışır
Cloud uyumuDüşükYüksek

Stateful Örnek

req.session.userId = 42;

Sunucu kullanıcı state’ini saklar.

Stateless Örnek

Authorization: Bearer <JWT>

Sunucu hiçbir şey saklamaz.

WebSocket Neden Stateful?

WebSocket:

  • Kalıcı bağlantı kurar
  • Açık socket’leri RAM’de tutar
  • Bağlantı kimliklerini bellekte saklar

Örnek:

const clients = new Map();

Bu state’tir.

Sunucu restart olursa:

  • Tüm bağlantılar kopar
  • State kaybolur

Bu yüzden WebSocket doğası gereği stateful’dır.

WebSocket Nasıl Scale Edilir?

Dağıtık yapı gerekir.

Client
  ↓
Load Balancer
  ↓
WS1   WS2   WS3
   ↘  Redis Pub/Sub  ↙
  • Mesaj Redis’e gider
  • Diğer sunucular dinler
  • Kendi client’larına iletir

WebSocket connection stateful’dır Ama mesaj dağıtımı merkezi yapılır.

REST + WebSocket Birlikte Kullanım

KatmanYapı
REST APIStateless
AuthJWT
WebSocket bağlantıStateful
Event dağıtımıRedis

Modern sistemlerde genelde:

  • API → Stateless
  • WebSocket → Distributed stateful

Kritik Noktalar

Stateless backend için:

  • JWT expiration olmalı
  • Refresh token stratejisi olmalı
  • Token blacklist düşünülmeli
  • Idempotent endpoint tasarlanmalı
  • External cache kullanılmalı

Stateless tasarım, doğru yapılmazsa güvenlik açığı üretir.