การดู : 311

22/04/2026 07:11น.

EP.39 การขยายระบบ WebSocket ด้วย Redis และ Kubernetes

EP.39 การขยายระบบ WebSocket ด้วย Redis และ Kubernetes

#Horizontal Scaling

#High Availability

#Microservices

#Real-Time API

#Golang

#Go

#Kubernetes

#Redis Pub/Sub

#WebSocket Load Balancing

#WebSocket Scaling

ทำไมต้องขยายขนาด WebSocket?

WebSocket เป็นเทคโนโลยีที่ใช้ในการรับส่งข้อมูลแบบเรียลไทม์ แต่เมื่อจำนวนผู้ใช้เพิ่มขึ้น โหลดของเซิร์ฟเวอร์อาจสูงขึ้นจนระบบไม่สามารถรองรับได้ วิธีการแก้ปัญหาคือการใช้ Redis Pub/Sub และ Kubernetes เพื่อขยายขีดความสามารถของระบบ

โครงสร้างของระบบที่รองรับการขยายขนาด

  1. Client - ผู้ใช้งานที่เชื่อมต่อ WebSocket
  2. Load Balancer - กระจายโหลดไปยังหลาย WebSocket Servers
  3. WebSocket Servers - จัดการการเชื่อมต่อและส่งข้อมูลแบบเรียลไทม์
  4. Redis Pub/Sub - ทำหน้าที่กระจายข้อมูลระหว่าง WebSocket Servers
  5. Kubernetes Cluster - บริหารจัดการเซิร์ฟเวอร์หลายตัวโดยอัตโนมัติ

ใช้ Redis Pub/Sub เพื่อเชื่อมต่อ WebSocket หลายเครื่อง

Redis Pub/Sub ช่วยให้ WebSocket Servers หลายตัวสามารถรับ-ส่งข้อความให้กันได้

ตัวอย่างการใช้งาน Redis Pub/Sub กับ WebSocket

ไฟล์ websocket_redis.go

package main

import (
    "context"
    "fmt"
    "log"
    "github.com/go-redis/redis/v8"
)

var ctx = context.Background()

func main() {
    client := redis.NewClient(&redis.Options{
        Addr: "localhost:6379",
    })

    pubsub := client.Subscribe(ctx, "chat_channel")
    defer pubsub.Close()

    for msg := range pubsub.Channel() {
        fmt.Println("Received message:", msg.Payload)
    }
}

การใช้ Kubernetes เพื่อขยาย WebSocket Servers

เราสามารถใช้ Kubernetes Deployment เพื่อจัดการ WebSocket Servers หลายเครื่องให้สามารถทำงานร่วมกันได้

ไฟล์ deployment.yaml สำหรับ Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: websocket-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: websocket-server
  template:
    metadata:
      labels:
        app: websocket-server
    spec:
      containers:
      - name: websocket-server
        image: my-websocket-server:latest
        ports:
        - containerPort: 8080

ท้าให้ลอง!

ลองปรับแต่ง Kubernetes Horizontal Pod Autoscaler (HPA) เพื่อให้ระบบสามารถเพิ่มหรือลดจำนวน WebSocket Servers ตามโหลดของผู้ใช้โดยอัตโนมัติ!


EP ถัดไป

ใน EP.40 เราจะมาดู การใช้ GraphQL Subscription ร่วมกับ WebSocket ใน Kubernetes เพื่อเพิ่มประสิทธิภาพของ API แบบเรียลไทม์ 🚀