ÖZET VE TEKNİK CEVAP
Kalıcı WebSocket bağlantılarını hafif ağ geçidi podlarında sonlandırıp, mesaj dağıtımını dağıtık bir Pub/Sub omurgası (Redis / NATS) üzerinden yürüterek, işletim sistemi soket belleğini optimize edip istemci yeniden bağlanmalarını rastgele gecikmeli (jitter) üstel geri çekilmeyle kademelendirerek.
Mühendislik El Kitabı & Mekanizma
1. Temel Çalışma Mekanizması
Milisaniyeler içinde tamamlanan durumsuz HTTP'nin aksine, WebSocket bağlantıları durumlu TCP soketleri olarak süresiz açık kalır. Kullanıcı A Pod 1'e, Kullanıcı B ise Pod 2'ye bağlıysa, Pod 1 doğrudan B'ye mesaj iletemez. Yatay ölçekleme dağıtık bir Pub/Sub omurgası (Redis Pub/Sub, NATS veya Kafka) gerektirir. Pod 1 bir mesaj aldığında bunu omurga kanalına yayımlar; o kanalı dinleyen tüm podlar olayı alıp kendi yerel aktif WebSocket istemcilerine iletir. İşletim sistemi çekirdek optimizasyonu (`sysctl fs.file-max`, `net.ipv4.tcp_rmem`) boşta duran soket başına RAM tüketimini 50KB'tan 4KB'ın altına indirerek tek bir 16GB sunucuda 500.000 eşzamanlı soket tutmayı mümkün kılar.
2. Doğru Kullanım Senaryosu
Gerçek zamanlı ortak çalışma araçları (Figma benzeri), çok oyunculu oyunlar, borsa canlı emir defterleri, canlı yayın sohbetleri ve anlık bildirim ağ geçitleri.
3. Prodüksiyon Arıza Modları
1) EMFILE Limit Çöküşü: Linux varsayılan `1024` dosya tanıtıcısı sınırına takılıp tüm yeni bağlantıların anında reddedilmesi; 2) Yeniden Bağlanma Fırtınası (Thundering Herd): Yeni sürüm dağıtımında 500.000 istemcinin aynı anda kopup 1 saniye içinde tekrar bağlanarak kimlik doğrulama veritabanını çökertmesi; 3) Redis Bellek Taşması: Yavaş podların Redis çıktı tamponlarını şişirip merkezi Redis'i OOM ile öldürmesi.
4. Teşhis ve Telemetri Sinyalleri
Düğüm başına açık TCP soket sayısı (`ss -s`), çekirdek soket bellek kullanımı (`netstat -m`), Redis pub/sub mesaj iletim gecikmesi ve dağıtım anındaki istemci yeniden bağlanma sıçramaları.
5. Önleme ve Mimari Bariyerler
Linux sistem limitlerini yükseltin (`ulimit -n 1048576`); tüm istemci SDK'larında rastgele gecikmeli (full jitter) üstel geri çekilmeyi zorunlu kılın; aşamalı bağlantı tahliyesi (dakikada %5 koparma) yapan kademeli dağıtımlar uygulayın ve 30 saniyelik kalp atışı (ping/pong) ile ölü soketleri temizleyin.
6. Mimari Ödünleşimler (Trade-offs)
Mikrosaniyeler seviyesinde gerçek zamanlı çift yönlü iletişim sağlar; buna karşılık durumlu sunucu filoları yönetme, zorlu kademeli güncelleme tahliyeleri ve pub/sub omurga altyapı maliyeti getirir.
Vaka İncelemesi (TinyCTO Örneği)
TinyCTO Vaka 094: Canlı sohbet servisine atılan bir yama, 800.000 WebSocket kullanıcısını aynı anda kopardı. 800.000 istemci aynı saniyede `/auth` ucuna yüklenerek PostgreSQL kullanıcı veritabanını 40 dakika kilitledi. İstemci koduna 0-60 saniyelik rastgele jitter eklenmesi ve Envoy aşamalı bağlantı tahliyesi kurulması sonraki tüm kesintileri tamamen engelledi.
İnteraktif Konsept Alıştırmaları
3 AlıştırmaWebSocket bağlantılarını yatayda ölçeklemek için neden Redis veya NATS gibi bir Pub/Sub omurgası gerekir?
WebSocket mimarilerinde 'Yeniden Bağlanma Fırtınası' (Thundering Herd) nedir ve nasıl önlenir?
Varsayılan Linux `ulimit -n` 1024 sınırı WebSocket sunucuları için neden ölümcüldür?
WebSocket Durumlu Bağlantı Ölçekleme ve Pub/Sub Omurgası — Sıkça Sorulan Sorular
Server-Sent Events (SSE) ile WebSocket nasıl karşılaştırılır?
SSE standart HTTP/2 üzerinde tek yönlüdür (yalnızca sunucudan istemciye); bu da onu daha basit, kolay dengelenir ve önbellek dostu yapar. WebSocket ise çift yönlüdür ve istemciden sunucuya anlık veri iletimi için gereklidir.
WebSocket sunucularında kullanıcı sohbetlerini kesmeden kademeli dağıtım (rolling update) nasıl yapılır?
Bağlantı tahliyesi (connection draining) kullanın: eski podun yeni bağlantı almasını durdurun, dakikada %5 istemciye 'yakında_tekrar_bağlan' sinyali gönderin ve podu kapatmadan önce yeni podlara geçmelerini bekleyin.
WebSocket sağlığı için Kalp Atışı (Ping/Pong) sinyalleri neden kritiktir?
Ağ değiştiren veya tünelden geçen mobil cihazlar 'yarı açık' yetim soketler bırakır. Periyodik ping/pong sinyalleri bu sessiz kopmaları yakalar ve 30-60 saniye içinde işletim sistemi belleğini geri kazanır.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸WebSocket protokolü (RFC 6455), standart bir HTTP/1.1 bağlantısını `Upgrade: websocket` başlığıyla tam çift yönlü bir TCP soketine yükseltir.
- ▸WebSocket sunucu filolarını ölçeklerken birincil fiziksel darboğaz neredeyse her zaman CPU değil, bellek (RAM) kapasitesidir.
Yaygın Yanılgılar
- ✗Her şey için WebSocket kullanılması gerektiğini düşünmek; tek yönlü veri akışlarında (borsa fiyatları veya yapay zeka metin akışı) HTTP/2 Server-Sent Events (SSE) çok daha basit ve dayanıklıdır.
Karar Kılavuzu & Önceliklendirme
Gerçek çift yönlü 50 ms altı etkileşim gerektiğinde (oyun, ortak çizim tahtası) WebSocket kullanın; tek yönlü veri akışlarında Server-Sent Events (SSE) tercih edin.
Doğrulanmış Kaynaklar & Referanslar
- [STANDARD]RFC 6455: The WebSocket Protocol— Internet Engineering Task Force (IETF) (2011)
- [OFFICIAL-DOC]1 Million WebSockets in Go— Mail.ru / Eran Yanay
