วิธีเพิ่มประสิทธิภาพโครงสร้างพื้นฐาน Node.js สำหรับการใช้งานจริง: แนวทางปฏิบัติที่ดีที่สุด
คำนำ
ที่ Forward Email เราใช้เวลาหลายปีในการปรับแต่งการตั้งค่าสภาพแวดล้อมการผลิต Node.js ของเรา คู่มือฉบับสมบูรณ์นี้จะแบ่งปันแนวทางปฏิบัติที่ผ่านการทดสอบจริงสำหรับการปรับใช้ Node.js ในสภาพแวดล้อมการผลิต โดยเน้นที่การเพิ่มประสิทธิภาพการทำงาน การตรวจสอบ และบทเรียนที่เราได้เรียนรู้จากการขยายขนาดแอปพลิเคชัน Node.js เพื่อรองรับธุรกรรมหลายล้านรายการต่อวัน
การปฏิวัติการเพิ่มประสิทธิภาพประสิทธิภาพคอร์เดี่ยว 573% ของเรา
เมื่อเราย้ายจากโปรเซสเซอร์ Intel ไปยัง AMD Ryzen เราสามารถทำให้แอปพลิเคชัน Node.js ของเรามี ประสิทธิภาพดีขึ้น 573% นี่ไม่ใช่แค่การปรับแต่งเล็กน้อย แต่เป็นการเปลี่ยนแปลงพื้นฐานที่ทำให้แอปพลิเคชัน Node.js ของเราทำงานได้ดีขึ้นในสภาพแวดล้อมการผลิต และแสดงให้เห็นถึงความสำคัญของการเพิ่มประสิทธิภาพประสิทธิภาพคอร์เดี่ยวสำหรับแอปพลิเคชัน Node.js ทุกตัว
Tip
สำหรับแนวทางปฏิบัติที่ดีที่สุดในการปรับใช้ Node.js ในสภาพแวดล้อมการผลิต การเลือกฮาร์ดแวร์เป็นสิ่งสำคัญ เราเลือกใช้โฮสติ้ง DataPacket โดยเฉพาะเพราะมี AMD Ryzen ให้เลือก เนื่องจากประสิทธิภาพคอร์เดี่ยวมีความสำคัญสำหรับแอปพลิเคชัน Node.js เพราะการรัน JavaScript เป็นแบบ single-threaded
ทำไมการเพิ่มประสิทธิภาพประสิทธิภาพคอร์เดี่ยวจึงสำคัญสำหรับ Node.js
การย้ายจาก Intel ไปยัง AMD Ryzen ของเราทำให้เกิด:
- ประสิทธิภาพดีขึ้น 573% ในการประมวลผลคำขอ (มีเอกสารใน GitHub Issue #1519 ของหน้า status ของเรา)
- ขจัดความล่าช้าในการประมวลผล จนเกือบตอบสนองทันที (กล่าวถึงใน GitHub Issue #298)
- อัตราส่วนราคาต่อประสิทธิภาพที่ดีกว่าสำหรับสภาพแวดล้อมการผลิต Node.js
- เวลาตอบสนองที่ดีขึ้น ในทุกจุดเชื่อมต่อของแอปพลิเคชันของเรา
การเพิ่มประสิทธิภาพนี้มีผลอย่างมากจนตอนนี้เราถือว่าโปรเซสเซอร์ AMD Ryzen เป็นสิ่งจำเป็นสำหรับการปรับใช้ Node.js ในสภาพแวดล้อมการผลิตอย่างจริงจัง ไม่ว่าคุณจะรันเว็บแอปพลิเคชัน API ไมโครเซอร์วิส หรือภาระงาน Node.js อื่น ๆ
เนื้อหาที่เกี่ยวข้อง
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการเลือกโครงสร้างพื้นฐานของเรา โปรดดู:
- บริการส่งต่ออีเมลที่ดีที่สุด - การเปรียบเทียบประสิทธิภาพ
- โซลูชันโฮสต์ด้วยตนเอง - คำแนะนำฮาร์ดแวร์
การตั้งค่าสภาพแวดล้อมการผลิต Node.js: เทคโนโลยีสแตกของเรา
แนวทางปฏิบัติที่ดีที่สุดของเราสำหรับการปรับใช้ Node.js ในสภาพแวดล้อมการผลิตรวมถึงการเลือกเทคโนโลยีอย่างรอบคอบโดยอิงจากประสบการณ์การผลิตหลายปี นี่คือสิ่งที่เราใช้และเหตุผลที่การเลือกเหล่านี้ใช้ได้กับแอปพลิเคชัน Node.js ทุกตัว:
ตัวจัดการแพ็กเกจ: pnpm เพื่อประสิทธิภาพในการผลิต
สิ่งที่เราใช้: pnpm (เวอร์ชันที่กำหนดแน่นอน)
เราเลือกใช้ pnpm แทน npm และ yarn สำหรับการตั้งค่าสภาพแวดล้อมการผลิต Node.js ของเราเพราะ:
- เวลาติดตั้งที่เร็วขึ้น ใน pipeline CI/CD
- ประหยัดพื้นที่ดิสก์ ผ่านการเชื่อมโยงแบบ hard link
- การแก้ไข dependency ที่เข้มงวด ป้องกัน dependency ผี
- ประสิทธิภาพที่ดีกว่า ในการปรับใช้ในสภาพแวดล้อมการผลิต
Note
เป็นส่วนหนึ่งของแนวทางปฏิบัติที่ดีที่สุดสำหรับการปรับใช้ Node.js ในสภาพแวดล้อมการผลิต เรากำหนดเวอร์ชันที่แน่นอนของเครื่องมือสำคัญอย่าง pnpm เพื่อให้แน่ใจว่าพฤติกรรมจะสอดคล้องกันในทุกสภาพแวดล้อมและเครื่องของสมาชิกในทีมทุกคน
รายละเอียดการใช้งาน:
เว็บเฟรมเวิร์ก: Koa สำหรับ Node.js การผลิตสมัยใหม่
สิ่งที่เราใช้:
@koa/router@koa/multer@ladjs/koa-simple-ratelimitเราเลือกใช้ Koa แทน Express สำหรับโครงสร้างพื้นฐาน Node.js ในการผลิตของเราเนื่องจากรองรับ async/await ที่ทันสมัยและการจัดการ middleware ที่สะอาดกว่า ผู้ก่อตั้งของเรา Nick Baugh มีส่วนร่วมในทั้ง Express และ Koa ทำให้เราเข้าใจลึกซึ้งเกี่ยวกับทั้งสองเฟรมเวิร์กสำหรับการใช้งานในสภาพแวดล้อมการผลิต
รูปแบบเหล่านี้ใช้ได้ไม่ว่าคุณจะสร้าง REST APIs, เซิร์ฟเวอร์ GraphQL, เว็บแอปพลิเคชัน หรือไมโครเซอร์วิส
ตัวอย่างการใช้งานของเรา:
การประมวลผลงานเบื้องหลัง: Bree สำหรับความน่าเชื่อถือในการผลิต
สิ่งที่เราใช้: bree ตัวจัดตารางงาน
เราได้สร้างและดูแล Bree เพราะตัวจัดตารางงานที่มีอยู่ไม่ตอบโจทย์ความต้องการของเราในเรื่องการรองรับ worker thread และฟีเจอร์ JavaScript ที่ทันสมัยในสภาพแวดล้อม Node.js สำหรับการผลิต รูปแบบนี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ ที่ต้องการการประมวลผลเบื้องหลัง งานที่ตั้งเวลาไว้ หรือ worker threads
ตัวอย่างการใช้งานของเรา:
การจัดการข้อผิดพลาด: @hapi/boom สำหรับความน่าเชื่อถือในการผลิต
สิ่งที่เราใช้: @hapi/boom
เราใช้ @hapi/boom สำหรับการตอบกลับข้อผิดพลาดที่มีโครงสร้างในแอปพลิเคชัน Node.js สำหรับการผลิตทั้งหมด รูปแบบนี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ ที่ต้องการการจัดการข้อผิดพลาดที่สม่ำเสมอ
ตัวอย่างการใช้งานของเรา:
วิธีการตรวจสอบแอปพลิเคชัน Node.js ในการผลิต
แนวทางของเราในการตรวจสอบแอปพลิเคชัน Node.js ในการผลิตได้พัฒนาขึ้นผ่านประสบการณ์หลายปีในการรันแอปพลิเคชันในระดับใหญ่ เราดำเนินการตรวจสอบในหลายชั้นเพื่อให้มั่นใจในความน่าเชื่อถือและประสิทธิภาพสำหรับแอปพลิเคชัน Node.js ทุกประเภท
การตรวจสอบระดับระบบสำหรับ Node.js ในการผลิต
การใช้งานหลักของเรา: helpers/monitor-server.js
สิ่งที่เราใช้: node-os-utils
เกณฑ์การตรวจสอบในการผลิตของเรา (จากโค้ดการผลิตจริง):
- ขีดจำกัด heap ขนาด 2GB พร้อมการแจ้งเตือนอัตโนมัติ
- เกณฑ์เตือนการใช้หน่วยความจำ 25%
- เกณฑ์แจ้งเตือนการใช้ CPU 80%
- เกณฑ์เตือนการใช้ดิสก์ 75%
Warning
เกณฑ์เหล่านี้เหมาะกับการกำหนดค่าฮาร์ดแวร์เฉพาะของเรา เมื่อดำเนินการตรวจสอบ Node.js ในการผลิต โปรดตรวจสอบการใช้งาน monitor-server.js ของเราเพื่อเข้าใจตรรกะที่แน่นอนและปรับค่าตามการตั้งค่าของคุณ
การตรวจสอบระดับแอปพลิเคชันสำหรับ Node.js ในการผลิต
การจำแนกข้อผิดพลาดของเรา: helpers/is-code-bug.js
ตัวช่วยนี้แยกแยะระหว่าง:
- บั๊กโค้ดจริง ที่ต้องการความสนใจทันที
- ข้อผิดพลาดของผู้ใช้ ที่เป็นพฤติกรรมที่คาดหวัง
- ความล้มเหลวของบริการภายนอก ที่เราไม่สามารถควบคุมได้
รูปแบบนี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ — เว็บแอป, API, ไมโครเซอร์วิส หรือบริการเบื้องหลัง
การใช้งานระบบบันทึกของเรา: helpers/logger.js
เราดำเนินการปกปิดข้อมูลในฟิลด์อย่างครอบคลุมเพื่อปกป้องข้อมูลที่ละเอียดอ่อนในขณะที่ยังคงรักษาความสามารถในการดีบักที่มีประโยชน์ในสภาพแวดล้อมการผลิต Node.js ของเรา
การตรวจสอบเฉพาะแอปพลิเคชัน
การใช้งานเซิร์ฟเวอร์ของเรา:
การตรวจสอบคิว: เรากำหนดขีดจำกัดคิวที่ 5GB และตั้งเวลาหมดเวลา 180 วินาทีสำหรับการประมวลผลคำขอเพื่อป้องกันการใช้ทรัพยากรเกินขีดจำกัด รูปแบบเหล่านี้ใช้ได้กับแอปพลิเคชัน Node.js ใด ๆ ที่มีคิวหรือการประมวลผลเบื้องหลัง
การตรวจสอบ Node.js ในสภาพแวดล้อมการผลิตด้วยการตรวจสุขภาพ PM2
เราปรับปรุงการตั้งค่าสภาพแวดล้อมการผลิต Node.js ของเราด้วย PM2 จากประสบการณ์การผลิตหลายปี การตรวจสุขภาพ PM2 ของเราเป็นสิ่งจำเป็นสำหรับการรักษาความน่าเชื่อถือในแอปพลิเคชัน Node.js ใด ๆ
ระบบตรวจสุขภาพ PM2 ของเรา
การใช้งานหลักของเรา: jobs/check-pm2.js
การตรวจสอบ Node.js ในสภาพแวดล้อมการผลิตด้วยการตรวจสุขภาพ PM2 ของเรารวมถึง:
- ทำงานทุก 20 นาที ผ่านการตั้งเวลา cron
- ต้องการเวลาทำงานอย่างน้อย 15 นาที ก่อนพิจารณาว่ากระบวนการมีสุขภาพดี
- ตรวจสอบสถานะกระบวนการและการใช้หน่วยความจำ
- รีสตาร์ทกระบวนการที่ล้มเหลวโดยอัตโนมัติ
- ป้องกันการวนลูปรีสตาร์ท ด้วยการตรวจสุขภาพอย่างชาญฉลาด
Caution
สำหรับแนวทางปฏิบัติที่ดีที่สุดในการปรับใช้ Node.js ในสภาพแวดล้อมการผลิต เราต้องการเวลาทำงาน 15 นาทีขึ้นไปก่อนพิจารณาว่ากระบวนการมีสุขภาพดีเพื่อหลีกเลี่ยงการวนลูปรีสตาร์ท ซึ่งช่วยป้องกันความล้มเหลวแบบต่อเนื่องเมื่อกระบวนการประสบปัญหาเกี่ยวกับหน่วยความจำหรือปัญหาอื่น ๆ
การตั้งค่า PM2 สำหรับการผลิตของเรา
การตั้งค่า ecosystem ของเรา: ศึกษาไฟล์เริ่มต้นเซิร์ฟเวอร์ของเราเพื่อการตั้งค่าสภาพแวดล้อมการผลิต Node.js:
รูปแบบเหล่านี้ใช้ได้ไม่ว่าคุณจะรันแอป Express, เซิร์ฟเวอร์ Koa, API GraphQL หรือแอปพลิเคชัน Node.js อื่น ๆ
การปรับใช้ PM2 อัตโนมัติ
การปรับใช้ PM2: ansible/playbooks/node.yml
เราทำให้การตั้งค่า PM2 ทั้งหมดเป็นอัตโนมัติผ่าน Ansible เพื่อให้แน่ใจว่าการปรับใช้ Node.js ในสภาพแวดล้อมการผลิตมีความสม่ำเสมอในเซิร์ฟเวอร์ทั้งหมดของเรา
ระบบจัดการและจำแนกข้อผิดพลาดในสภาพแวดล้อมการผลิต
หนึ่งในแนวทางปฏิบัติที่ดีที่สุดที่มีคุณค่ามากที่สุดสำหรับการปรับใช้ Node.js ในสภาพแวดล้อมการผลิตของเราคือการจำแนกข้อผิดพลาดอย่างชาญฉลาดที่ใช้ได้กับแอปพลิเคชัน Node.js ใด ๆ:
การใช้งาน isCodeBug ของเราสำหรับการผลิต
แหล่งที่มา: helpers/is-code-bug.js
ตัวช่วยนี้ให้การจำแนกข้อผิดพลาดอย่างชาญฉลาดสำหรับแอปพลิเคชัน Node.js ในสภาพแวดล้อมการผลิตเพื่อ:
- ให้ความสำคัญกับบั๊กจริง มากกว่าข้อผิดพลาดของผู้ใช้
- ปรับปรุงการตอบสนองต่อเหตุการณ์ โดยมุ่งเน้นที่ปัญหาจริง
- ลดความเหนื่อยล้าจากการแจ้งเตือน ที่เกิดจากข้อผิดพลาดของผู้ใช้ที่คาดการณ์ได้
- เข้าใจได้ดีขึ้น ระหว่างปัญหาที่เกิดจากแอปพลิเคชันกับที่เกิดจากผู้ใช้
รูปแบบนี้ใช้ได้กับแอปพลิเคชัน Node.js ใด ๆ — ไม่ว่าคุณจะสร้างเว็บไซต์อีคอมเมิร์ซ แพลตฟอร์ม SaaS, API หรือไมโครเซอร์วิส
การผสานรวมกับระบบบันทึกของเราในสภาพแวดล้อมการผลิต
การผสานรวม logger ของเรา: helpers/logger.js
Our logger ใช้ isCodeBug เพื่อกำหนดระดับการแจ้งเตือนและการปกปิดข้อมูลในฟิลด์ เพื่อให้แน่ใจว่าเราจะได้รับการแจ้งเตือนเกี่ยวกับปัญหาจริงในขณะที่กรองเสียงรบกวนในสภาพแวดล้อมการผลิต Node.js ของเรา
Related Content
เรียนรู้เพิ่มเติมเกี่ยวกับรูปแบบการจัดการข้อผิดพลาดของเรา:
- การสร้างระบบชำระเงินที่เชื่อถือได้ - รูปแบบการจัดการข้อผิดพลาด
- การปกป้องความเป็นส่วนตัวของอีเมล - การจัดการข้อผิดพลาดด้านความปลอดภัย
การดีบักประสิทธิภาพขั้นสูงด้วย v8-profiler-next และ cpupro
เราใช้เครื่องมือโปรไฟล์ขั้นสูงเพื่อวิเคราะห์ heap snapshots และดีบักปัญหา OOM (Out of Memory), คอขวดประสิทธิภาพ และปัญหาหน่วยความจำ Node.js ในสภาพแวดล้อมการผลิตของเรา เครื่องมือเหล่านี้จำเป็นสำหรับแอปพลิเคชัน Node.js ที่ประสบปัญหารั่วไหลของหน่วยความจำหรือปัญหาประสิทธิภาพ
วิธีการโปรไฟล์ของเราสำหรับ Node.js Production
เครื่องมือที่เราแนะนำ:
v8-profiler-next- สำหรับสร้าง heap snapshots และ CPU profilescpupro- สำหรับวิเคราะห์ CPU profiles และ heap snapshots
Tip
เราใช้ v8-profiler-next และ cpupro ร่วมกันเพื่อสร้างเวิร์กโฟลว์การดีบักประสิทธิภาพที่สมบูรณ์สำหรับแอปพลิเคชัน Node.js ของเรา การผสมผสานนี้ช่วยให้เราระบุการรั่วไหลของหน่วยความจำ คอขวดประสิทธิภาพ และปรับแต่งโค้ดในสภาพแวดล้อมการผลิตของเรา
วิธีที่เรานำการวิเคราะห์ Heap Snapshot มาใช้
การติดตามของเรา: helpers/monitor-server.js
การติดตามในสภาพแวดล้อมการผลิตของเรารวมถึงการสร้าง heap snapshot อัตโนมัติเมื่อเกินเกณฑ์หน่วยความจำ ซึ่งช่วยให้เราดีบักปัญหา OOM ก่อนที่จะทำให้แอปพลิเคชันล่ม
รูปแบบการใช้งานสำคัญ:
- สร้าง snapshot อัตโนมัติ เมื่อขนาด heap เกินเกณฑ์ 2GB
- โปรไฟล์แบบสัญญาณ สำหรับการวิเคราะห์ตามคำขอในสภาพแวดล้อมการผลิต
- นโยบายการเก็บรักษา สำหรับจัดการการเก็บ snapshot
- การผสานกับงานล้างข้อมูลของเรา สำหรับการบำรุงรักษาอัตโนมัติ
เวิร์กโฟลว์การดีบักประสิทธิภาพ
ศึกษาการใช้งานจริงของเรา:
- การติดตามเซิร์ฟเวอร์ - การติดตาม heap และการสร้าง snapshot
- งานล้างข้อมูล - การเก็บรักษาและล้าง snapshot
- การผสานกับ logger - การบันทึกประสิทธิภาพ
การใช้งานที่แนะนำสำหรับแอปพลิเคชัน Node.js ของคุณ
สำหรับการวิเคราะห์ heap snapshot:
- ติดตั้ง v8-profiler-next สำหรับการสร้าง snapshot
- ใช้ cpupro สำหรับวิเคราะห์ snapshot ที่สร้างขึ้น
- นำเกณฑ์การติดตามมาใช้ คล้ายกับ monitor-server.js ของเรา
- ตั้งค่าการล้างข้อมูลอัตโนมัติ เพื่อจัดการการเก็บ snapshot
- สร้างตัวจัดการสัญญาณ สำหรับโปรไฟล์ตามคำขอในสภาพแวดล้อมการผลิต
สำหรับการโปรไฟล์ CPU:
- สร้าง CPU profiles ในช่วงเวลาที่โหลดสูง
- วิเคราะห์ด้วย cpupro เพื่อระบุคอขวด
- เน้นเส้นทางร้อน และโอกาสในการปรับแต่ง
- ติดตามก่อน/หลัง การปรับปรุงประสิทธิภาพ
Warning
การสร้าง heap snapshots และ CPU profiles อาจส่งผลกระทบต่อประสิทธิภาพ เราแนะนำให้ใช้การควบคุมความถี่และเปิดใช้งานโปรไฟล์เฉพาะเมื่อสืบสวนปัญหาเฉพาะหรือในช่วงเวลาบำรุงรักษา
การผสานกับการติดตามในสภาพแวดล้อมการผลิตของเรา
เครื่องมือโปรไฟล์ของเราผสานรวมกับกลยุทธ์การติดตามที่กว้างขึ้นของเรา:
- การทริกเกอร์อัตโนมัติ ตามเกณฑ์หน่วยความจำ/CPU
- การผสานการแจ้งเตือน เมื่อพบปัญหาประสิทธิภาพ
- การวิเคราะห์ย้อนหลัง เพื่อติดตามแนวโน้มประสิทธิภาพตามเวลา
- การเชื่อมโยงกับเมตริกของแอปพลิเคชัน เพื่อการดีบักที่ครอบคลุม วิธีการนี้ช่วยให้เราสามารถระบุและแก้ไขปัญหาการรั่วไหลของหน่วยความจำ ปรับเส้นทางโค้ดที่รันบ่อยให้เหมาะสม และรักษาประสิทธิภาพที่เสถียรในสภาพแวดล้อมการผลิต Node.js ของเรา
ความปลอดภัยโครงสร้างพื้นฐานการผลิต Node.js
เราดำเนินการรักษาความปลอดภัยอย่างครอบคลุมสำหรับโครงสร้างพื้นฐานการผลิต Node.js ของเราผ่านการทำงานอัตโนมัติด้วย Ansible แนวปฏิบัติเหล่านี้ใช้กับแอปพลิเคชัน Node.js ใดๆ:
ความปลอดภัยระดับระบบสำหรับการผลิต Node.js
การใช้งาน Ansible ของเรา: ansible/playbooks/security.yml
มาตรการความปลอดภัยหลักของเราสำหรับสภาพแวดล้อมการผลิต Node.js:
- ปิดการใช้งาน swap เพื่อป้องกันไม่ให้ข้อมูลที่ละเอียดอ่อนถูกเขียนลงดิสก์
- ปิดการใช้งาน core dumps เพื่อป้องกันการดัมพ์หน่วยความจำที่มีข้อมูลละเอียดอ่อน
- บล็อกการใช้งาน USB storage เพื่อป้องกันการเข้าถึงข้อมูลโดยไม่ได้รับอนุญาต
- ปรับแต่งพารามิเตอร์เคอร์เนล ทั้งด้านความปลอดภัยและประสิทธิภาพ
Warning
เมื่อดำเนินการตามแนวปฏิบัติที่ดีที่สุดสำหรับการปรับใช้ Node.js ในการผลิต การปิดการใช้งาน swap อาจทำให้เกิดการฆ่าโปรเซสเนื่องจากหน่วยความจำไม่เพียงพอหากแอปพลิเคชันของคุณใช้ RAM เกินขนาดที่มี เราติดตามการใช้งานหน่วยความจำอย่างระมัดระวังและกำหนดขนาดเซิร์ฟเวอร์ให้เหมาะสม
ความปลอดภัยของแอปพลิเคชันสำหรับแอป Node.js
การลบข้อมูลในฟิลด์ล็อกของเรา: helpers/logger.js
เราลบข้อมูลที่ละเอียดอ่อนออกจากล็อก เช่น รหัสผ่าน โทเค็น กุญแจ API และข้อมูลส่วนบุคคล เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ในขณะที่ยังคงรักษาความสามารถในการดีบักในสภาพแวดล้อมการผลิต Node.js ใดๆ
การทำงานอัตโนมัติความปลอดภัยโครงสร้างพื้นฐาน
การตั้งค่า Ansible ครบถ้วนสำหรับการผลิต Node.js ของเรา:
เนื้อหาความปลอดภัยของเรา
เรียนรู้เพิ่มเติมเกี่ยวกับแนวทางความปลอดภัยของเรา:
- บริษัทตรวจสอบความปลอดภัยที่ดีที่สุด
- อีเมลเข้ารหัสปลอดภัยควอนตัม
- ทำไมต้องความปลอดภัยอีเมลแบบโอเพนซอร์ส
สถาปัตยกรรมฐานข้อมูลสำหรับแอป Node.js
เราใช้แนวทางฐานข้อมูลแบบผสมผสานที่ปรับให้เหมาะสมสำหรับแอป Node.js ของเรา รูปแบบเหล่านี้สามารถปรับใช้กับแอป Node.js ใดๆ:
การใช้งาน SQLite สำหรับการผลิต Node.js
สิ่งที่เราใช้:
การตั้งค่าของเรา: ansible/playbooks/sqlite.yml
เราใช้ SQLite สำหรับข้อมูลเฉพาะผู้ใช้ในแอป Node.js ของเราเพราะมันให้:
- การแยกข้อมูล ต่อผู้ใช้/ผู้เช่า
- ประสิทธิภาพที่ดีกว่า สำหรับการสืบค้นผู้ใช้คนเดียว
- การสำรองข้อมูลและการย้ายข้อมูลที่ง่ายขึ้น
- ความซับซ้อนลดลง เมื่อเทียบกับฐานข้อมูลที่ใช้ร่วมกัน
รูปแบบนี้เหมาะสำหรับแอป SaaS ระบบหลายผู้เช่า หรือแอป Node.js ใดๆ ที่ต้องการการแยกข้อมูล
การใช้งาน MongoDB สำหรับการผลิต Node.js
สิ่งที่เราใช้:
@ladjs/mongoose@ladjs/mongoose-error-messages@zainundin/mongoose-factoryการตั้งค่าของเรา:helpers/setup-mongoose.js
การกำหนดค่าของเรา: config/mongoose.js
เราใช้ MongoDB สำหรับข้อมูลแอปพลิเคชันในสภาพแวดล้อมการผลิต Node.js ของเราเนื่องจากมันให้:
- โครงสร้างสคีมาที่ยืดหยุ่น สำหรับโครงสร้างข้อมูลที่พัฒนาไปตามเวลา
- ประสิทธิภาพที่ดีกว่า สำหรับการสืบค้นที่ซับซ้อน
- ความสามารถในการขยายแนวนอน
- ภาษาสืบค้นที่ทรงพลัง
Note
แนวทางผสมผสานของเราได้รับการปรับให้เหมาะสมกับกรณีการใช้งานเฉพาะของเรา ศึกษารูปแบบการใช้งานฐานข้อมูลจริงของเราในโค้ดเบสเพื่อทำความเข้าใจว่าวิธีนี้เหมาะกับความต้องการแอปพลิเคชัน Node.js ของคุณหรือไม่
การประมวลผลงานพื้นหลังใน Node.js Production
เราสร้างสถาปัตยกรรมงานพื้นหลังของเรารอบๆ Bree สำหรับการปรับใช้ Node.js production ที่เชื่อถือได้ ซึ่งใช้ได้กับแอปพลิเคชัน Node.js ใดๆ ที่ต้องการการประมวลผลงานพื้นหลัง:
การตั้งค่าเซิร์ฟเวอร์ Bree ของเราสำหรับ Production
การใช้งานหลักของเรา: bree.js
การปรับใช้ด้วย Ansible ของเรา: ansible/playbooks/bree.yml
ตัวอย่างงานใน Production
การตรวจสอบสุขภาพ: jobs/check-pm2.js
การทำความสะอาดอัตโนมัติ: jobs/cleanup-tmp.js
งานทั้งหมดของเรา: เรียกดูไดเรกทอรีงานทั้งหมดของเรา
รูปแบบเหล่านี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ ที่ต้องการ:
- งานที่กำหนดเวลา (การประมวลผลข้อมูล, รายงาน, การทำความสะอาด)
- การประมวลผลงานพื้นหลัง (ปรับขนาดภาพ, ส่งอีเมล, นำเข้าข้อมูล)
- การตรวจสอบสุขภาพและการบำรุงรักษา
- การใช้เธรดงานสำหรับงานที่ใช้ CPU หนัก
รูปแบบการกำหนดเวลางานของเราสำหรับ Node.js Production
ศึกษารูปแบบการกำหนดเวลางานจริงของเราในไดเรกทอรีงานเพื่อเข้าใจ:
- วิธีที่เรานำการกำหนดเวลาแบบ cron มาใช้ใน Node.js production
- การจัดการข้อผิดพลาดและตรรกะการลองใหม่ของเรา
- วิธีที่เราใช้เธรดงานสำหรับงานที่ใช้ CPU หนัก
การบำรุงรักษาอัตโนมัติสำหรับแอปพลิเคชัน Node.js Production
เราดำเนินการบำรุงรักษาเชิงรุกเพื่อป้องกันปัญหาทั่วไปใน Node.js production รูปแบบเหล่านี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ:
การใช้งานการทำความสะอาดของเรา
แหล่งที่มา: jobs/cleanup-tmp.js
การบำรุงรักษาอัตโนมัติของเราสำหรับแอปพลิเคชัน Node.js production มุ่งเป้าไปที่:
- ไฟล์ชั่วคราว ที่เก่ากว่า 24 ชั่วโมง
- ไฟล์ล็อก ที่เกินขีดจำกัดการเก็บรักษา
- ไฟล์แคช และข้อมูลชั่วคราว
- ไฟล์ที่อัปโหลด ที่ไม่จำเป็นอีกต่อไป
- Heap snapshots จากการดีบักประสิทธิภาพ
รูปแบบเหล่านี้ใช้ได้กับแอปพลิเคชัน Node.js ใดๆ ที่สร้างไฟล์ชั่วคราว, ล็อก หรือข้อมูลแคช
การจัดการพื้นที่ดิสก์สำหรับ Node.js Production
เกณฑ์การตรวจสอบของเรา: helpers/monitor-server.js
- ขีดจำกัดคิว สำหรับการประมวลผลงานพื้นหลัง
- 75% การใช้งานดิสก์ เป็นเกณฑ์เตือน
- การทำความสะอาดอัตโนมัติ เมื่อเกินเกณฑ์
การบำรุงรักษาโครงสร้างพื้นฐานอัตโนมัติ
การทำงานอัตโนมัติด้วย Ansible สำหรับ Node.js production ของเรา:
คู่มือการใช้งานการปรับใช้ Node.js Production
ศึกษาโค้ดจริงของเราสำหรับแนวทางปฏิบัติที่ดีที่สุดในการใช้งานจริง
เริ่มต้นด้วยไฟล์สำคัญเหล่านี้สำหรับการตั้งค่าสภาพแวดล้อมการใช้งานจริงของ Node.js:
- การกำหนดค่า:
config/index.js - การตรวจสอบ:
helpers/monitor-server.js - การจัดการข้อผิดพลาด:
helpers/is-code-bug.js - การบันทึก:
helpers/logger.js - สุขภาพของกระบวนการ:
jobs/check-pm2.js
เรียนรู้จากบทความบล็อกของเรา
คู่มือการใช้งานทางเทคนิคของเราสำหรับ Node.js ในการใช้งานจริง:
- ระบบนิเวศของแพ็กเกจ NPM
- การสร้างระบบชำระเงิน
- การใช้งานความเป็นส่วนตัวของอีเมล
- ฟอร์มติดต่อด้วย JavaScript
- การรวมอีเมลกับ React
ระบบอัตโนมัติของโครงสร้างพื้นฐานสำหรับ Node.js ในการใช้งานจริง
เพลย์บุ๊ก Ansible ของเราเพื่อศึกษาในการปรับใช้ Node.js ในการใช้งานจริง:
กรณีศึกษาของเรา
การใช้งานในองค์กรของเรา:
สรุป: แนวทางปฏิบัติที่ดีที่สุดสำหรับการปรับใช้ Node.js ในการใช้งานจริง
โครงสร้างพื้นฐานการใช้งานจริงของ Node.js ของเราชี้ให้เห็นว่าแอปพลิเคชัน Node.js สามารถบรรลุความน่าเชื่อถือระดับองค์กรได้ผ่าน:
- การเลือกฮาร์ดแวร์ที่พิสูจน์แล้ว (AMD Ryzen สำหรับการเพิ่มประสิทธิภาพคอร์เดี่ยว 573%)
- การตรวจสอบ Node.js ในการใช้งานจริงที่ผ่านการทดสอบอย่างเข้มข้น ด้วยเกณฑ์เฉพาะและการตอบสนองอัตโนมัติ
- การจำแนกข้อผิดพลาดอย่างชาญฉลาด เพื่อปรับปรุงการตอบสนองเหตุการณ์ในสภาพแวดล้อมการใช้งานจริง
- การดีบักประสิทธิภาพขั้นสูง ด้วย v8-profiler-next และ cpupro เพื่อป้องกัน OOM
- การเสริมความปลอดภัยอย่างครอบคลุม ผ่านระบบอัตโนมัติของ Ansible
- สถาปัตยกรรมฐานข้อมูลแบบผสมผสาน ที่ปรับแต่งสำหรับความต้องการของแอปพลิเคชัน
- การบำรุงรักษาอัตโนมัติ เพื่อป้องกันปัญหาทั่วไปของ Node.js ในการใช้งานจริง
ข้อสรุปสำคัญ: ศึกษาไฟล์การใช้งานจริงและบทความบล็อกของเราแทนที่จะปฏิบัติตามแนวทางทั่วไป โค้ดของเรานำเสนอรูปแบบจริงสำหรับการปรับใช้ Node.js ในการใช้งานจริงที่สามารถปรับใช้กับแอปพลิเคชัน Node.js ใด ๆ — เว็บแอป, API, ไมโครเซอร์วิส หรือบริการเบื้องหลัง
รายการทรัพยากรครบถ้วนสำหรับ Node.js ในการใช้งานจริง
ไฟล์การใช้งานหลักของเรา
- การกำหนดค่าหลัก
- แพ็กเกจและการพึ่งพา
- การตรวจสอบเซิร์ฟเวอร์
- การจำแนกข้อผิดพลาด
- ระบบบันทึก
- การตรวจสอบสุขภาพ PM2
- การทำความสะอาดอัตโนมัติ
การดำเนินการเซิร์ฟเวอร์ของเรา
การทำงานอัตโนมัติของโครงสร้างพื้นฐานของเรา
บทความบล็อกทางเทคนิคของเรา
- การวิเคราะห์ระบบนิเวศ NPM
- การดำเนินการระบบการชำระเงิน
- คู่มือเทคนิคความเป็นส่วนตัวของอีเมล
- ฟอร์มติดต่อ JavaScript
- การรวมอีเมล React
- คู่มือโซลูชันโฮสต์ด้วยตนเอง