मुझे NGinx पर कब स्विच करना चाहिए?


11

मेरे पास अपाचे के माध्यम से कई डोमेन और एप्लिकेशन चल रहे हैं। इस समय सब कुछ ठीक है, लेकिन मेरी योजना है कि कुछ बहुत ही गहन-गहन वेब एप्लिकेशन (CPPCMS के साथ C ++ का उपयोग करके) परीक्षण के लिए अपने सर्वर से शुरू किया जाए, हो सकता है कि तैयार होने के बाद ही इस एप्लिकेशन के लिए एक अलग सर्वर प्राप्त हो।

किसी भी तरह से, मैंने NGinx के बारे में बहुत कुछ सुना है, जो अपाचे की तुलना में अधिक अच्छा लगता है, इसलिए मैं खुद से पूछ रहा था कि क्या यह उस नई परियोजना के लिए इसके साथ काम करने के लायक था। यह मेरे दिमाग में स्पष्ट नहीं है क्योंकि मुझे नहीं पता कि किस तरह का प्रदर्शन अड़चन NGinx ठीक करता है।

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

कहा जा रहा है, मुझे लगता है कि मैं इस तरफ बहुत बेहतर हो रहा हूं, लेकिन अभी भी सलाह की जरूरत है। मैंने कुछ nginx कॉन्फ़िगरेशन फ़ाइलों को चारों ओर से जब्त कर लिया है, और यह अपाचे लोगों की तुलना में बहुत अधिक समझ में आता है, लेकिन शायद मैं गलत हूं?

यदि मैं लोड-बैलेंसिंग चाहता हूं, तो एनजीइनएक्स सबसे अच्छा विकल्प होगा, इसलिए यदि आपके पास कई मशीनों पर अपना आवेदन फैला हुआ है, तो सही? जैसा कि मैं अपने आवेदन को स्कैलिंग (और प्रदर्शन) के लिए सोच रहा हूं, ऐसा लगता है कि यह वही है जो मुझे चाहिए, लेकिन शायद जब मुझे अपाचे से एनजीआईएनएक्स में स्थानांतरित करना दिलचस्प हो, तो मुझे इसके बारे में और अधिक चीजें जानने की जरूरत है। क्या यह मेरे सभी मौजूदा ऐप्स के लिए NGinx पर स्विच करने लायक है? इसकी कीमत कितनी होती है? (मेरा मतलब है, क्या यह समय पर एक से दूसरे पर स्विच करने के लिए महंगा है?) क्या मैं बिना किसी समस्या के एक ही मशीन पर अपाचे और एनजीआईएनएक्स दोनों का उपयोग कर सकता हूं?

साइड नोट : कृपया मुझे C ++ के बजाय व्याख्या की गई भाषाओं का उपयोग करने का आग्रह न करें, यह प्रश्न से संबंधित नहीं है। देखें CPPCSM औचित्य पेज यह fromt आवेदन की तरह क्या फायदा हो सकता है देखने के लिए। मैं पूरी तरह से कमियों को समझता हूं (रूबी और पायथन में ऐप की तुलना में, जो मैं पहले से ही कम बिजली वाले भूखे वेबैप्स के लिए उपयोग करता हूं) और मैं इसके साथ ठीक हूं।

जवाबों:


10

कई बिंदु:

Apache और Nginx या Lighttpd के बीच मुख्य अंतर (जो मुझे व्यक्तिगत रूप से बहुत पसंद है) वास्तुकला है:

  1. अपाचे एक कनेक्शन प्रति-प्रक्रिया या प्रति-थ्रेड (mod-XYZ के आधार पर) संभालता है
  2. Nginx और Lighttpd सिंगल थ्रेडेड हैं जो सिंगल ईवेंट लूप में कई कनेक्शन संभालते हैं।

