Node.js या एर्लैंग


86

मैं वास्तव में इन उपकरणों को पसंद करता हूं जब यह संगामिति स्तर पर आता है तो इसे संभाल सकता है।

Erlang / OTP अधिक स्थिर समाधान की तरह दिखता है, लेकिन इसके लिए बहुत अधिक सीखने और कार्यात्मक भाषा प्रतिमान में बहुत अधिक गोताखोरी की आवश्यकता होती है। और ऐसा लगता है कि जब यह मल्टी-कोर सीपीयू की बात आती है तो एर्लैंग / ओटीपी इसे और बेहतर बनाता है (अगर मैं गलत हूं तो मुझे सही करें)।

लेकिन मुझे कौन सा चुनना चाहिए? लघु और दीर्घकालिक परिप्रेक्ष्य में कौन सा बेहतर है?

मेरा लक्ष्य एक उपकरण सीखना है जो पारंपरिक वेब की तुलना में उच्च लोड के तहत मेरी वेब परियोजनाओं को स्केलिंग बनाता है।


आप एक कार्यात्मक भाषा के रूप में जावास्क्रिप्ट का उपयोग कर सकते हैं underscorejs.org
टॉड मूसा

2
@ToddMoses क्या आप सुनिश्चित हैं कि आपने सही प्रश्न टिप्पणी की है?
फ्लाविएन वोलकेन

सेब और संतरे। Node.JS (इसके मूल में) libevent (C) + जावास्क्रिप्ट इंटरॉप है। Erlang एक पूरी तरह से कस्टम IO कार्यान्वयन है। Node.JS सिंगल थ्रेडेड ऐप्स के लिए बना है। आपका डिलेमा क्या आप फेसबुक / गूगल पर नौकरी चाहते हैं, या क्या आप किकसैट सॉफ्टवेयर बनाना चाहते हैं।
वैन एस

जवाबों:


87

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


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

51

मैं एरलांग के लिए बात नहीं कर सकता, लेकिन कुछ चीजें जिनका उल्लेख नोड के बारे में नहीं किया गया है:

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

रयान डाहल द्वारा याहू के ब्लॉग पर वीडियो देखें , जो वास्तव में नोड लिखा था। मुझे लगता है कि यह आपको एक बेहतर विचार देने में मदद करेगा कि नोड कहां है, और यह कहां जा रहा है।

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


26
मुझे लगता है कि V8 इंजन जावास्क्रिप्ट को मशीन कोड के लिए संकलित करता है और विधानसभा के लिए नहीं।
जोनास

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

15

मैं एक लंबे समय के अर्लंग प्रोग्रामर हूं, और इस सवाल ने मुझे नोड.जेएस पर एक नज़र डालने के लिए प्रेरित किया। यह बहुत अच्छा लग रहा है।

ऐसा प्रतीत होता है कि आपको कई कोर का लाभ उठाने के लिए कई प्रक्रियाओं को स्पॉन करने की आवश्यकता है। मैं प्रोसेसर संबंध स्थापित करने के बारे में कुछ भी नहीं देख सकता हूँ। आप लिनक्स पर कार्यपत्रक का उपयोग कर सकते हैं, लेकिन यह शायद पैरामीट्रिक और प्रोग्राम में सेट होना चाहिए।

मैंने यह भी देखा कि मंच का समर्थन थोड़ा कमजोर हो सकता है। विशेष रूप से, ऐसा लगता है कि आपको विंडोज समर्थन के लिए सिगविन के तहत चलने की आवश्यकता होगी।

हालांकि अच्छा लग रहा है।


संपादित करें

Node.js को अब विंडोज के लिए मूल समर्थन प्राप्त है।


5
यह उत्तर थोड़ा पुराना है। अभी Node क्रॉस-प्लेटफ़ॉर्म है, खिड़कियों के लिए Cygwin की आवश्यकता नहीं है। और नोड ने टीसीपी सॉकेट्स को साझा करते हुए, एक मशीन में क्लस्टरिंग के लिए अंतर्निहित समर्थन किया है।
फरीद नूरी नेष्ट

9

