12/04/2026 18:15น.

Ep.25 Go กับ Load Balancing - กระจายการเชื่อมต่ออย่างมือโปร!
#Go
#Golang
#ภาษา Go
#WebSocket
#Load Balancing
#เพิ่มประสิทธิภาพ
#รองรับผู้ใช้งานจำนวนมาก
#NGINX
#Kubernetes
#การศึกษาการเขียนโปรแกรม
#การเขียนโปรแกรม
#การเขียนโปรแกรม Go
#การเขียนโปรแกรมสำหรับมือใหม่
#ฝึกเขียนโปรแกรม
#ภาษาโปรแกรม
#ภาษาโปรแกรมมิ่ง
#โปรแกรม
#โปรแกรมเมอร์
#Superdev School
Go กับ Load Balancing - กระจายการเชื่อมต่ออย่างมือโปร!
Load Balancing บน WebSocket รองรับผู้ใช้งานจำนวนมากใน Go
ใน EP นี้ เราจะมาศึกษาวิธีเพิ่มประสิทธิภาพให้ WebSocket Server เพื่อรองรับผู้ใช้งานจำนวนมากด้วย Load Balancing และ Scaling ซึ่งเป็นเทคนิคสำคัญในการทำให้ระบบของคุณสามารถขยายตัวและรองรับการใช้งานได้อย่างมีประสิทธิภาพครับ
Load Balancing คืออะไร?
Load Balancing คือกระบวนการกระจายคำขอ (Request) จากผู้ใช้งานไปยังหลายๆ เซิร์ฟเวอร์ เพื่อให้แต่ละเซิร์ฟเวอร์ทำงานไม่หนักเกินไป และลดความล่าช้าในการตอบสนอง
ข้อดีของ Load Balancing :
1.เพิ่มความเสถียร: หากเซิร์ฟเวอร์ใดเซิร์ฟเวอร์หนึ่งล่ม ระบบยังคงทำงานได้
2.รองรับผู้ใช้งานจำนวนมาก: กระจายการเชื่อมต่อไปยังเซิร์ฟเวอร์หลายเครื่อง
3.ปรับขนาดง่าย: เพิ่มหรือลดจำนวนเซิร์ฟเวอร์ตามความต้องการ
การใช้งาน Load Balancer สำหรับ WebSocket
สำหรับ WebSocket ซึ่งเป็นการเชื่อมต่อแบบ Persistent (เชื่อมต่อระยะยาว) เราสามารถใช้ Load Balancer เพื่อกระจายการเชื่อมต่อไปยังหลายเซิร์ฟเวอร์ได้ โดยเครื่องมือยอดนิยมที่รองรับ WebSocket ได้แก่:
- NGINX
- HAProxy
- AWS Elastic Load Balancer
ตัวอย่างการตั้งค่า Load Balancing ด้วย NGINX
1. ติดตั้ง NGINX
ติดตั้ง NGINX บนเครื่องที่คุณต้องการใช้เป็น Load Balancer :
sudo apt update
sudo apt install nginx
2. ตั้งค่า NGINX ให้รองรับ WebSocket สร้างไฟล์ตั้งค่าใน /etc/nginx/sites-available/websocket :
upstream websocket_backend {
server 127.0.0.1:8080; # เซิร์ฟเวอร์ WebSocket เครื่องที่ 1
server 127.0.0.1:8081; # เซิร์ฟเวอร์ WebSocket เครื่องที่ 2
}
server {
listen 80;
location / {
proxy_pass http://websocket_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
3. เปิดใช้งานไฟล์ตั้งค่า สร้าง symbolic link และรีสตาร์ท NGINX :
sudo ln -s /etc/nginx/sites-available/websocket /etc/nginx/sites-enabled/
sudo systemctl restart nginx
4. ทดสอบการเชื่อมต่อ ผู้ใช้งานสามารถเชื่อมต่อไปยัง ws://<your-nginx-server> และ NGINX จะกระจายการเชื่อมต่อไปยังเซิร์ฟเวอร์ WebSocket หลายเครื่อง
การ Scale WebSocket Server ด้วย Docker และ Kubernetes
1. ใช้ Docker Compose สำหรับการ Scale
หากคุณใช้ Docker สามารถเพิ่มจำนวน WebSocket Server ได้ง่ายๆ :
version: '3'
services:
websocket:
build: .
ports:
- "8080-8082:8080"
deploy:
replicas: 3 # สร้าง 3 Instance ของ WebSocket Server
รันคำสั่ง :
docker-compose up --scale websocket=3
2. ใช้ Kubernetes สำหรับ Load Balancing
Kubernetes มี Load Balancer ในตัวที่ช่วยกระจายการเชื่อมต่อ: ตัวอย่างไฟล์ Deployment :
apiVersion: apps/v1
kind: Deployment
metadata:
name: websocket
spec:
replicas: 3
selector:
matchLabels:
app: websocket
template:
metadata:
labels:
app: websocket
spec:
containers:
- name: websocket
image: your-websocket-image
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: websocket-service
spec:
selector:
app: websocket
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
รันคำสั่ง :
kubectl apply -f websocket-deployment.yaml
เทคนิคเพิ่มเติมในการเพิ่มประสิทธิภาพ
ใช้ Sticky Sessions : ผูกการเชื่อมต่อแต่ละครั้งให้กับเซิร์ฟเวอร์เดิม เพื่อรักษาสถานะของผู้ใช้งาน
Cache ข้อมูลใน Memory: ใช้ Redis หรือ Memcached สำหรับเก็บข้อมูลชั่วคราว
Monitor ระบบ: ใช้ Prometheus และ Grafana เพื่อติดตามประสิทธิภาพของเซิร์ฟเวอร์
สรุปง่ายๆ
- Load Balancing ช่วยกระจายการเชื่อมต่อ WebSocket ไปยังเซิร์ฟเวอร์หลายเครื่อง
- ใช้ NGINX หรือ Kubernetes เพื่อรองรับผู้ใช้งานจำนวนมาก
- เพิ่มความเสถียรด้วย Sticky Sessions และการตรวจสอบระบบแบบเรียลไทม์