Socket.IO ile Load Balancing Yöntemleri
Socket.IO ile Load Balancing Yöntemleri
Socket.IO Nedir ve Neden Kullanılır?
Socket.IO, Node.js tabanlı gerçek zamanlı web uygulamaları geliştirmek için kullanılan güçlü ve yaygın bir kütüphanedir. WebSocket tabanlı olarak çalışan bu teknoloji, anlık veri aktarımı ve çift yönlü iletişim gerektiren uygulamalarda (sohbet uygulamaları, canlı bildirim sistemleri vb.) sıklıkla tercih edilmektedir. Ölçeklenebilirlik ve performans gereksinimleri arttığında ise, Socket.IO sunucularının yükünün dengeli şekilde dağıtılması yani load balancing (yük dengeleme), büyük ölçekli sistemler için kritik hâle gelir.
Socket.IO ile Yük Dengeleme Nasıl Yapılır?
Büyük çaplı Socket.IO uygulamalarında gelen bağlantıların tek bir sunucuya yönlendirilmesi, ölçeklenebilirlik ve performans sorunlarına yol açabilir. Bu nedenle yükün birden fazla Socket.IO sunucusu arasında dağıtılması gerekir. Fakat Socket.IO, istemci ve sunucu arasında kalıcı bağlantılar kurduğundan geleneksel stateless HTTP load balancer’larından farklı olarak ek yapılandırma gerektirir.
Çözüm olarak, ya "sticky session" (yapışkan oturum) yöntemiyle yük dengeleyici kullanılır ya da uygulama düzeyinde genişletilebilir bir mimari kurulur. En popüler yöntemlerden biri Redis adapter'ı ile socket bilgisinin farklı sunucular arasında paylaşılmasıdır. İşte örnek bir load balancing senaryosu:
// app.js
const http = require("http");
const express = require("express");
const socketIo = require("socket.io");
const { createAdapter } = require("@socket.io/redis-adapter");
const { createClient } = require("redis");
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// Redis ile adapter kurulumu
t(async () => {
const pubClient = createClient({ url: "redis://localhost:6379" });
const subClient = pubClient.duplicate();
await pubClient.connect();
await subClient.connect();
io.adapter(createAdapter(pubClient, subClient));
})();
io.on("connection", socket => {
console.log("Bağlantı sağlandı: " + socket.id);
});
server.listen(3000, () => {
console.log("Sunucu 3000 portunda çalışıyor");
});
Yukarıdaki örnekte her Socket.IO sunucusu Redis üzerinden birbiri ile bağlantı kurar ve istemci event’leri sunucular arasında sorunsuz şekilde aktarılır. Böylece hangi sunucuya bağlanırsa bağlansın, kullanıcılar arası gerçek zamanlı iletişim sorunsuz çalışır.
En İyi Uygulamalar ve Sonuç
Socket.IO ile load balancing yaparken, istemcilerin aynı sunucuya yönlendirilmesini garanti etmek için genellikle sticky session destekli bir yük dengeleyici (ör: Nginx, AWS ELB) kullanılması önerilir. Ayrıca Redis adapter gibi merkezi veri paylaşım çözümleri sayesinde horizontal scaling kolaylaşır. Redis sunucunuzun performansı, Socket.IO uygulamanızın ölçeklenebilirliğinde kilit rol oynar. Üretim ortamlarında pm2, docker veya kubernetes tabanlı deployment ile otomatik node ekleme/çıkarma da etkili çözümler sunar.
Sonuç olarak, gerçek zamanlı Socket.IO servislerinin ölçeklenmesinde "Socket.IO ile Load Balancing Yöntemleri" kullanmak modern web uygulamalarında yüksek performans ve kesintisiz kullanıcı deneyimi sağlar.

Yorum Gönder