एप्लिकेशन सर्वर्स को समझना
आइए मान लें कि आप Ruby में अपना नया चमकदार वेब एप्लिकेशन बनाना शुरू करते हैं।
और कोई कोड लिखने से पहले...
आप इसे अपने ब्राउज़र में लोड होते देखना चाहते हैं, भले ही केवल डिफ़ॉल्ट "वेलकम" पेज देखने के लिए।
तो आप अपना ब्राउज़र खोलते हैं, आप इसे localhost:3000 पर इंगित करते हैं, या शायद localhost:4567 यदि आप Sinatra का उपयोग कर रहे हैं।
तब क्या होता है?
आपका ब्राउज़र localhost से जुड़ता है, पोर्ट 3000 पर, जहां Puma जैसा एक Ruby एप्लिकेशन सर्वर इंतजार कर रहा है।
localhostएक विशेष IP एड्रेस,127.0.0.1को इंगित करता है, जो हमेशा आपके कंप्यूटर को संदर्भित करता है
अब:
Puma का काम, या किसी अन्य रैक-आधारित सर्वर (जैसे Thin / Unicorn) का, ब्राउज़र के अनुरोध को संभालना और इसे एक सामान्य इंटरफेस के माध्यम से आपके एप्लिकेशन तक पास करना है।
हम किस इंटरफेस की बात कर रहे हैं?
Rack।
मैं Rack को दूसरे आर्टिकल में विस्तार से समझाता हूँ।
Puma पर वापस।
हम ऐप सर्वर का उपयोग क्यों करते हैं, बजाय इसके कि Rails सीधे अनुरोधों को संभाले?
बहुत अच्छा सवाल।
हम ऐसा इसलिए करते हैं क्योंकि यह सॉफ्टवेयर डिज़ाइन के एक मौलिक सिद्धांत की अनुमति देता है।
चिंताओं का पृथक्करण!
चिंताओं के पृथक्करण को समझना
Rails का काम और आपके एप्लिकेशन का काम यूज़र अनुरोध को पूरा करना है।
उदाहरण के लिए:
- एक नया अकाउंट बनाएं
- चेक करें कि लॉगिन क्रेडेंशियल्स मान्य हैं
- एक प्रोडक्ट पेज दिखाएं जहां आप 100% कोको चॉकलेट बार खरीद सकते हैं
आपका ऐप जो भी करता है।
- Rails उन चीज़ों का मेनू प्रदान करता है जो एक यूज़र कर सकता है, लेकिन यह शेफ भी है, यह चीज़ों को पूरा करता है
- Puma वेटर है, यह ऑर्डर लेता है और उन्हें किचन में भेजता है
चीज़ों को इस तरह सेट अप करने से हर कोई अपना सर्वश्रेष्ठ कर पाता है।
सिर्फ इतना ही नहीं...
यह आपको शेफ को Sinatra में, या वेटर को Thin में स्विच करने की भी अनुमति देता है!
"जब चिंताओं को अच्छी तरह से अलग किया जाता है, तो मॉड्यूल पुनः उपयोग के साथ-साथ स्वतंत्र विकास और अपग्रेड के लिए उच्च डिग्री की स्वतंत्रता होती है।"
Wikipedia
आपकी स्थिति और प्राथमिकताओं के आधार पर।
एप्लिकेशन सर्वर बनाम वेब सर्वर (Nginx & Apache)
इस बिंदु पर, आप सोच रहे होंगे...
Apache या Nginx जैसा वेब सर्वर Ruby सर्वर से कैसे अलग है?
हम इन दो सर्वर्स का उपयोग क्यों नहीं कर सकते?
एक बड़ा अंतर है।
Nginx एक सामान्य वेबसर्वर है, यह एक अनुरोध को संभालता है और यदि उस अनुरोध के लिए एक मिलान वाली फाइल है तो यह उस फाइल को वापस करेगा।
लेकिन Nginx Rack के बारे में कुछ नहीं जानता, या Ruby।
यही कारण है कि हमें Puma या किसी अन्य Rack-संगत वेब सर्वर की आवश्यकता है।
हालांकि...
प्रोडक्शन में Nginx का उपयोग करना अभी भी सहायक हो सकता है।
Nginx कनेक्शन को अधिक प्रभावी ढंग से संभाल सकता है और यह आपके एप्लिकेशन को अनुरोध अग्रेषित किए बिना स्टेटिक एसेट्स (css और js फाइलें) सर्व कर सकता है।
Puma को समझना
अब जब हम समझते हैं कि एक एप्लिकेशन सर्वर क्या है और यह उपयोगी क्यों है।
हम Puma पर ही नज़र डाल सकते हैं।
आप Puma को अन्य सर्वर्स पर क्यों चुनना चाहेंगे?
पहला:
यह Heroku का अनुशंसित सर्वर है।
वे जिस मुख्य कारण का उल्लेख करते हैं वह यह है कि यदि आप Unicorn का उपयोग करते हैं - एक वैकल्पिक ऐप सर्वर - तो आप धीमे क्लाइंट हमलों के प्रति संवेदनशील हैं।
इसके अलावा:
Puma मल्टी-थ्रेडेड है, जिसके परिणामस्वरूप आमतौर पर कम मेमोरी उपयोग होता है।
"ऑपरेटिंग सिस्टम एक मल्टीथ्रेडेड प्रोग्राम की ओर से एक मल्टीप्रोसेस प्रोग्राम की तुलना में कम काम करता है। यह मल्टीथ्रेडेड प्रोग्राम के लिए प्रदर्शन लाभ में तब्दील होता है।"
PThreads Programming
कौन सा सर्वर तेज़ है?
इस कमांड के साथ एक साधारण Rack ऐप चलाना:
rackup -s thin rack-simple.ru 2>1 &>/dev/null
इसके साथ टेस्ट किया गया:
wrk -d 20 https://localhost:9292
मुझे ये बेंचमार्क परिणाम मिले:
- Webrick 229.97 अनुरोध/सेकंड
- Thin 773.20 अनुरोध/सेकंड
- Puma 2035.34 अनुरोध/सेकंड
इन तीनों में से, ऐसा लगता है कि Puma आपको सर्वश्रेष्ठ प्रदर्शन देता है।
लेकिन यह मायने नहीं रखेगा यदि आपके पास एक धीमा SQL क्वेरी है, या यदि आप हर अनुरोध पर लाखों एलिमेंट्स वाले एरे के माध्यम से लूप कर रहे हैं।
सारांश
आपने Ruby में एप्लिकेशन सर्वर्स के बारे में सीखा, जैसे Puma और Thin, इसलिए अब आपके पास इस बात की बेहतर समझ है कि हम उनका उपयोग क्यों करते हैं।

आप अपने अगले प्रोजेक्ट के लिए किसका उपयोग करने जा रहे हैं?
पढ़ने के लिए धन्यवाद! 🙂