मैं एक ही दो विकल्पों को देख रहा हूं, आप कई प्रोजेक्ट्स के लिए मिल गए हैं।

अब तक, मैं किसी दिए गए प्रोजेक्ट के लिए उनके बीच निर्णय लेने के लिए सबसे अच्छा रेजर आया हूं कि क्या मुझे जावास्क्रिप्ट का उपयोग करने की आवश्यकता है। एक मौजूदा प्रणाली जिसे मैं माइग्रेट करना चाहता हूं, वह पहले से ही जावास्क्रिप्ट में लिखी गई है, इसलिए इसका अगला संस्करण नोड में होने की संभावना है। अन्य परियोजनाओं को कुछ एर्लांग वेब ढांचे में किया जाएगा क्योंकि माइग्रेट करने के लिए कोई मौजूदा कोड आधार नहीं है।

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

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

एक बार जब आप कार्यात्मक प्रोग्रामिंग के साथ सहज हो जाते हैं, तो कई एर्लांग वेब रूपरेखाओं में से एक की तलाश करें; आप शायद inetsदेर से इस स्तर पर अपने ऐप को सीधे कुछ निम्न-स्तर पर नहीं लिख रहे हैं । उदाहरण के लिए, नाइट्रोजन जैसी किसी चीज़ को देखें ।


यह अक्सर इस बात पर अडिग रहता है कि "एरलांग तराजू पूरे डेटासेंटर" बिंदु पर विचार करने के लिए कुछ बहुत महत्वपूर्ण कैच हैं (सुरक्षा बहुत बड़ी है)। अध्याय इस पर यहाँ देखें: learnyousomeerlang.com/distribunomicon
jocull

9

हालांकि मैं व्यक्तिगत रूप से एर्लांग के लिए जा रहा हूँ, मैं मानता हूँ कि मैं जावास्क्रिप्ट के खिलाफ थोड़ा पक्षपाती हूँ। मेरी सलाह है कि आप कुछ बिंदुओं का मूल्यांकन करें:

  1. क्या आप उन भाषाओं में से किसी में भी मौजूदा कोड का पुनः उपयोग कर रहे हैं (स्रोत कोड और प्रोग्रामर अनुभव दोनों के संदर्भ में!)
  2. क्या आपको एप्लिकेशन को रोककर बिना अपडेट के ऑन-द-फ्लाई अपडेट की जरूरत है (यह वह जगह है जहां डिफ़ॉल्ट रूप से एर्लांग जीतता है - इसका रनटाइम उस मामले के लिए डिज़ाइन किया गया था, और ओटीपी में सभी आवश्यक उपकरण शामिल हैं)
  3. अलग-अलग, समवर्ती संचालन के संदर्भ में अपेक्षित ट्रैफ़िक कितना बड़ा है, बैंडविड्थ नहीं?
  4. प्रत्येक अनुरोध के लिए आपके द्वारा किए जाने वाले ऑपरेशन "समानांतर" कैसे होते हैं?

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

फिर भी एक और विकल्प दोनों का उपयोग करना है, विशेष रूप से एरलांग को "हब" के रूप में उपयोग किया जा रहा है। यदि Node.js में फॉरेन फंक्शन इंटरफ़ेस सिस्टम है, तो मैं अनिश्चित हूँ, लेकिन अगर यह है, तो Erlang में किसी भी अन्य Erlang प्रक्रिया की तरह सिस्टम के साथ इंटरफ़ेस करने के लिए बाहरी प्रक्रियाओं के लिए C लाइब्रेरी है।


डॉक्स के अनुसार, Node.js बाहरी एडन के लिए C और C ++ का लाभ उठा सकते हैं। nodejs.org/docs/v0.3.1/api/addons.html
इवान प्लैस

लगता है कि रीया की मृत्यु हो गई है, लेकिन उसकी जगह अमृत ​​है ... यह मुझे ग्रूवी और जावा की याद दिलाता है; यहाँ यह अमृत और एर्लैंग होगा।
स्टोमीपोस

