Node.js คือ ตอนที่ 6 : การ Deployment และประสิทธิภาพ (Performance)

  1. การ Deployment ใน Node.js
    1.1 การเตรียมแอปพลิเคชันสำหรับการ Deployment
    1.2 การ Deployment แอปพลิเคชัน Node.js
  2. การจัดการประสิทธิภาพ (Performance) ใน Node.js
    2.1 การตรวจสอบ (Monitoring)
    2.2 การทดสอบโหลด (Load Testing)
    2.3 การเพิ่มประสิทธิภาพ (Optimization)
  3. ผู้จัดการกระบวนการ (Process Managers)

เมื่อพูดถึงการทำแอพ การเขียนโค้ดและการสร้างคุณลักษณะเป็นเพียงส่วนแรกของการเดินทาง ความสำเร็จที่แท้จริงของแอปพลิเคชันจะถูกตัดสินเมื่อใช้งานจริงและใช้งานโดยผู้ใช้ปลายทาง บทความนี้จะกล่าวถึงหัวข้อการ Deployment และการจัดการประสิทธิภาพของแอปพลิเคชัน Node.js

1. การ Deployment ใน Node.js

การ Deployment เป็นกระบวนการทำให้แอปพลิเคชันของคุณพร้อมใช้งานสำหรับผู้ใช้ปลายทาง ซึ่งอาจหมายถึงการอัปโหลดโค้ดของคุณไปยังเซิร์ฟเวอร์ ตั้งค่าเซิร์ฟเวอร์นั้นให้เรียกใช้แอปพลิเคชันของคุณ และกำหนดการตั้งค่าเครือข่ายเพื่ออนุญาตให้ผู้ใช้เข้าถึงแอปพลิเคชันของคุณ

1.1 การเตรียมแอปพลิเคชันสำหรับการ Deployment

ก่อน Deployment แอปพลิเคชัน Node.js คุณต้องแน่ใจว่าแอปพลิเคชันนั้นพร้อมที่จะนำไปใช้ในสภาพแวดล้อมการใช้งานจริง สิ่งนี้เกี่ยวข้องกับขั้นตอนที่จำเป็น:

การใช้ตัวแปรสภาพแวดล้อม (Environment Variables)

ตัวแปรสภาพแวดล้อมเป็นส่วนพื้นฐานของการทำแอพด้วย Node.js ทำให้แอปของคุณทำงานแตกต่างกันภายใต้เงื่อนไขต่างๆ คุณไม่ควรฮาร์ดโค้ดข้อมูลที่ละเอียดอ่อน เช่น ข้อมูลประจำตัวของฐานข้อมูลหรือคีย์ API ลงในแอปพลิเคชันของคุณโดยตรง สิ่งเหล่านี้ควรเก็บไว้เป็นตัวแปรสภาพแวดล้อม แอปพลิเคชันของคุณอ่าน และเก็บไว้ให้ห่างจากระบบควบคุมเวอร์ชัน

แพ็คเกจ นี้ dotenv มักใช้เพื่อโหลดตัวแปรจาก .env ไฟล์ไปยัง process.env.

require('dotenv').config()

console.log(process.env.DB_HOST);
การใช้การจัดการข้อผิดพลาด

การจัดการข้อผิดพลาดที่เหมาะสมเป็นสิ่งสำคัญในสภาพแวดล้อมการผลิต ข้อผิดพลาดที่ไม่สามารถจัดการได้อาจทำให้กระบวนการ Node.js ของคุณขัดข้องและทำให้ผู้ใช้ของคุณหยุดทำงาน

ใน Express.js ฟังก์ชันมิดเดิลแวร์ที่มีสี่พารามิเตอร์จะถือว่าเป็นฟังก์ชันจัดการข้อผิดพลาด ตัวอย่างเช่น:

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

การดำเนินการนี้จะจับข้อผิดพลาดใดๆ ที่เกิดขึ้นในแอปพลิเคชันของคุณ บันทึกการติดตามสแต็กข้อผิดพลาด และส่ง “Something broke!” การตอบสนอง.

การเพิ่ม Reverse Proxy

ในการผลิต การวาง reverse proxy ไว้หน้าเซิร์ฟเวอร์ Node.js มักจะมีประโยชน์ พร็อกซีย้อนกลับคือเซิร์ฟเวอร์ที่อยู่ระหว่างอุปกรณ์ไคลเอ็นต์และแอปพลิเคชันของคุณ ส่งต่อคำขอไคลเอ็นต์ไปยังแอปของคุณ

หนึ่งในพร็อกซีย้อนกลับที่ได้รับความนิยมมากที่สุดคือ Nginx ซึ่งสามารถจัดการไฟล์แบบสแตติกและการแคช ถ่ายโอนงานเหล่านี้ออกจากกระบวนการ Node.js ของคุณ

1.2 การ Deployment แอปพลิเคชัน Node.js

