static.js स्थिर फ़ाइलों को परोसने के लिए स्वयं या nginx दृश्यमान है?


90

क्या कोई बेंचमार्क या तुलना है जो तेज है: nginx को नोड के सामने रखें और इसे सीधे स्टैटिक फ़ाइलों की सेवा दें या केवल नोड का उपयोग करें और इसका उपयोग करके स्टैटिक फ़ाइलों की सेवा करें?

nginx समाधान मेरे लिए अधिक प्रबंधनीय लगता है, कोई विचार?


3
मैं कहूंगा कि यह कॉन्फ़िगरेशन और कोड की मात्रा पर भी निर्भर करता है जो आपको एक सर्वर को दूसरे पर उपयोग करने के लिए लिखना होगा। यदि आप आईपीओ जाने की उम्मीद नहीं करते हैं और आपका ऐप सर्वर पहले से ही कॉन्फ़िगर है और आपकी जरूरत का हर काम कर रहा है, तो आप तब तक इसके साथ रह सकते हैं जब तक कि यह पर्याप्त न हो।
m33lky

जवाबों:


119

मुझे यहाँ के जवाबों से असहमत होना पड़ेगा। जबकि नोड ठीक काम करेगा, सही तरीके से कॉन्फ़िगर किए जाने पर नग्नेक्स सबसे निश्चित रूप से तेज़ होगा। एक छोटे से पैटर्न के साथ nginx C को एक समान पैटर्न (केवल तभी कनेक्शन में लौटने पर) की आवश्यकता के अनुसार कुशलतापूर्वक कार्यान्वित किया जाता है। इसके अलावा, यह Sendfile syscall को उन फ़ाइलों की सेवा करने के लिए समर्थन करता है जो उतनी ही तेजी से होती हैं जितनी आप संभवतः सेवा करने वाली फ़ाइलों में प्राप्त कर सकते हैं, क्योंकि यह ओएस कर्नेल ही है जो काम कर रहा है।

अब तक nginx फ्रंट सर्वर के रूप में वास्तविक मानक बन गया है। आप स्थैतिक फ़ाइलों, gzip, SSL, और यहां तक ​​कि बाद में लोड-संतुलन की सेवा में इसके प्रदर्शन के लिए इसका उपयोग कर सकते हैं।

पुनश्च: यह मानता है कि फ़ाइलें वास्तव में "स्थिर" हैं जैसे अनुरोध के समय डिस्क पर आराम करती हैं।


7
बस एक मामूली नोट: नोड.जेएस भी समर्थन करता है sendfile- लेकिन ऐसा लगता है कि आपको कुछ कोड लिखना होगा, उदाहरण के लिए देखें। blog.std.in/2010/09/09/use-sendfile-with-nodejs
tuomassalo

स्थैतिक सामग्री परोसने से बाहर, नग्नेक्स का प्रदर्शन सार्वजनिक वेब पर मौजूद मुख्य सर्वर (टॉमकैट / जेट्टी / आईआईएस, आदि) को उजागर करने से बेहतर क्यों है?
राफियान

1
यदि आपके एप्लिकेशन से कोई अनुरोध किया जाता है, तो यह अनुरोध पहले nginx के माध्यम से इसे रूट करके जादुई रूप से तेज़ नहीं किया जाएगा (यह सबसे अच्छी स्थिति में तब और तेज़ हो सकता है जब nginx static CSS और js, gzip और SSL को हैंडल करता है)। हालाँकि, nginx भी सर्वश्रेष्ठ सॉफ्टवेयर लोड बैलेन्सर में से एक है, इसलिए यह महत्वपूर्ण हो सकता है क्योंकि अधिकांश सर्वर मध्यम उच्च भार पर फ़्लिप करने के लिए कुख्यात हैं।
m33lky

लेकिन आप Node.js. का उपयोग करके फ़ाइलों को असंगत तरीके से सर्वर कर सकते हैं क्या आप NGINX के साथ ऐसा कर सकते हैं?
ड्रैगोस सी।

1
@lwansbrough उन बेंचमार्क को टेबल पर लाता है। इस विषय में कम से कम एक व्यक्ति ने स्वयं का प्रयोग किया है।
m33lky

75

मैंने ab -n 10000 -c 100एक स्थिर 1406 बाइट की सेवा के लिए एक त्वरित किया favicon.ico, nginx, Express.js (स्टेटिक मिडलवेयर) और क्लस्टर एक्सप्रेस Express.js की तुलना। उम्मीद है की यह मदद करेगा:

यहाँ छवि विवरण दर्ज करें

दुर्भाग्य से मैं अपनी मशीन पर 1000 या यहाँ तक कि 10000 समवर्ती अनुरोधों को nginx के रूप में परीक्षण नहीं कर सकता, त्रुटियों को फेंकना शुरू कर देगा।

EDIT : जैसा कि आर्टवोक द्वारा सुझाया गया है, यहां क्लस्टर + staticमिडलवेयर (धीमी) के परिणाम हैं :

