क्या वास्तव में अपाचे को ग्लासफिश / जेबॉस / टॉम्कट के सामने के छोर के रूप में चलाना आवश्यक है?


14

मैं मुख्य रूप से एक जावा डेवलपर हूं, और मैं आपके सामने एक सवाल लेकर आता हूं जो डेवलपर्स और sysadmins के बीच विभाजन को बढ़ाता है।

सालों पहले, जब टॉमकैट को ऐप सर्वर के रूप में चलाना एक उपन्यास की बात थी, तो इसे अपाचे के साथ सामने रखने का रिवाज़ था। जैसा कि मैंने इसे समझा, ऐसा इसलिए किया गया क्योंकि:

  1. जावा को "धीमा" माना जाता था, और यह अपाचे को सीधे स्थिर सामग्री परोसने में सहायक था।
  2. टॉमकैट 80/443 बंदरगाहों को तब तक नहीं सुन सकता था जब तक कि रूट के रूप में नहीं चलता, जो खतरनाक था।

जावा को अब धीमा नहीं माना जाता है, और मुझे संदेह है कि अपाचे को मिश्रण में जोड़ना वास्तव में चीजों को गति देने में मदद करेगा।

बंदरगाहों के मुद्दे के रूप में, इन दिनों ऐप्स सर्वर को 80/443 पोर्ट से कनेक्ट करने के सरल तरीके हैं।

तो मेरा सवाल यह है कि क्या वाकई इन दिनों अपाचे के साथ जावा वेबैप्स को फ्रॉड करने का कोई फायदा है? यदि हां, तो क्या अपाचे अभी भी जाने का रास्ता है? क्या मुझे Nginx को देखना चाहिए? Tomcat के बजाय मैं Glassfish का उपयोग कर रहा हूं, अगर यह मायने रखता है।

जवाबों:


8

ज्यादातर लोग यह कहने जा रहे हैं कि स्टैटिक फाइल्स की वजह से आपको सामने कुछ चाहिए।

यह कुछ हद तक गूंगा है क्योंकि:

  • आप एपीआर के साथ अपाचे के रूप में एक ही आईओ का उपयोग करने के लिए टॉमकैट को कॉन्फ़िगर कर सकते हैं
  • आपको वैसे भी सीडीएन (कंटेंट डिलीवरी नेटवर्क) का उपयोग करना चाहिए।

असली कारण आपको संतुलन लोड करने और फेलओवर को संभालने के लिए tomcat / jetty / jboss के सामने कुछ चाहिए।

मेरा सुझाव है कि आप "नहीं सुनें ... टॉम्कट इंजन पूरे इकोस्फीयर की एकिलस हील है ... " जैसा कि हम सभी जानते हैं कि यह सच नहीं है ... आपका डेटाबेस और इसका कनेक्शन पूलिंग होगा।


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

@ कैफीन कोमा मैं एक ही नाव में हूं और ऐसा लगता है कि हम एक ही तकनीक का उपयोग कर रहे हैं इसलिए स्टैकटेक्जैगस में एक ही सूत्र पर होने की गंभीरता (मैं कसम खाता हूं कि मैं पीछा नहीं कर रहा हूं :))। BTW हम Nginx + Tomcat का उपयोग कर रहे हैं।
एडम गेन

5

यह आपके ऐप के इकोसिस्टम पर निर्भर करता है। एक इंट्रानेट वातावरण में - आपको शायद टॉमकैट के सामने कुछ भी करने की आवश्यकता नहीं है।

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

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

टॉमकैट एफएक्यू इस बारे में भी बात करता है जो कुछ अतिरिक्त बिंदुओं को संबोधित करता है: http://wiki.apache.org/tomcat/FAQ/Connectors#Q3


1

अपाचे अपनी बहु-प्रक्रिया प्रकृति के कारण स्थिर सामग्री की सेवा करने के लिए एक अच्छा उम्मीदवार नहीं है। अनुरोधों को संसाधित करने के लिए अतुल्यकालिक I / O का उपयोग करने के बाद से Nginx बेहतर सूट करता है। आधुनिक टोमैट्स एसिंक्रोनस I / O (जावा शब्दावली में NIO) का भी उपयोग कर सकते हैं। उदाहरण के लिए, आपको tomcat-nativeTomcat का उपयोग Async I / O करने के लिए Fedora में पैकेज स्थापित करना चाहिए ।


मैं वास्तव में वैसे भी बहुत अधिक स्थिर सामग्री नहीं परोस रहा हूँ। मेरा प्रश्न वास्तव में है: क्या मुझे एक अपाचे / नग्नेक्स के सामने वाले छोर से परेशान करने की ज़रूरत है, या बस सीधे ग्लासफ़िश के साथ जाना है? धन्यवाद।
कैफीन कोमा

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