@ इवानप्लिस - यह मुझे बहुत प्रभावित नहीं करता है। बात यह है कि, आप मूल रूप से C ++ में एक समस्याग्रस्त चीज़ को कोड कर रहे हैं और उन्हें बिल्ट-इन के रूप में जोड़ते हैं। एफएफआई का अधिकांश हिस्सा ऐसा नहीं है जो आप वास्तव में कर रहे हैं, एमुलेटर का विस्तार कर रहा है। (ठीक है, व्यक्तिगत प्राथमिकता;)) एरलांग के मामले में उल्लिखित बाहरी पुस्तकालय अन्य भाषाओं में async प्रक्रियाओं को बनाने के लिए है जो नोड्स के रूप में दिखाई देते हैं या जो एक खुले बंदरगाह पर बात करते हैं (सोचें द्वि-दिशात्मक पाइप, संरचित डेटा के साथ)। सभी जो ऑपरेशन के async मोड में अच्छी तरह से फिट होते हैं। NIF भी हैं, जो अनिवार्य रूप से Node.js है, लेकिन हतोत्साहित हैं।
p_l

1
@p_l जो मैं समझता हूं, उससे नोड दृष्टिकोण थोड़ा अलग है। जबकि नोड को async IO कॉल से निपटने में बहुत अच्छा है (यानी वेब अनुरोध) यह एकल-थ्रेडेड वातावरण में चलता है। इसलिए यह प्रेषण पर बहुत अच्छा है लेकिन सीपीयू-गहन प्रसंस्करण में इतना अच्छा नहीं है। उस जमीन को ढंकने के लिए आप एक और प्रक्रिया / धागा निकाल सकते हैं जो देशी C / C ++ कोड चलाता है। यदि आप जो भी कर रहे हैं वह एसिंक्स आईओ कॉल (पूर्व आईपीसी | द्वि-दिशात्मक पाइप) है तो नोड.जेएस लोड को संभालने में सक्षम होना चाहिए। जब तक यह तुल्यकालिक कॉल पर प्रतीक्षा करने के लिए बहुत समय बिताने के लिए कोडित नहीं है।
इवान प्लाइस

5

ऐसा लगता है कि एरलांग अपेक्षाकृत कम अंत सर्वर (512MB 4-कोर 2.4GHz AMD VM) में तैनाती के लिए बेहतर प्रदर्शन करता है। यह उनके वर्चुअल व्हाइटबोर्ड सर्वर एप्लिकेशन के Erlang बनाम Node.js कार्यान्वयन की तुलना करने के सिंकपैड के अनुभव से है।


2
हाँ, नोड.जेएस एक बुरा स्मृति रिसाव समस्या होने लगता है। नोड नया और प्रायोगिक है और न ही जावास्क्रिप्ट और न ही V8 इंजन को ऐसे सर्वर परिदृश्यों के लिए डिज़ाइन किया गया था। दूसरी तरफ एर्लैंग को नीचे से ऊपर के लिए ही डिजाइन किया गया था और खुद को निखारने और परिपक्व होने के लिए कई साल थे।
रॉल्फ

2
यह लिंक मृत प्रतीत होता है, लेकिन यहाँ यह WayBackMachine web.archive.org/web/20120902014555/http://blog.mysyncpad.com/…
jocull

4

उसी VM पर एक और भाषा है जो erlang है -> अमृत

यह Erlang के लिए एक बहुत ही दिलचस्प विकल्प है, इसे एक बार देखें।

इसके अलावा इसके आधार पर एक तेजी से बढ़ते वेब फ्रेमवर्क है-> फीनिक्स फ्रेमवर्क



0

मैं नोड पर इरलांग को प्राथमिकता दूंगा। यदि आप संगामिति चाहते हैं, तो नोड को उनकी हल्की वजन प्रक्रियाओं के कारण एरलांग या गोलंग द्वारा प्रतिस्थापित किया जा सकता है।

एर्लैंग को सीखना आसान नहीं है, इसके लिए बहुत अधिक प्रयास की आवश्यकता होती है, लेकिन इसका समुदाय सक्रिय है, इसलिए इससे मदद मिल सकती है, यही एकमात्र कारण है कि लोग नोड को पसंद करते हैं।

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