ในการแบ่งปันเรื่อง Microservices Design ที่ Skooldio นั้น
มีการถามตอบเรื่องของระบบที่พัฒนาด้วย NodeJS
ซึ่งโดยปกติจะทำการแบบ single thread, non-blocking I/O
ทำงานได้ดีอยู่แล้ว แต่เมื่อเจอ concurrent สูง ๆ ขึ้นมา
กลับทำงานได้ไม่ดีเลย

ยิ่งลองไปเทียบกับ Go แล้ว คนละเรื่องกันเลย

ดังนั้นจึงสรุปเรื่องของการ scale NodeJS บน production แบบง่าย ๆ ไว้ดังนี้

ทำการเพิ่ม process บนเครื่องเดียวกัน

  • แนะนำให้ใช้ Cluster mode ของ NodeJS สำหรับการเพิ่ม process มารับงานเยอะ ๆ
  • ใช้งานร่วมกับ PM2 ซึ่งเป็น process manager ที่ทำงานแบบ cluster หรือ multi-process ได้ รวมทั้งยังช่วยจัดการเรื่อง process ให้อีกด้วย

ทำการแยกเครื่อง

  • ใช้งานร่วมกับ Load balance เพื่อกระจาย load ไปทำงานอีกด้วย เช่น NGINX และ HA Proxy เป็นต้น
  • ถ้าระบบงานมีขนาดใหญ่ แนะนำให้แยกตาม usage การใช้งาน ถ้าส่วนไหนใช้งานเยอะ ๆ น่าจะแยกออกมาสร้างเป็น service และ run/deploy แยกกันไป
  • ด้านข้อมูลที่จัดเก็บหรือต้องใช้งาน ก็ให้ทำการ split ออกไป เช่น sharding หรือ partitoning เป็นต้น