अपाचे आवश्यक रूप से बहु-प्रक्रिया नहीं है। mpm कार्यकर्ता कुछ समय के लिए बाहर हो गया है httpd.apache.org/docs/2.2/mod/worker.html और हम एक बहु-थ्रेडेड वेब सर्वर के लिए उत्पादन वातावरण में उपयोग कर रहे हैं।
डायल करें

खैर, मल्टीथ्रेडेड अपाचे अभी भी तुल्यकालिक I / O का उपयोग करता है। मुझे कोई बड़ा अंतर नहीं दिखता है यदि थ्रेड नहीं प्रक्रिया धीमी क्लाइंट द्वारा सॉकेट पर अवरुद्ध हो जाएगी। Nginx को सिंगल-थ्रेडेड एकल-प्रक्रिया परिमित राज्य मशीन के रूप में डिज़ाइन किया गया है (अच्छी तरह से, आवश्यक एकल-प्रक्रिया नहीं, बहु-कोर सिस्टम पर CPU कोर की संख्या के लिए प्रक्रियाओं की संख्या निर्धारित की जानी चाहिए)।
एलेक्स

1

कमाल है, इनमें से कुछ जवाब - क्या आप में से कोई भी वास्तव में उच्च प्रदर्शन बहु-स्तरीय और म्यूटली-सर्वर टॉमकैट समर्थित वेबसाइट चलाते हैं? ओपी, आपका मूल तर्क कि टॉमकैट "धीमा" नहीं है ... वाह। टॉम्कट इंजन पूरे इकोस्फीयर का अकिलीस हील है।

हाँ, आप सामने Apache चाहते हैं - यह सबसे पहले और सबसे महत्वपूर्ण mod_rewrite प्रदान करता है (क्या आपने पहले से ही अपने Tomcat में UrlRewriteFilter को लागू किया है?) साथ ही साथ htaccess फाइलें जो वेबसर्वर की सुरक्षा को इतना महत्वपूर्ण बनाती हैं। Apache आपको इसके पीछे मौजूद Tomcat नोड्स को लोड करने में सक्षम कर सकती है, आपकी स्थिर सामग्री को बहुत तेज़ी से परोस सकती है और Tomcat से बेहतर प्रदर्शन प्राप्त कर सकती है क्योंकि आप ओवर- लोडिंग नहीं कर रहे हैं क्योंकि यह गैर-जावा (js / css / html / jpg / etc) के साथ पाइप का अनुरोध कर रहा है। बातें। आप अपाचे पर अपने एसएसएल को लोड कर सकते हैं (यदि एक हार्डवेयर एलबी पर ऑफलोडिंग नहीं) तो आसानी से और यहां तक ​​कि जावा कीस्टोर नामक उस ट्रैस्टी से भी नहीं निपटना होगा। बस इतनी सारी जीतें हैं - आप अपने बैकएंड नोड्स को mod_jk को ट्यून कर सकते हैं ताकि जावा के खराब छोटे दिमाग से बचा रहे क्योंकि यह आमतौर पर औसत जावा कोडर के साथ बड़े पैमाने पर ट्रैफिक को संभाल नहीं सकता है '

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


4
आपको बहुत बुरा लगता है।
कैफीन कोमा

बस इस बात से घृणा है कि लोग सर्वरफ़ॉल्ट पर ऐसी बुरी सलाह देते हैं।

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

0

यदि यह सिर्फ टॉमकैट का उपयोग करते समय रूट किए बिना विशेषाधिकारों के बंदरगाह को बांधने की बात है, तो आपको इसे अपाचे httpd के साथ सामने रखने की आवश्यकता नहीं है। डिफ़ॉल्ट जहाजों द्वारा टोमाकट जिसके साथ jsvcआपको संकलन करने की आवश्यकता है।

jsvcएक सेवा के रूप में टॉमकैट लॉन्च करने के लिए एक जावा सेवा आवरण है। यह सेवा रूट के रूप में शुरू होती है लेकिन एक सामान्य उपयोगकर्ता के रूप में टॉमकैट शुरू करते हैं। तो आप अपने टॉमकैट को विशेषाधिकार प्राप्त बंदरगाहों से बांध सकते हैं।

मैं ग्लासफ़िश के बारे में नहीं जानता, लेकिन यकीन है कि समाधान मौजूद है और यदि आप निश्चित रूप से पोर्ट फ़ॉरवर्डिंग तकनीक (iptables, आदि ...) का उपयोग नहीं कर सकते हैं ...

मुझे लगता है कि एक वेब सर्वर (उदाहरण के लिए अपाचे httpd) के साथ एक एप्लिकेशन सर्वर का उपयोग करने का विकल्प लोड संतुलन, क्लस्टरिंग या केवल एक वेब सर्वर के साथ स्थैतिक संसाधनों और एक सेवा सर्वर के साथ गतिशील संसाधनों के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.