नतीजतन:

  1. एक साथ उच्च संख्या में एक साथ कनेक्शन के तहत नेग्नेक्स और लाइटटैप स्केल बहुत बेहतर हैं, मान लीजिए कि 1000 कनेक्शन के साथ Apache लगभग मर जाएगा क्योंकि इसे मॉड-प्रीफ़ॉर्क में 1000 प्रक्रियाओं या मॉड-वर्कर में 1000 थ्रेड्स की आवश्यकता होगी।

    यदि आप धूमकेतु प्रौद्योगिकियों का उपयोग करने की योजना बना रहे हैं जहां प्रत्येक कनेक्शन के लिए लंबे समय तक मतदान HTTP कनेक्शन की आवश्यकता होती है तो अपाचे स्वीकार्य नहीं होगा क्योंकि यह अच्छी तरह से नहीं बढ़ता है।

  2. नियनेक्स और लाइटटपैड कम मेमोरी का उपभोग करते हैं क्योंकि प्रत्येक कनेक्शन के लिए + - दो सॉकेट (HTTP और FastCGI), मध्यवर्ती मेमोरी बफर और कुछ राज्य की आवश्यकता होती है, जबकि अपाचे को स्टैक और अन्य चीजों सहित पूरे धागे की आवश्यकता होगी।

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

अब एक और मुद्दा यह है कि जब आप FastCGI कनेक्शन का उपयोग कर कुछ लोड-बैलेंसिंग करना चाहते हैं।

पारंपरिक वास्तुकला में है

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)
            /      |           |            |      \
         HTTP    HTTP         HTTP        HTTP     HTTP
         /         |           |            |         \
 Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   Apache+PHP   
  Server 2    Server 3     Server 4      Server 5     Server 6

क्योंकि अपाचे प्रक्रियाओं में से प्रत्येक को mod-PHP (या अन्य मोड) चलाने के पूल को संभालता है

जब आप CppCMS का उपयोग करते हैं जो पूल को अपने आप संभालता है तो आप कुछ अलग कर सकते हैं:

                               |
                              HTTP
                               |
         Balancer (Nginx/Lighttpd/Cherooke/something-else)    
                           Server 1
            /      |           |            |      \
         FCGI    FCGI         FCGI        FCGI     FCGI
         /         |           |            |         \
    CppCMS App  CppCMS App  CppCMS App    CppCMS App  CppCMS App
     Server 2    Server 3     Server 4      Server 5     Server 6

इसलिए मूल रूप से आपको एक और अप्रत्यक्ष स्तर की आवश्यकता नहीं है क्योंकि CppCMS आपके लिए प्रक्रिया, थ्रेड और कनेक्शन पूल को संभालता है। जबकि PHP / Ruby / Perl को कुछ Apache mod-XYZ की जरूरत है या अपने FastCGI कनेक्टर को संभालना चाहिए।


+1 CppCMS के लेखक द्वारा पूर्ण अच्छी व्याख्या;) ठीक है अब मैं समग्र समस्या को बेहतर देखता हूं। तो मामला जहां आपके पास केवल एक सर्वर है (साथ शुरू करने के लिए) HTTP-> Balancer-> FCGI-> CPPCMS, अगर मैं सही ढंग से समझता हूं? जेसपर मोर्टेंसन की टिप्पणी से सलाह के बारे में आप क्या सोचते हैं, यह कहते हुए कि FastCGI तेज नहीं है?
'12

@ अस्वीकरण: ऊपर दिए गए उत्कृष्ट चित्रों को देखें - इस वास्तुकला में, FastCGI का उपयोग कई सर्वरों के बीच इंटरकनेक्ट के रूप में किया जाता है, प्रत्येक एक बहु-थ्रेडेड CppCMS उदाहरण को चलाता है। FastCGI की सापेक्ष गति इस मामले में बहुत कम मायने रखती है; आपके विकल्प HTTP, AJP और अन्य नेटवर्क-सक्षम प्रोटोकॉल होंगे जो 'तेज़' भी नहीं हैं। इस उत्तर को संभवतः स्वीकार किए जाने के रूप में चिह्नित किया जाना चाहिए, और आपके प्रश्न को संपादित किया गया है, क्योंकि यह वास्तव में तब नहीं है जब nginx इसके लायक है।
जेस्पर एम

@ जेस्पर मॉर्टेनसेन> मैं सहमत हूं, लेकिन आप इस सवाल पर क्या संशोधन करते हैं?
Klaim

6

नंगेक्स, बहुत ( बहुत ) बोलते हुए, आमतौर पर अपाचे की तुलना में बहुत अधिक थ्रूपुट प्राप्त कर सकते हैं जो वेब पर पृष्ठों की सेवा की समस्या के लिए एक अलग वास्तुशिल्प दृष्टिकोण के लिए धन्यवाद। नंगेक्स को मुख्य रूप से एक रिवर्स प्रॉक्सी के रूप में बनाया गया था, और यह उस भूमिका को असाधारण रूप से अच्छी तरह से भरता है (यह लोड-बैलेंसिंग बिट जिसे आपने कहा था); दूसरी ओर, अपाचे को वेब पृष्ठों की सेवा के लिए बनाया गया था, और बाद में प्रॉक्सी की क्षमता प्राप्त की।

