บทที่ 01 · การขยายระบบ

ขยายระบบจากศูนย์สู่ล้านผู้ใช้

การขยายระบบให้รองรับผู้ใช้หลายล้านคนเป็นกระบวนการที่ซับซ้อนและต้องปรับปรุงอย่างต่อเนื่อง บทนี้จะอธิบายวิธีเริ่มต้นด้วย Server เดียวและขยายสถาปัตยกรรมทีละขั้นเพื่อรองรับผู้ใช้หลายล้านคน

Single Server Architecture

ภาพที่ 1: สถาปัตยกรรม Single Server - ทุก Component อยู่บน Server เดียว

บทนำ

การออกแบบระบบที่รองรับผู้ใช้หลายล้านคนต้องอาศัยการปรับปรุงและเพิ่มประสิทธิภาพอย่างต่อเนื่อง ในบทนี้เราจะเรียนรู้การเริ่มต้นด้วยการตั้งค่า Server เดียวและขยายสถาปัตยกรรมทีละขั้น

1. การตั้งค่า Server เดียว

ในขั้นต้น ทุก Component (Web App, Database, Cache) ทำงานบน Server เดียว

Single Server Setup

ภาพที่ 2: การตั้งค่า Server เดียว

โฟลว์ของ Request

แหล่งที่มาของ Traffic

2. การแยก Database

เมื่อฐานผู้ใช้เติบโตขึ้น Database จะถูกย้ายไปยัง Server เฉพาะเพื่อให้สามารถขยาย Web Tier และ Database Tier ได้อย่างอิสระ

Database Separation

ภาพที่ 3: การแยก Database ออกจาก Web Server

ตัวเลือกของ Database

เมื่อใดควรใช้ NoSQL:
  • แอปพลิเคชันต้องการ Latency ต่ำมาก
  • ข้อมูลไม่มีโครงสร้าง หรือไม่มีความสัมพันธ์ระหว่างข้อมูล
  • ต้องการจัดเก็บข้อมูลปริมาณมหาศาล

3. การขยายแนวตั้ง vs แนวนอน

การขยายแนวตั้ง (Vertical Scaling)

การขยายแนวนอน (Horizontal Scaling)

Horizontal Scaling

ภาพที่ 4: การขยายแนวนอน - เพิ่ม Server หลายตัว

4. Load Balancer

Load Balancer กระจาย Traffic ไปยัง Server หลายตัว มีข้อดีดังนี้:

Load Balancer

ภาพที่ 5: Load Balancer กระจาย Traffic ไปยัง Server หลายตัว

5. Database Replication

Database Replication

ภาพที่ 6: Database Replication - Master-Slave

โมเดล Master-Slave

6. Cache

Cache เก็บข้อมูลที่เข้าถึงบ่อยในหน่วยความจำเพื่อลด Latency และ Load ของ Database

Cache Layer

ภาพที่ 7: Cache Layer ช่วยลด Latency

7. CDN (Content Delivery Network)

CDN กระจาย Static Content ไปยัง Server ทั่วโลกเพื่อให้ผู้ใช้เข้าถึงได้เร็วขึ้น

CDN

ภาพที่ 8: CDN กระจาย Content ไปยัง Edge Locations

8. สถาปัตยกรรม Stateless

ย้าย Session Data ไปยัง Database เพื่อให้ Web Server ไม่ต้องเก็บ State

Stateless Architecture

ภาพที่ 9: สถาปัตยกรรม Stateless

9. Data Center

การตั้ง Data Center หลายแห่งช่วยเพิ่มความพร้อมใช้งานและลด Latency สำหรับผู้ใช้ในภูมิภาคต่างๆ

Multi Data Center

ภาพที่ 10: Multi-Data Center Architecture

10. Logging และ Metrics

ระบบ Monitoring ช่วยติดตามสุขภาพของระบบและตรวจจับปัญหาได้เร็ว

Logging and Metrics

ภาพที่ 11: Logging และ Metrics Collection

11. Message Queue

ใช้ Message Queue สำหรับ Asynchronous Communication ระหว่าง Services

Message Queue

ภาพที่ 12: Message Queue Architecture

สรุป

การขยายระบบจาก Server เดียวสู่ระบบที่รองรับผู้ใช้หลายล้านคนต้องผ่านขั้นตอนดังนี้:

  1. Single Server - เริ่มต้นง่าย
  2. Database Separation - แยก Database ออกมา
  3. Load Balancer - กระจาย Traffic
  4. Database Replication - เพิ่มความน่าเชื่อถือ
  5. Cache - เพิ่มความเร็ว
  6. CDN - กระจาย Static Content
  7. Stateless Architecture - ลดความซับซ้อน
  8. Multi-Data Center - เพิ่มความพร้อมใช้งาน
  9. Message Queue - Asynchronous Processing