22/04/2026 07:11น.

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 เพื่อขยายขีดความสามารถของระบบ
โครงสร้างของระบบที่รองรับการขยายขนาด
- Client - ผู้ใช้งานที่เชื่อมต่อ WebSocket
- Load Balancer - กระจายโหลดไปยังหลาย WebSocket Servers
- WebSocket Servers - จัดการการเชื่อมต่อและส่งข้อมูลแบบเรียลไทม์
- Redis Pub/Sub - ทำหน้าที่กระจายข้อมูลระหว่าง WebSocket Servers
- 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 แบบเรียลไทม์ 🚀