उस ने कहा, वहाँ लगभग निश्चित रूप से कर रहे हैं क्षेत्रों अपाचे लगातार Nginx outperform जाएगा, जबकि अन्य वहाँ रहे हैं जहाँ Nginx बस लगातार outperform Apache के रूप में होगा।

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

उस ने कहा, यदि आप Nginx पर स्विच करना चाहते हैं (जो मैं प्रोत्साहित करता हूं!), तो इसके लिए जाएं। क्या आपको कोई लाभ दिखाई देगा? 10 में से 9 बार: नहीं, आप नहीं करेंगे। लेकिन आपको लगता है कि आप Nginx के विन्यास फाइल भाषा बेहतर की तरह उल्लेख किया है, इसलिए यदि यह आप अच्छी तरह से अपाचे से कॉन्फ़िगर Nginx के लिए और अधिक सहज महसूस करते हैं, बनाता है, कि है आप के लिए एक लाभ! (व्यक्तिगत रूप से, मुझे अपाचे कॉन्फ़िगरेशन सामान्य रूप से पढ़ने में आसान लगता है, लेकिन ऐसा इसलिए हो सकता है क्योंकि मैंने कई, कई साल उन्हें पढ़ने में बिताए, और कुछ ही महीने नगनेक्स पर बिताए हैं!)

एक साइड नोट पर: आपने C ++ में एक वेब ऐप बनाने की अपनी इच्छा का उल्लेख किया। आपकी पवित्रता के लिए, मैं आपको इसके बजाय PHP, पायथन, या यहां तक ​​कि जावा जैसी उच्च-स्तरीय भाषा का उपयोग करने के लिए दृढ़ता से आग्रह करता हूं। फिर अपने कोड को प्रोफाइल करें और विशिष्ट अड़चनों को संबोधित करने के लिए C ++ - आधारित मॉड्यूल बनाने पर विचार करें (Python and PHP दोनों इसे आसानी से अनुमति देते हैं; जावा के बारे में नहीं जानते)। यदि आप समग्र प्रदर्शन के बारे में चिंतित हैं, तो इस पर विचार करें: दुनिया का सबसे बड़ा अपरिवर्तित MMORPG EVE ऑनलाइन, C ++ में लिखे गए केवल प्रमुख घटकों (जैसे ग्राफिक्स लाइब्रेरी) के साथ पायथन (स्टैकलेस पायथन) के एक संस्करण पर बनाया गया है। यदि पायथन संभाल सकता है, तो निश्चित रूप से यह आपके वेब ऐप को संभाल सकता है?


+1 धन्यवाद। सी ++ के बारे में, जेस्पर मॉर्टेंसन जवाब पर मेरी टिप्पणी देखें। इसके अलावा, भले ही ईव ऑनलाइन के सर्वर-साइड पर पायथन का उपयोग किया जाता है (मुझे इस बारे में पता है, बहुत) AFAIK, यह केवल गेमप्ले कोड (जो बड़ा है) का प्रबंधन करता है, और कुछ अन्य भाग वास्तव में C ++ में हैं। ग्राफिक्स कोड क्लाइंट की तरफ होता है इसलिए C ++ ऐसे प्रकार के ग्राफिक प्रदर्शन के लिए अनिवार्य है। जैसा कि मैंने कहा, सीपीपीसीएमएस राशनले पेज देखें कि मैंने इसे क्यों चुना। अगर मैं आपकी सलाह मानूंगा, तो मुझे अपना आवेदन दो बार लिखना होगा, जबकि मुझे पहले से ही पता है कि यह बहुत ही शक्तिशाली है। इसके अलावा, मैं कमियां समझता हूं और मैं इसके साथ ठीक हूं।
Klaim

3

कोई भी वास्तव में "मुझे कब स्विच करना चाहिए" का जवाब नहीं दे सकता है - यह आपके भार, आपके स्वयं के आवेदन कोड के प्रदर्शन आदि पर निर्भर करेगा।

