มีเกณฑ์มาตรฐานหรือการเปรียบเทียบใดที่เร็วกว่า: วาง nginx ไว้ด้านหน้าโหนดและปล่อยให้แสดงไฟล์แบบคงที่โดยตรงหรือใช้เพียงโหนดและให้บริการไฟล์แบบคงที่โดยใช้
โซลูชัน nginx ดูเหมือนจะจัดการได้มากกว่าสำหรับฉันมีความคิดอย่างไร
มีเกณฑ์มาตรฐานหรือการเปรียบเทียบใดที่เร็วกว่า: วาง nginx ไว้ด้านหน้าโหนดและปล่อยให้แสดงไฟล์แบบคงที่โดยตรงหรือใช้เพียงโหนดและให้บริการไฟล์แบบคงที่โดยใช้
โซลูชัน nginx ดูเหมือนจะจัดการได้มากกว่าสำหรับฉันมีความคิดอย่างไร
คำตอบ:
ฉันจะไม่เห็นด้วยกับคำตอบที่นี่ แม้ว่า Node จะทำงานได้ดี แต่ nginx จะเร็วขึ้นอย่างแน่นอนเมื่อกำหนดค่าอย่างถูกต้อง nginx ถูกนำไปใช้อย่างมีประสิทธิภาพใน C ตามรูปแบบที่คล้ายกัน (กลับไปที่การเชื่อมต่อเมื่อจำเป็นเท่านั้น) ด้วยรอยเท้าหน่วยความจำขนาดเล็ก นอกจากนี้ยังรองรับsyscall sendfileเพื่อให้บริการไฟล์เหล่านั้นซึ่งเร็วที่สุดเท่าที่คุณจะทำได้ในการให้บริการไฟล์เนื่องจากเป็นเคอร์เนลของระบบปฏิบัติการที่ทำงานได้
ตอนนี้ nginx ได้กลายเป็นมาตรฐานโดยพฤตินัยในฐานะเซิร์ฟเวอร์ส่วนหน้า คุณสามารถใช้เพื่อเพิ่มประสิทธิภาพในการให้บริการไฟล์แบบคงที่, gzip, SSL และแม้กระทั่งการโหลดบาลานซ์ในภายหลัง
PS: สิ่งนี้ถือว่าไฟล์เป็น "คงที่" จริงๆเหมือนอยู่ในดิสก์ในเวลาที่มีการร้องขอ
sendfile
- แต่ดูเหมือนว่าคุณต้องเขียนโค้ดดูเช่น blog.std.in/2010/09/09/using-sendfile-with-nodejs
ฉันทำอย่างรวดเร็วab -n 10000 -c 100
ในการให้บริการ 1406 ไบต์แบบคงที่favicon.ico
โดยเปรียบเทียบ nginx, Express.js (มิดเดิลแวร์แบบคงที่) และ Express.js แบบคลัสเตอร์ หวังว่านี่จะช่วยได้:
น่าเสียดายที่ฉันไม่สามารถทดสอบคำขอพร้อมกัน 1,000 รายการหรือแม้แต่ 10,000 รายการเป็น nginx บนเครื่องของฉันได้จะเริ่มส่งข้อผิดพลาด
แก้ไข : ตามที่ artvolk แนะนำนี่คือผลลัพธ์ของคลัสเตอร์ + static
มิดเดิลแวร์ (ช้ากว่า):
static
ตัวกลางการแคชจะทำในการผลิต
ฉันมีการตีความแผนภูมิของ @ gremo ที่แตกต่างกัน สำหรับฉันดูเหมือนทั้งโหนดและสเกล nginx ที่จำนวนคำขอเท่ากัน (ระหว่าง 9-10k) แน่นอนว่าเวลาในการตอบสนองในการตอบสนองสำหรับ nginx จะต่ำลงโดยค่าคงที่ 20 มิลลิวินาที แต่ฉันไม่คิดว่าผู้ใช้จะต้องรับรู้ความแตกต่างนั้น (หากแอปของคุณสร้างมาดี) เมื่อพิจารณาถึงจำนวนเครื่องคงที่แล้วจะต้องใช้โหลดค่อนข้างมากก่อนที่ฉันจะแปลงเครื่องโหนดเป็น nginx โดยพิจารณาว่าโหนดเป็นจุดที่โหลดส่วนใหญ่จะเกิดขึ้นตั้งแต่แรก สิ่งหนึ่งที่ตรงข้ามกับเรื่องนี้คือหากคุณได้อุทิศเครื่องให้กับ nginx สำหรับการทำโหลดบาลานซ์แล้ว หากเป็นเช่นนั้นคุณอาจให้บริการเนื้อหาคงที่ของคุณเช่นกัน
ไม่ว่าจะด้วยวิธีใดฉันจะตั้งค่า Nginx เพื่อแคชไฟล์แบบคงที่ ... คุณจะเห็นความแตกต่างอย่างมากที่นั่น จากนั้นไม่ว่าคุณจะให้บริการจากโหนดหรือไม่ก็ตามโดยพื้นฐานแล้วคุณจะได้รับประสิทธิภาพที่เหมือนกันและการผ่อนแรงแบบเดียวกันในแอปโหนดของคุณ
โดยส่วนตัวแล้วฉันไม่ชอบแนวคิดของส่วนหน้า Nginx ของฉันที่ให้บริการเนื้อหาแบบคงที่ในกรณีส่วนใหญ่ในนั้น
1) ตอนนี้โปรเจ็กต์ต้องอยู่ในเครื่องเดียวกันหรือต้องแยกเป็นสินทรัพย์ (บนเครื่อง nginx) และเว็บแอพ (บนเครื่องหลายเครื่องสำหรับการปรับขนาด)
2) การกำหนดค่า Nginx ต้องรักษาตำแหน่งเส้นทางสำหรับสินทรัพย์คงที่ / โหลดซ้ำเมื่อมีการเปลี่ยนแปลง
นั่นเป็นคำถามที่ตอบยาก หากคุณเขียนเซิร์ฟเวอร์โหนดที่มีน้ำหนักเบามากเพื่อเพียงแค่ให้บริการไฟล์แบบคงที่ก็น่าจะทำงานได้ดีกว่า nginx แต่ก็ไม่ง่ายอย่างนั้น ( นี่คือ "เกณฑ์มาตรฐาน"เปรียบเทียบไฟล์เซิร์ฟเวอร์ nodejs และ lighttpd ซึ่งมีประสิทธิภาพใกล้เคียงกับ ngingx เมื่อให้บริการไฟล์คงที่)
ประสิทธิภาพในการให้บริการไฟล์แบบคงที่มักจะมาจากเว็บเซิร์ฟเวอร์ที่ทำงานมากกว่า หากคุณต้องการประสิทธิภาพสูงสุดคุณจะใช้ CDN เพื่อให้บริการไฟล์ของคุณเพื่อลดเวลาในการตอบสนองสำหรับผู้ใช้ปลายทางและได้รับประโยชน์จากการแคชขอบ
หากคุณไม่กังวลเกี่ยวกับเรื่องนี้โหนดสามารถให้บริการไฟล์คงที่ได้ดีในสถานการณ์ส่วนใหญ่ โหนดยืมตัวเองไปใช้รหัสอะซิงโครนัสซึ่งมันต้องอาศัยเนื่องจากเป็นเธรดเดียวและการปิดกั้น i / o ใด ๆ สามารถบล็อกกระบวนการทั้งหมดและลดประสิทธิภาพของแอปพลิเคชันของคุณ เป็นไปได้มากกว่าที่คุณจะเขียนโค้ดของคุณแบบไม่ปิดกั้น แต่ถ้าคุณทำอะไรพร้อมกันคุณอาจทำให้เกิดการบล็อกซึ่งจะลดความเร็วที่ไคลเอ็นต์อื่น ๆ สามารถรับไฟล์แบบคงที่ได้ วิธีแก้ปัญหาง่ายๆคืออย่าเขียนโค้ดบล็อก แต่บางครั้งก็ไม่เป็นไปได้หรือคุณไม่สามารถบังคับใช้ได้ตลอดไป
ฉันมั่นใจว่า node.js สามารถทำได้ดีกว่า nginx ในหลาย ๆ ด้าน
ทั้งหมดกล่าวว่าฉันต้องอยู่ NginX มีแคชในตัวในขณะที่ node.js ไม่ได้ติดตั้งมาจากโรงงาน (คุณต้องสร้างแคชไฟล์ของคุณเอง) แคชไฟล์ที่กำหนดเองมีประสิทธิภาพดีกว่า nginx และเซิร์ฟเวอร์อื่น ๆ ในตลาดเนื่องจากมันง่ายมาก
นอกจากนี้ Nginx ยังทำงานบนหลายคอร์ ในการใช้ Node อย่างเต็มศักยภาพคุณต้องคลัสเตอร์โหนดเซิร์ฟเวอร์ สนใจอยากทราบวิธีกรุณา pm.
คุณต้องขุดลึกเพื่อให้บรรลุนิพพานประสิทธิภาพด้วยโหนดนั่นคือปัญหาเดียว เมื่อทำนรกแล้ว ... มันเต้น Nginx