การดู : 0

12/04/2026 18:15น.

Ep.25 Go กับ Load Balancing - กระจายการเชื่อมต่ออย่างมือโปร!

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 และการตรวจสอบระบบแบบเรียลไทม์