การออกแบบระบบ Microservices ด้วย ECS / EKS

Sharing is caring!

บทนำ

เมื่อระบบขนาดใหญ่ต้องรองรับผู้ใช้จำนวนมาก การแยกส่วนระบบออกเป็นบริการย่อย ๆ (Microservices) คือแนวทางที่ทำให้การพัฒนาและดูแลระบบมีประสิทธิภาพมากขึ้น โดยเฉพาะเมื่อผนวกกับการใช้ Container ผ่านบริการอย่าง AWS ECS (Elastic Container Service) และ AWS EKS (Elastic Kubernetes Service) ซึ่งช่วยจัดการการรัน Container ได้แบบอัตโนมัติ และปรับขนาดระบบได้ตามโหลดที่เปลี่ยนแปลง

Microservices คืออะไร?

Microservices คือแนวคิดการพัฒนาแอปพลิเคชันโดยแยกออกเป็น “บริการย่อย” ที่ทำงานแยกกัน โดยแต่ละบริการจะมีหน้าที่เฉพาะ เช่น ระบบผู้ใช้, ระบบสั่งซื้อ, ระบบชำระเงิน และสามารถ Deploy อิสระจากกันได้

  • 🔸 พัฒนาโดยทีมอิสระแต่ละส่วน
  • 🔸 ใช้เทคโนโลยีและภาษาโปรแกรมที่แตกต่างกันได้
  • 🔸 สามารถ Scale เฉพาะบริการที่จำเป็น
  • 🔸 ลดผลกระทบของการ Deploy ทั้งระบบ

ความแตกต่างระหว่าง ECS และ EKS

ก่อนเลือกว่าจะใช้ ECS หรือ EKS ควรเข้าใจแนวคิดของแต่ละบริการ:

คุณสมบัติAWS ECSAWS EKS
เครื่องมือจัดการ ContainerAmazon Orchestrator (Native)Kubernetes
การเรียนรู้ง่าย เหมาะกับผู้เริ่มต้นซับซ้อนกว่า แต่ยืดหยุ่นสูง
การทำงานร่วมกับระบบอื่นผสานกับบริการ AWS ได้ดีรองรับมาตรฐาน Kubernetes API
การจัดการ Clusterจัดการอัตโนมัติต้องดูแล Node และ Control Plane

ภาพรวมสถาปัตยกรรม ECS / EKS

ทั้ง ECS และ EKS มีสถาปัตยกรรมที่คล้ายกัน โดยใช้แนวคิด Container และ Service Orchestration:

  1. ผู้พัฒนา Push Docker Image ไปยัง Amazon ECR (Elastic Container Registry)
  2. ECS/EKS ทำการ Pull Image และรันบน Cluster
  3. Service Discovery ช่วยให้ Container ค้นหากันเองได้
  4. Auto Scaling ปรับจำนวน Instance ตามโหลด

เริ่มต้นสร้าง Service ด้วย ECS

ตัวอย่างการ Deploy Container ด้วย ECS แบบ Fargate:

{
  "family": "my-web-service",
  "containerDefinitions": [{
    "name": "web",
    "image": "123456789012.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest",
    "portMappings": [{
      "containerPort": 80,
      "hostPort": 80
    }],
    "memory": 512,
    "cpu": 256
  }]
}
    

จากนั้นสามารถ Deploy ผ่าน AWS Console หรือใช้คำสั่ง CLI:

aws ecs create-service \
  --cluster myCluster \
  --service-name web-service \
  --task-definition my-web-service \
  --desired-count 2 \
  --launch-type FARGATE
    

ตัวอย่าง Deployment ด้วย EKS

สำหรับ EKS จะใช้ Kubernetes YAML ในการกำหนดการรัน Pod:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: 123456789012.dkr.ecr.ap-southeast-1.amazonaws.com/myapp:latest
          ports:
            - containerPort: 80
    

ใช้คำสั่ง Deploy:

kubectl apply -f web-deployment.yaml
    

การ Scale ระบบแบบอัตโนมัติ

ทั้ง ECS และ EKS รองรับการ Auto Scaling โดยสามารถตั้งค่าให้ปรับจำนวน Task หรือ Pod ตามโหลดของระบบ เช่น CPU, Memory หรือ Request Rate

aws application-autoscaling register-scalable-target \
  --service-namespace ecs \
  --resource-id service/myCluster/web-service \
  --scalable-dimension ecs:service:DesiredCount \
  --min-capacity 2 --max-capacity 10
    

Service Discovery และ Load Balancing

เพื่อให้ Container แต่ละตัวสามารถติดต่อกันได้ AWS มีเครื่องมือช่วยดังนี้:

  • 🔹 AWS Cloud Map สำหรับ Service Discovery
  • 🔹 Elastic Load Balancer (ALB/NLB) สำหรับกระจายโหลด
  • 🔹 Route 53 สำหรับจัดการ DNS

การเชื่อมต่อกับ CI/CD Pipeline

สามารถผสาน ECS/EKS เข้ากับบริการ DevOps ของ AWS ได้อย่างง่าย เช่น:

  • CodeCommit → CodeBuild → CodePipeline → ECS/EKS

Best Practices ในการออกแบบระบบ Microservices

  • ✅ แยก Service ตาม Domain ของระบบ
  • ✅ ใช้ IAM Role แยกกันสำหรับแต่ละ Service
  • ✅ ใช้ Parameter Store หรือ Secrets Manager สำหรับ Config
  • ✅ Monitor ด้วย CloudWatch และ Prometheus
  • ✅ ใช้ Load Balancer กระจายโหลดระหว่าง Container

สรุป

การออกแบบระบบ Microservices ด้วย ECS / EKS ช่วยให้การพัฒนาและ Deploy ระบบมีความยืดหยุ่น, ปลอดภัย และรองรับการขยายตัวของผู้ใช้ได้ง่าย หากคุณต้องการระบบที่ปรับขนาดได้อัตโนมัติ และบริหารจัดการ Container ได้อย่างเป็นระบบ การใช้ ECS หรือ EKS คือคำตอบที่ดีที่สุดในโลกของ Cloud-native Application

📘 บทความโดย King Pool

ภาพประกอบ: ECS/EKS Architecture, Microservices Design, Auto Scaling, CI/CD Integration

อ่านต่อ: การ Optimize Lambda (Cold Start, Provisioned Concurrency)

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *