Back to notes
mastery-architecture
Featured

System Design Mastery: ออกแบบระบบรองรับคนพันล้าน

ออกแบบระบบยังไงให้รองรับคนเป็นล้าน? รู้จัก Vertical vs Horizontal Scaling, Load Balancing และการทำ Database Sharding

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: "ระบบล่ม" เมื่อเจอกระแสถล่มทลาย

ลองนึกถึงระบบที่จูเนียร์พึ่งสร้างเสร็จในช่วงโปรโมชัน:

HLJS BASH
# ❌ Naive Approach: รันทุกอย่างบน Server เครื่องเดียว (Single Server)
User Requests -> [ API + Database + Assets ]
# ผลลัพธ์: เมื่อมีคนเข้าเว็บ 10,000 คนพร้อมกัน CPU พุ่ง 100% จนเว็บค้าง
# และเมื่อเครื่องพัง (ไฟดับ/Harddisk เต็ม) ทุกอย่างดับวูบทันที!

ปัญหา: การรวมทุกอย่างไว้ที่จุดเดียวคือการสร้าง Single Point of Failure (SPOF). เมื่อระบบไม่สามารถขยายตัว (Scale) ได้ ธุรกิจของคุณจะสูญเสียโอกาสมหาศาล และความน่าเชื่อถือจะกลายเป็นศูนย์ในทันที นี่คือเหตุผลที่ Senior ต้องออกแบบระบบที่ "ยืดหยุ่น" และ "ไม่มีวันตาย" ครับ


💡 2. Real-Life Analogy: ร้านอาหารริมทาง vs ฟาสต์ฟู้ดแฟรนไชส์

  • Vertical Scaling (Scale Up): เหมือนการ "ซื้อเตาแก๊สที่ใหญ่ขึ้น" ในร้านเดิม. ทำงานได้เร็วขึ้นจริงแต่มีขีดจำกัด (เตาใหญ่สุดก็มี) และถ้าเตานั้นพัง ร้านต้องปิดทันที
  • Horizontal Scaling (Scale Out): เหมือนการ "ขยายสาขา". คุณมีร้านเล็กๆ 10 ร้านช่วยกันทำอาหาร ถ้าสาขาหนึ่งพัง สาขาอื่นยังขายต่อได้ (Scalability & Fault Tolerance)
  • Load Balancer: เหมือน "พนักงานต้อนรับหน้าร้าน". คอยแจกบัตรคิวและบอกว่า "สาขา A เต็มแล้ว เชิญสาขา B นะครับ" เพื่อให้ไม่มีใครต้องรอนานเกินไป
  • Database Sharding: เหมือนการ "แยกโกดังเก็บวัตถุดิบ". โกดังที่ 1 เก็บของสด (Users A-M), โกดังที่ 2 เก็บของแห้ง (Users N-Z) เพื่อให้ไม่เกิดคอขวดที่โกดังเดียว

🚀 3. Execution Journey: มหากาพย์การเดินทางของ Request

เมื่อ User พันคนกดเข้าเว็บพร้อมกัน นี่คือการเดินทางที่สมบูรณ์แบบ:

🛠 Step-by-step:

  1. The Entry: Request วิ่งเข้าหา Load Balancer (ด่านหน้า)
  2. Traffic Distribution: Load Balancer เช็คว่า Server ไหนว่าง (Health Check) แล้วส่งคนไป
  3. App Logic: Server ประมวลผล แต่ถ้าต้องดึงข้อมูล...
  4. Read Replica: มันจะวิ่งไปดึงข้อมูลจาก Slave DB (Read) เพื่อลดภาระของเครื่องหลัก
  5. Caching: ถ้าข้อมูลเคยถูกดึงมาแล้ว มันจะดึงจาก Redis (Memory) ทันที (เร็วขึ้น 1,000 เท่า)
HLJS JAVASCRIPT
// ✅ Best Practice: ออกแบบโค้ดให้เป็น Stateless (ไม่เก็บข้อมูลไว้ที่เครื่อง)
// ห้าม: const session = { userId: 1 }; (เก็บใน RAM เครื่องตัวเอง)
// ควร: await redis.set(`session:${id}`, userId); (เก็บในที่ส่วนกลางเพื่อให้ทุกเครื่องใช้ร่วมกันได้)

🪤 4. The Junior Trap: โรค "เชื่อใจ Server เดียว"

จูเนียร์มักจะคิดว่าถ้าเครื่องอพเกรด RAM เป็น 128GB แล้วจะรอดตลอดไป:

HLJS BASH
# ❌ Junior Trap: ฝากชีวิตไว้กับเครื่องเทพ (Vertical Scaling เท่านั้น)
# 🌋 พัง! เมื่อถึงจุดหนึ่ง RAM 128GB จะไม่พอ และที่แย่กว่านั้นคือ
# "ถ้าเมนบอร์ดไหม้ ระบบคุณจะหายไปจากโลกนี้ทันที"

ระวัง: "Hardware fails all the time". สัจธรรมของโลก Infra คือทุกอย่างพังได้เสมอ ✅ การแก้ไข: เน้นการใช้เครื่องเล็กๆ หลายเครื่อง (Horizontal) และต้องมีระบบ Auto-Failover ที่พร้อมขึ้นมาแทนที่ทันทีเมื่อมีเครื่องใดเครื่องหนึ่งตาย


⚖️ 5. The Why Matrix: Scale Up vs Scale Out

หัวข้อVertical Scaling (Up)Horizontal Scaling (Out)
ความยากง่ายมาก (แค่จ่ายเงินเพิ่ม)ปานกลาง (ต้องออกแบบระบบ)
ขีดจำกัด🐢 มีขีดจำกัด (Hardware limit)🚀 ขยายได้ไม่จำกัด (Unlimited)
ความทนทานต่ำ (เครื่องเดียวตายหมด)⚡⚡⚡ สูงมาก (ตายหนึ่ง รอดสิบ)
ราคาแพงมากในระยะยาวประหยัดและคุ้มค่ากว่าเมื่อเทียบกับประสิทธิภาพ

🎓 6. Senior Mindset Summary

การเป็น Senior คือการมองว่า "ความล้มเหลวเป็นเรื่องปกติ". เราไม่ได้ออกแบบระบบเพื่อไม่ให้ล่ม แต่เราออกแบบระบบให้ "รู้ตัวว่าล่มและฟื้นตัวได้เองภายในเสี้ยววินาที". การกระจายความเสี่ยงคือหัวใจของการสร้างระบบระดับโลกครับ!

Share this note

Mission Accomplished

You've reached the end of this module. Time to apply these senior mindsets to your real-world projects!

Explore more topics

Related notes

View all notes
mastery-architecture
Advanced

Monolith vs Microservices vs Serverless: เลือกรากฐานยังไงให้ไม่เจ็บตัว

อย่าตามกระแส! เมื่อไหร่ควรแยก Service? เมื่อไหร่ Mono-repo ดีกว่า? เจาะลึกการเลือก Architecture ที่เหมาะสมกับขนาดทีมและโจทย์ธุรกิจ

January 30, 20262 min read
mastery-architecture
Advanced

Modern Communication Protocols: เลือกท่อส่งข้อมูลระดับไฮเอนด์

โลกไม่ได้มีแค่ HTTP/1.1! เจาะลึกโปรโตคอลยุคใหม่ที่เร็วกว่า เบากว่า และ Real-time กว่า เพื่อระบบที่รองรับการ Scale ระดับโลก

January 30, 20262 min read
mastery-frontend-react
Advanced

Advanced React Architecture: เขียนโค้ดให้เพื่อนร่วมทีมรัก

ยกระดับการเขียน React สู่ระดับมืออาชีพ เจาะลึกเทคนิคการจัดการ App Initialization, การรักษา Immutability ขั้นสูง และการแก้ปัญหา Stale Closure ด้วย Pattern ที่ Senior เลือกใช้

January 30, 20262 min read

© 2026 My Notes by Seereen