NGinx, जो अपाचे की तुलना में अधिक प्रदर्शन करने वाला लगता है

इवेंट I / O का उपयोग करके सभी क्लाइंट कनेक्शन को संभालने के लिए nginx एक एकल प्रक्रिया (या बहुत कम संख्या में कार्यकर्ता प्रक्रिया) का उपयोग करता है। अपाचे में कई "मल्टी-प्रोसेसिंग मॉड्यूल" उपलब्ध हैं, लेकिन वे सभी कई प्रक्रियाओं / कई थ्रेड्स की ओर अधिक झुकते हैं। नतीजतन, अपाचे आम तौर पर बुनियादी HTTP कनेक्शन हैंडलिंग के लिए nginx की तुलना में अधिक रैम और सीपीयू का उपभोग करेगा। आप केगेल के C10K पेज पर विभिन्न कनेक्शन हैंडलिंग दृष्टिकोणों का अवलोकन प्राप्त कर सकते हैं ।

बहुत प्रदर्शन-गहन वेब एप्लिकेशन (CPPCMS के साथ C ++ का उपयोग करके)

मैं होता दृढ़ता से एक उच्च स्तर की भाषा में बुनियादी webapp करने पर विचार करने के लिए (पायथन, या हो सकता है रूबी, स्काला) का सुझाव है, और एक पृष्ठभूमि में कतार का उपयोग कार्यकर्ता मशीनों जो "प्रदर्शन प्रधान" कार्यों एसिंक्रोनस रूप से संभालने के लिए काम टिकट भेजने के लिए।

जब आप लोड-संतुलन चाहते हैं, तो NGinx सबसे अच्छा विकल्प होगा

nginx एक अच्छा लोड बैलेंसर है; लेकिन उस जगह में कई विकल्प हैं ।

क्या मैं Apache और NGinx दोनों को एक ही मशीन पर बिना किसी समस्या के इस्तेमाल कर सकता हूँ?

हाँ। बस उन्हें अलग-अलग आईपी पोर्ट नंबर और / या आईपी पते पर चलाएं।


"मैं दृढ़ता से एक उच्च स्तर की भाषा में मूल वेबैप करने पर विचार करने का सुझाव दूंगा"> मैंने यह नहीं कहा कि यह एक मूल वेबप था - यह तुच्छ भी नहीं है। यदि आप CPPCMS का उपयोग करने के लिए औचित्य देखते हैं, तो लेखक उन कुछ मामलों को इंगित करता है जहाँ यह उपयोगी हो सकता है, और मैं उन मामलों में हूँ। मैंने अन्य विकल्पों पर विचार किया है, लेकिन उन्हें C ++ के साथ जाने की तुलना में अधिक महंगा पाया, कम से कम जिस तरह के वेबैप में मैं लिख रहा हूं। इसलिए यह सवाल का हिस्सा नहीं है। लेकिन मैं आपको सलाह समझता हूं और वही लोगों को देता हूं जो मुझसे पूछते हैं कि क्या उन्हें वेब ऐप्स के लिए C ++ का उपयोग करना चाहिए। मैं एक और अधिक सरल ऐप के लिए पायथन का उपयोग करने की योजना भी बना रहा हूं।
'17

फिर भी, विवरण के लिए +1।
'17:

@ अस्वीकरण: यदि आप अच्छी तरह से ट्यून्ड किए गए C # / Java कार्यान्वयन पर "सुधार के आदेश" के प्रदर्शन में सुधार का दावा करना चाहते हैं, तो देखें कि क्या आप अपने वेबसर्वर के साथ CppCMS और एप्लिकेशन कोड-इन-प्रोसेस चला सकते हैं - अर्थात एक प्लगइन के रूप में nginx / Apache। CppCMS पृष्ठ FastCGI को वेबसर्वर और CppCMS के बीच संबंध के रूप में दिखाते हैं; और वास्तव में FastCGI नहीं है ... तेज।
जेस्पर एम

> दिलचस्प विचार। चारों ओर अधिकांश सलाह यह है कि आपको फास्टकेजी का उपयोग करना चाहिए क्योंकि यह विकल्पों की तुलना में तेज है। मैं जाँच करूँगा कि क्या मैं ऐसा कर सकता हूँ, शायद CPPCMS लेखक के साथ देखें कि वह क्यों सोचता है कि यह सबसे तेज़ है।
Klaim
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.