Scaling WebSocket (Horizontal) — Realtime

Scaling WebSocket Single server handles ~10K-100K WebSocket connections. Butuh lebih? Scale horizontally — multiple server instances dengan shared state…

Scaling WebSocket

Single server handles ~10K-100K WebSocket connections. Butuh lebih? Scale horizontally — multiple server instances dengan shared state.

Challenges

Load Balancer Configuration

# Nginx: WebSocket upgrade + sticky sessions
upstream websocket {
    ip_hash;  # sticky sessions
    server ws1:3000;
    server ws2:3000;
    server ws3:3000;
}

server {
    location /socket.io/ {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

Redis Adapter (Socket.IO)

// Setiap server instance connect ke Redis
// io.emit() otomatis broadcast ke semua instances via Redis

import { createAdapter } from "@socket.io/redis-adapter";

io.adapter(createAdapter(pubClient, subClient));

// Architecture:
// LB → Server 1 (10K connections) → Redis ↔ Server 2 (10K connections)
//                                        ↔ Server 3 (10K connections)

Connection Limits

# OS level: increase file descriptor limit
ulimit -n 100000

# Node.js: monitor connections
setInterval(() => {
  const count = io.engine.clientsCount;
  console.log(`Active connections: ${count}`);
  metrics.gauge("websocket.connections", count);
}, 10000);

Scaling Strategies

Yang akan kamu pelajari