वेब सर्वर तुलना: जावा Node.js से धीमा है
वास्तव में? आइए कोड करें और तुलना करें।
पिछले हफ्ते, एक लंबी छुट्टी के बीच में, मीडियम डॉट कॉम ने मुझे यह लेख सुझाया । यह Node.js बनाम जावा मूल HTTP सर्वर की तुलना है।
उसके बाद, मैंने उसी लेखक के इस अन्य Java बनाम Node.js बेंचमार्क का पालन किया और फिर यह Java fiasco article । समग्र पठन अनुभव ने मुझे महसूस कराया कि Node.js के सामने जावा हीन है। यह मुझे एक युवा डेवलपर की याद दिलाता है। वह युवा है, महत्वाकांक्षी है, और वह जो कुछ भी छूता है उसे जावास्क्रिप्ट और टाइपस्क्रिप्ट में बदलना चाहता है।
"जावा धीमा है," उन्होंने कहा।
खैर, मैं इसके बारे में टिप्पणी अनुभाग में बहस कर सकता हूं। मैं समझा सकता हूं कि एप्लिकेशन थ्रेड का उपयोग कैसे करता है, और जावा थ्रेड ओएस थ्रेड से कैसे जुड़ा हुआ है, और स्प्रिंगबूट एक बड़े ट्रक की तरह कैसे है और आप इसकी क्षमता को बर्बाद करते हैं। मैं इसे जावा रिएक्टिव नॉन-ब्लॉकिंग फ्रेमवर्क के साथ तुलना करने का सुझाव भी दे सकता हूं, कुछ वेबसाइटें दिखा रहा हूं जो बेंचमार्क और bla..bla..bla करती हैं। दिन के अंत में, मुझे यकीन है, मैं किसी को विश्वास नहीं दिलाऊंगा!
"यह मजेदार होगा अगर मैं खुद बेंचमार्क कोडिंग करके दिखा सकता हूं कि वे कितने गलत हैं," मैंने सोचा।
इसलिए, मैंने अपने आप से कहा, मेरा रेंडैंग होल्ड करें , चलो कोड करें और पता करें।
परीक्षण तंत्र
मैं उस लेख के लेखक के बेंचमार्क के तरीके का अनुसरण करता हूं:
- सरल स्ट्रिंग लौट रहा है।
- बॉम्बार्डियर का उपयोग करके परीक्षण - लोड परीक्षण करने के लिए यह गो उपयोगिता है। आप यहां जानकारी पा सकते हैं ।
- और एप्लिकेशन (SUT) और लोड टेस्टिंग टूल के लिए एक ही मशीन का उपयोग करें।
एप्लिकेशन निम्नलिखित हार्डवेयर और सॉफ्टवेयर का उपयोग करेगा:
- सीपीयू इंटेल i7 4 कोर के साथ
- रैम : 16 जीबी
- विंडोज 11 प्रो, संस्करण 22H2
- जावा 20
- नोड 18
हम 2 लोकप्रिय नोड.जेएस वेब सर्वर, 2 जावा गैर-प्रतिक्रियाशील वेब सर्वर और 2 जावा प्रतिक्रियाशील वेब सर्वर का परीक्षण करेंगे। वे यहाँ हैं:
- एक्सप्रेस : एक बहुत लोकप्रिय Node.js वेब सर्वर।
- Fastify : यह सबसे तेज Node.js वेब सर्वर होने का दावा करता है।
- जेटी : लोकप्रिय गैर-प्रतिक्रियाशील जावा वेब सर्वर।
- Undertow : स्प्रिंगबूट सहित कई जावा फ्रेमवर्क द्वारा उपयोग किया जाने वाला एक अन्य पारंपरिक गैर-प्रतिक्रियाशील जावा वेब सर्वर।
- रिएक्टर : प्रतिक्रियाशील जावा सर्वर जो स्प्रिंग वेबफ्लक्स को शक्ति प्रदान करता है।
- Vert.x-Web : एक अन्य लोकप्रिय प्रतिक्रियाशील जावा सर्वर
- यह कोई वैज्ञानिक बेंचमार्क नहीं है। मुझे प्रदर्शन में दिलचस्पी है - केवल प्रति सेकंड अनुरोध। यदि आपको अपनी परियोजना के लिए एक बेंचमार्क की आवश्यकता है जो उपरोक्त सर्वरों का उपयोग करता है, तो आपको अपने उपयोग के मामले का विश्लेषण करना चाहिए। आपको शायद अधिक व्यापक मैट्रिक्स इकट्ठा करने की आवश्यकता है।
- इस परीक्षण के लिए सभी स्रोत कोड मेरे GitHub रिपॉजिटरी पर पाए जा सकते हैं। लिंक यहां दिया गया है:https://github.com/mailindra/webserver-comparison.
- यदि आपको लगता है कि जावा या Node.js के प्रदर्शन को बेहतर बनाने के लिए मैं कुछ भी कर सकता हूं, तो कृपया मुझे टिप्पणी में बताएं। या बेहतर होगा, मेरी रिपॉजिटरी को क्लोन करें, इसे स्वयं जांचें, और मुझे एक पुल अनुरोध दें।
नोड.जेएस: एक्सप्रेस
एक्सप्रेस वेबसाइट का दावा है कि यह एक न्यूनतम वेब ढांचा है। जैसा कि आप नीचे देख सकते हैं, एक्सप्रेस कोड सरल और सचेत है। इस बेंचमार्क में, सर्वर केवल प्रत्येक अनुरोध के लिए "हैलो, पीपल" लौटाता है।
एप्लिकेशन चलाने के बाद, हम इसका परीक्षण करते हैं।
पहले छोटे कनेक्शन-छोटे अनुरोधों के साथ, फिर 500 कनेक्शन और 1 मिलियन अनुरोधों का उपयोग करना। प्रत्येक परीक्षण के लिए, मैंने परीक्षण से पहले 1 राउंड वार्मअप किया। यहाँ परिणाम है:
A. 50 कनेक्शन और 1000 अनुरोधों के साथ परीक्षण करें:
B. 500 कनेक्शन और 1 मिलियन अनुरोधों के साथ परीक्षण करें:
Node.js: Fastify
Fastify कोड एक्सप्रेस के समान दिखता है। वेबसाइट का दावा है कि Fastify अत्यधिक प्रदर्शन करने वाला और डेवलपर के अनुकूल है। यहाँ कोड है:
A. 50 कनेक्शन और 1000 अनुरोध परीक्षण:
B. 500 कनेक्शन और 1 मिलियन अनुरोध परीक्षण:
Fastify परिणाम दिखाते हैं कि यह एक्सप्रेस की तुलना में बहुत तेज है। Fastify वेबसाइट का दावा सही लगता है ।
जावा: जेटी
जेट्टी एक जावा वेब सर्वर और सर्वलेट कंटेनर है। यह गैर-प्रतिक्रियाशील है लेकिन अतुल्यकालिक का समर्थन करता है। यहाँ कोड है:
A. 50 कनेक्शन और 1000 अनुरोधों के साथ परीक्षण करें:
B. 500 कनेक्शन और 1 मिलियन अनुरोधों के साथ परीक्षण करें:
जैसा कि आप परिणाम में देख सकते हैं, जेटी काफी अच्छा प्रदर्शन करता है। यह Node.js Fastify से काफी तेज है।
जावा: अंडरटो
जेट्टी की तरह, अंडरटो एक गैर-प्रतिक्रियाशील जावा वेब सर्वर है। इसे एम्बेड करने योग्य बनाया गया है। जैसा कि आप नीचे देख सकते हैं, कोड धाराप्रवाह और अनुसरण करने में आसान है:
A. 50 कनेक्शन और 1000 अनुरोधों के साथ परीक्षण करें:
B. 500 कनेक्शन और 1 मिलियन अनुरोधों के साथ परीक्षण करें:
आप परिणाम से देख सकते हैं, अंडरटो दोनों Node.js सर्वरों की तुलना में तेज़ है। यह जेट्टी से भी तेज है।
जावा: रिएक्टर
रिएक्टर, सटीक होने के लिए रिएक्टर-नेट्टी, एक प्रतिक्रियाशील वेब सर्वर है जो स्प्रिंग वेबफ्लक्स को संचालित करता है। जैसा कि आप देख सकते हैं, जेटी और अंडरटो की तुलना में कोड सरल है। यह काफी हद तक Node.js जैसा दिखता है:
A. 50 कनेक्शन और 1000 अनुरोधों के साथ परीक्षण करें:
B. 500 कनेक्शन और 1 मिलियन अनुरोधों के साथ परीक्षण करें:
फिर से, जावा रिएक्टर दोनों Node.js वेब सर्वरों की तुलना में बहुत तेज प्रदर्शन करता है।
जावा: वर्टेक्स-वेब
जैसा कि इसके प्रलेखन में कहा गया है, आधुनिक वेब अनुप्रयोगों के निर्माण के लिए Vert.x-Web जावा स्विस आर्मी नाइफ है। यह एक प्रतिक्रियाशील ढांचा है। रिएक्टर के समान, कोड भी धाराप्रवाह और अनुसरण करने में आसान है।
A. 50 कनेक्शन और 1000 अनुरोधों के साथ परीक्षण करें:
B. 500 कनेक्शन और 1 मिलियन अनुरोधों के साथ परीक्षण करें:
जैसा कि आप देख सकते हैं, वर्टेक्स काफी अच्छा प्रदर्शन करता है। Node.js सर्वर से बेहतर, और जावा रिएक्टर से भी बेहतर।
परिणाम
इसलिए हमारे पास एक अच्छा दृश्य हो सकता है, मैं इस बेंचमार्क का बार ग्राफ बनाता हूं:
- पहला परीक्षण, एक 50 समवर्ती कनेक्शन और 1000 अनुरोध परीक्षण परिणाम:
निष्कर्ष
- नहीं, जावा Node.js और Javascript से धीमा नहीं है। खुद बेंचमार्क करने की अच्छी बात यह है कि आप खुद को समझा सकते हैं। आप दूसरों को उस बात के लिए राजी नहीं कर सकते, जिस पर आप विश्वास नहीं करते।
- जावा रिएक्टिव और नॉन-रिएक्टिव दोनों सर्वर Node.js सर्वर से बेहतर प्रदर्शन करते हैं।
- यह मुझे आश्चर्यचकित करता है कि जावा नॉन-ब्लॉकिंग सर्वर कम और उच्च समवर्ती कनेक्शन में अच्छा प्रदर्शन करते हैं और प्रतिक्रियाशील सर्वर जैसे रिएक्टर और वर्ट.एक्स के साथ प्रतिस्पर्धा कर सकते हैं।
- एक्सप्रेस :https://expressjs.com/
- फास्टिफाय :https://www.fastify.io/
- जेटी :https://www.eclipse.org/jetty/
- अंडरटो :https://undertow.io/
- रिएक्टर :https://projectreactor.io/
- वर्ट.एक्स-वेब :https://vertx.io/docs/vertx-web/java/
- बेंचमार्क रिपॉजिटरी :https://github.com/mailindra/webserver-comparison