แพลตฟอร์มจัดการ Cloud Server
เผยแพร่เมื่อ 1 มิถุนายน 2567
ภาพรวม
เราสร้างแพลตฟอร์ม SaaS ที่ครบครัน ช่วยให้ game studio และนักพัฒนาอิสระสามารถ deploy, จัดการ และ scale เซิร์ฟเวอร์เกมได้อย่างง่ายดาย ระบบซ่อนความซับซ้อนของโครงสร้างพื้นฐาน cloud เพื่อให้ทีมโฟกัสกับการพัฒนาเกม
ปัญหาที่พบ
studio เกมต้องเสียเวลาวิศวกรรมจำนวนมากในการ provision เซิร์ฟเวอร์ด้วยตนเอง รับมือกับ traffic พุ่งสูงกะทันหัน และจัดการค่าใช้จ่าย cloud ที่ซับซ้อน studio เล็กๆ ไม่มีงบจ้างทีม DevOps ส่วน studio ใหญ่ก็เสียทรัพยากรไปกับงาน operation ซ้ำๆ
วิธีแก้ปัญหา
สถาปัตยกรรม
แพลตฟอร์มสร้างบน microservices architecture ประกอบด้วย:
- Control Plane: จัดการวงจรชีวิตเซิร์ฟเวอร์ (สร้าง, เริ่ม, หยุด, ลบ)
- Metrics Aggregator: รวบรวมสถิติ CPU, RAM และเครือข่ายแบบ real-time
- Billing Engine: ติดตามการใช้งานทุกนาทีและสร้างใบแจ้งหนี้อัตโนมัติ
- Auto-Scaler: ดู load metric และ trigger กฎการ scale แนวนอน
Tech Stack
| Layer | เทคโนโลยี | |-------|-----------| | Backend API | NestJS + TypeScript | | Frontend Dashboard | NuxtJS | | Container Orchestration | Kubernetes (EKS) | | Database | PostgreSQL + Redis | | Message Queue | RabbitMQ | | IaC | OpenTofu |
ฟีเจอร์หลัก
- Deploy แบบคลิกเดียว — เลือกขนาดเซิร์ฟเวอร์ ภูมิภาค และประเภทเกม พร้อมใช้งานภายใน 60 วินาที
- Monitoring แบบ real-time — Dashboard แสดงจำนวนผู้เล่น, CPU, RAM และ bandwidth สด
- Auto-scaling — กำหนดกฎการ scale ขึ้น/ลงตาม session ผู้เล่นที่ active
- รองรับ multi-cloud — Deploy บน AWS, DigitalOcean หรือ Azure จาก interface เดียวกัน
- Backup & snapshot — สำรองข้อมูลอัตโนมัติรายวันพร้อม point-in-time restore
ผลลัพธ์
- ลดเวลาตั้งค่าเซิร์ฟเวอร์จาก 2 ชั่วโมง → ไม่ถึง 1 นาที
- ลดค่าโครงสร้างพื้นฐาน 35% ด้วย auto-scaling
- มี studio เกมกว่า 50 แห่ง เข้าร่วมใน 6 เดือนแรก
- ทำ uptime 99.9% ในทุกเซิร์ฟเวอร์ที่จัดการ
ความท้าทาย
ความท้าทายที่ใหญ่ที่สุดคือการรับมือกับรูปแบบ traffic พุ่งสูงช่วงปล่อยเกม เราแก้ด้วยการ pre-warm pool ของ node สแตนด์บายที่สามารถนำมาใช้ได้ภายในไม่กี่วินาที แทนที่จะรอ provision แบบ cold-start
ความท้าทายอีกประการคือการ abstract multi-cloud — แต่ละ provider มี API และข้อแตกต่างเฉพาะตัว เราสร้าง adapter layer รวมที่ normalize ความแตกต่างเหล่านี้ ทำให้ผู้ใช้ปลายทางไม่รู้สึกถึงความแตกต่าง