คุณสามารถ Deployment แอปพลิเคชัน Node.js บนแพลตฟอร์มต่างๆ โดยแต่ละแพลตฟอร์มมีกระบวนการและแนวทางปฏิบัติที่ดีที่สุดของตนเอง อย่างไรก็ตาม การ Deployment บนแพลตฟอร์มระบบคลาวด์เช่น Heroku หรือ AWS เกี่ยวข้องกับขั้นตอนทั่วไปบางประการ:

  1. สร้างบัญชี : ลงทะเบียนและสร้างบัญชีบนแพลตฟอร์มที่คุณต้องการ Deployment แอปพลิเคชันของคุณ
  2. ติดตั้งแพลตฟอร์ม CLI : แพลตฟอร์มส่วนใหญ่มีเครื่องมืออินเทอร์เฟซบรรทัดคำสั่ง (CLI) เพื่อจัดการแอปพลิเคชันของคุณ
  3. สร้างแอปพลิเคชันของคุณ : ใช้แดชบอร์ดการจัดการของแพลตฟอร์มหรือ CLI เพื่อทำแอพใหม่
  4. เตรียมแอปพลิเคชันของคุณ : รวม a Procfileสำหรับ Heroku หรือappspec.ymlสำหรับ AWS CodeDeploy ซึ่งจะบอกแพลตฟอร์มถึงวิธีการเริ่มต้นแอปพลิเคชันของคุณ นอกจากนี้ ตรวจสอบให้แน่ใจว่าแอปพลิเคชันของคุณรับฟังพอร์ตเครือข่ายที่ถูกต้อง แพลตฟอร์มเช่น Heroku กำหนดพอร์ตแบบไดนามิกและเปิดเผยผ่านPORTตัวแปรสภาพแวดล้อม
  5. พุชโค้ดของคุณ : โดยทั่วไปคุณ Deployment แอปพลิเคชันของคุณโดยการพุชโค้ดของคุณโดยใช้ Git
  6. ปรับขนาดแอปพลิเคชันของคุณ : แพลตฟอร์มส่วนใหญ่อนุญาตให้คุณปรับขนาดแอปพลิเคชันของคุณได้อย่างง่ายดายโดยเปลี่ยนจำนวนอินสแตนซ์ที่กำลังทำงานอยู่ หรือที่เรียกว่า “dynos” ใน Heroku หรือ “งาน” ใน AWS ECS

2. การจัดการประสิทธิภาพ (Performance) ใน Node.js

การจัดการประสิทธิภาพเป็นสิ่งสำคัญในการรันแอปพลิเคชัน Node.js ในการผลิต นี่คือบางแง่มุมที่คุณควรพิจารณา:

2.1 การตรวจสอบ (Monitoring)

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

มีเครื่องมือตรวจสอบหลายอย่างสำหรับแอปพลิเคชัน Node.js เช่น New Relic, Datadog หรือ AWS CloudWatch เครื่องมือเหล่านี้สามารถติดตามเมตริกต่างๆ เช่น การใช้งาน CPU, การใช้หน่วยความจำ, เวลาตอบสนอง และอัตราข้อผิดพลาด

2.2 การทดสอบโหลด (Load Testing)

การทดสอบโหลดคือกระบวนการกำหนดความต้องการให้กับระบบและวัดผลการตอบสนอง ช่วยให้คุณเข้าใจพฤติกรรมของแอปพลิเคชันของคุณภายใต้สภาวะปกติและสภาวะโหลดสูงสุดที่คาดการณ์ไว้ เครื่องมือเช่น Apache JMeter หรือ Artillery สามารถใช้ในการทดสอบโหลดบนแอปพลิเคชัน Node.js ของคุณ

2.3 การเพิ่มประสิทธิภาพ (Optimization)

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

3. ผู้จัดการกระบวนการ (Process Managers)

ตัวจัดการกระบวนการเป็นเครื่องมือที่สามารถช่วยจัดการแอปพลิเคชัน Node.js ของคุณในการผลิต พวกเขามีคุณสมบัติเช่นการรักษาแอปพลิเคชันของคุณให้คงอยู่ตลอดไป โหลดซ้ำโดยไม่ต้องหยุดทำงาน และอำนวยความสะดวกในงานผู้ดูแลระบบทั่วไป

PM2 เป็นผู้จัดการกระบวนการผลิตยอดนิยมสำหรับแอปพลิเคชัน Node.js ด้วย PM2 คุณสามารถจัดการและแสดงแอปพลิเคชัน มอนิเตอร์สถานะ จัดการไฟล์บันทึกของแอปพลิเคชัน และอื่นๆ อีกมากมายได้อย่างง่ายดาย

ต่อไปนี้คือตัวอย่างง่ายๆ ของการใช้ PM2 เพื่อเรียกใช้แอปพลิเคชัน Node.js:

  1. ติดตั้ง PM2:npm install pm2 -g
  2. เริ่มแอปพลิเคชัน:pm2 start app.js
  3. แสดงรายการแอปพลิเคชันที่กำลังทำงานอยู่ทั้งหมด:pm2 list
  4. ตรวจสอบการใช้ CPU และหน่วยความจำ:pm2 monit
  5. หยุดแอปพลิเคชัน:pm2 stop app.js

การ Deployment และการจัดการประสิทธิภาพเป็นส่วนสำคัญของวงจรชีวิตการทำแอพ อาจไม่ฉูดฉาดเท่ากับการเขียนโค้ดใหม่หรือการออกแบบอินเทอร์เฟซ แต่จำเป็นต่อการส่งมอบแอปพลิเคชันคุณภาพสูง เมื่อปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่อธิบายไว้ในบทความนี้ คุณจะพร้อมที่จะ Deployment และจัดการแอปพลิเคชัน Node.js อย่างมืออาชีพ


Node.js คืออะไร

Node.js คือ ตอนที่ 5 : การทำแอพแบบ Real-time ด้วย Socket.io