ในการแบ่งปันเรื่อง 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 เป็นต้น