यहाँ छवि विवरण दर्ज करें


धन्यवाद, बहुत उपयोगी! क्या आपने favicon के लिए इस मिडलवेयर का उपयोग किया है: senchalabs.org/connect/favicon.html या इसे केवल स्थैतिक फ़ाइल के रूप में परोसा है?
आर्टवोक

@artvolk favicon one :)
ग्रेमो

3
क्या आपने परीक्षणों के लिए NODE_ENV = उत्पादन निर्धारित किया है? क्योंकि कैशिंग के कारण staticजो उत्पादन में करेगा, उसके कारण एक अविश्वसनीय अंतर होगा।
रफ्री

21
आप में से जो इतालवी नहीं बोलते हैं, एक्स अक्ष अनुरोधों का # है, और वाई अक्ष एमएस की संख्या है जो इसे फ़ाइल की सेवा में ले गई। मुझे Google अनुवाद करना पड़ा क्योंकि मैं यह सुनिश्चित करना चाहता था कि मैं डेटा को गलत नहीं पढ़ रहा था। हालांकि यह डेटा अविश्वसनीय रूप से मददगार था और मैं वास्तव में यहां बेंचमार्क टेस्ट की सराहना करता हूं। सब के बाद nginx के साथ चिपके रहेंगे
JL ग्रिफिन

1
क्या NODE_ENV = उत्पादन सेट था?
basickarl

11

मुझे @ ग्रेमो के चार्ट की एक अलग व्याख्या है। यह मुझे समान संख्या में अनुरोधों (9-10k के बीच) पर नोड और नगनेक्स स्केल की तरह दिखता है। निश्चित रूप से nginx के लिए प्रतिक्रिया में विलंबता लगातार 20ms से कम है, लेकिन मुझे नहीं लगता कि उपयोगकर्ता आवश्यक रूप से उस अंतर को महसूस करेंगे (यदि आपका ऐप अच्छी तरह से बनाया गया है)। मशीनों की निश्चित संख्या को देखते हुए, इससे पहले कि मैं एक नोड मशीन को nginx में परिवर्तित करूं, यह देखते हुए कि नोड का स्थान सबसे अधिक लोड पहले स्थान पर होगा, जहां लोड का एक महत्वपूर्ण हिस्सा लगेगा। यदि आप पहले से ही लोड संतुलन के लिए nginx को एक मशीन समर्पित कर रहे हैं तो इसका एक प्रतिरूप है। अगर ऐसा है तो आपके पास स्थिर सामग्री के साथ-साथ आपकी सेवा भी हो सकती है।


1
"निश्चित रूप से nginx के लिए प्रतिक्रिया में विलंबता लगातार 20ms से कम है, लेकिन मुझे नहीं लगता कि उपयोगकर्ता आवश्यक रूप से उस अंतर को महसूस करेंगे"? मुझे गंभीरता से आशा है कि आप लोग ऐसा नहीं करेंगे। वहाँ सबूत है कि उपयोगकर्ताओं को एक 1ms अंतर महसूस होगा!
नवीन

4
प्रशस्ति पत्र की जरूरत है
डेविड

9

किसी भी तरह से, मैं स्थैतिक फ़ाइलों को कैश करने के लिए Nginx सेटअप करूँगा ... आपको वहां एक बड़ा अंतर दिखाई देगा। फिर, आप उन्हें नोड से सेवा देते हैं या नहीं, आप मूल रूप से अपने नोड ऐप पर समान प्रदर्शन और समान लोड-राहत प्राप्त कर रहे हैं।

मैं व्यक्तिगत रूप से ज्यादातर मामलों में स्थैतिक संपत्ति की सेवा करने वाले मेरे नगनेक्स के विचार को पसंद नहीं करता

1) परियोजना को अब एक ही मशीन पर होना चाहिए - या संपत्ति में विभाजित किया जाना है (नगीनक्स मशीन पर) और वेब ऐप (स्केलिंग के लिए कई मशीनों पर)

2) Nginx config को अब स्थैतिक संपत्ति / पुनः लोड करने के लिए पथ स्थानों को बनाए रखना पड़ता है जब वे बदलते हैं।


0

यह एक मुश्किल सवाल का जवाब है। यदि आपने वास्तव में हल्के नोड सर्वर को केवल स्थिर फ़ाइलों की सेवा करने के लिए लिखा है, तो यह सबसे अधिक संभावना है कि यह नग्नेक्स की तुलना में बेहतर प्रदर्शन करेगा, लेकिन यह इतना आसान नहीं है। ( यहां "बेंचमार्क" की तुलना एक नोडज फ़ाइल सर्वर और लाइटटैप्ड से की गई है - जो स्टैटिक फ़ाइलों की सेवा करते समय ngingx के प्रदर्शन के समान है)।

स्थैतिक फ़ाइलों की सेवा के संबंध में प्रदर्शन अक्सर काम करने वाले वेब-सर्वर की तुलना में अधिक हो जाता है। यदि आप उच्चतम प्रदर्शन चाहते हैं, तो आप एंड-यूज़र्स के लिए विलंबता को कम करने और एज-कैशिंग से लाभ उठाने के लिए अपनी फ़ाइलों की सेवा के लिए एक सीडीएन का उपयोग कर रहे हैं।

यदि आप इसके बारे में चिंतित नहीं हैं, तो नोड अधिकांश स्थितियों में स्थिर फ़ाइलों की सेवा कर सकता है। नोड खुद को एसिंक्रोनस कोड के लिए उधार देता है, जो कि इस पर भी निर्भर करता है क्योंकि यह एकल-थ्रेडेड है और कोई भी अवरुद्ध i / o पूरी प्रक्रिया को अवरुद्ध कर सकता है, और आपके अनुप्रयोगों के प्रदर्शन को नीचा दिखा सकता है। संभावना से अधिक आप एक गैर-अवरुद्ध फैशन में अपना कोड लिख रहे हैं, लेकिन यदि आप समकालिक रूप से कुछ भी कर रहे हैं, तो आप अवरुद्ध करने का कारण बन सकते हैं, जो यह बताएगा कि अन्य क्लाइंट अपनी स्थिर फ़ाइलों को कितनी तेजी से सेवा दे सकते हैं। आसान उपाय यह है कि ब्लॉकिंग कोड न लिखें, लेकिन कभी-कभी यह संभावना नहीं होती है, या आप इसे हमेशा लागू नहीं कर सकते।


9
यह सब बकवास है। यह सवाल nginx अपाचे के बारे में नहीं है। दोनों nginx और नोड उनके घटना पाश के लिए libev का उपयोग करें। Nginx नोड की तुलना में कई गुना तेज होने वाला है। उनमें से एक में VM का ओवरहेड नहीं है, और यह विशेष रूप से आपके फ़ाइल सिस्टम पर इस ऑपरेशन को करने के लिए लिखा गया है।
इवान कैरोल

1
कामेच्छा जल्दी नोड था। लिबव ने नोड को क्रोसप्लेट रिकॉर्डर चलाने की अनुमति देने के लिए इस भूमिका को अपनाया है।
tsturzl

1
मैं यह नहीं देखता कि इसमें अतुल्यकालिक कोड कारक कैसे हैं। नोड का प्रदर्शन Nginx की तुलना में कहीं अधिक खराब होगा और यह संभवतः I / O को अवरुद्ध करने के कारण होगा, जिसे आप तब चलाएंगे जब आपको ग्राहकों का एक समूह मिला होगा जो आपसे डिस्क से फ़ाइलों को पढ़ने के लिए कहेगा। सबसे अच्छा अभ्यास हमेशा स्थिर संपत्ति के लिए Nginx का उपयोग करना है ताकि आपका नोड एप्लिकेशन एप्लिकेशन लॉजिक को संभाल सके। हम सैद्धांतिक परिदृश्यों के बारे में बात कर सकते हैं जहां नोड बेहतर प्रदर्शन करेंगे, लेकिन वास्तविक दुनिया में
नग्नेक्स

-11

मुझे यकीन है कि विशुद्ध रूप से नोड.जेएस बहुत सारे पहलू में नैग्नेक्स को पछाड़ सकता है।

सभी ने कहा कि मुझे नग्नेक्स रहना है, एक अंतर्निर्मित कैश है, जबकि नोड.जेएस इसे स्थापित करने के साथ नहीं आता है (आप अपने खुद के फ़ाइल CACHE का निर्माण करना चाहते हैं)। कस्टम फ़ाइल कैश सुपर सरल रूप में nginx और बाजार में किसी भी अन्य सर्वर से बेहतर प्रदर्शन करता है।

इसके अलावा Nginx कई कोर पर चलता है। नोड की पूरी क्षमता का उपयोग करने के लिए आपको नोड सर्वर को क्लस्टर करना होगा। यदि आप यह जानना चाहते हैं कि कैसे पी.एम.

नोड के साथ प्रदर्शन निर्वाण प्राप्त करने के लिए आपको गहरी खुदाई करने की आवश्यकता है, यही एकमात्र समस्या है। एक बार जब हाँ किया ... यह Nginx धड़कता है।


1
आपको कुछ तथ्यों को लाने की जरूरत है, जैसा कि मैं विश्वास करना चाहूंगा कि आप क्या कह रहे हैं, लेकिन वास्तविक दुनिया के आधार पर, बेंचमार्क चाहिए! लेकिन किनारे के मामले नहीं
स्टीफन रोजिन

5
मजेदार बात यह है कि इस उत्तर के पास उतने ही तथ्य हैं जितने चुने हुए मतों के साथ चुने गए उत्तर हैं। मुझे लगता है कि लोग सिर्फ सामने एक वेब सर्वर को पसंद करते हैं, क्योंकि उन्हें [किसी अन्य वेब एप्लिकेशन को सम्मिलित करने] में इसे कैसे सिखाया जाता है। यह एक अच्छा जवाब नहीं है, लेकिन दया से बाहर +1 है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.