Node.js इवेंट सिस्टम अक्का के अभिनेता पैटर्न से अलग कैसे है?


93

मैंने Node.jsथोड़ी देर साथ काम किया है और अपने आप को जावा के साथ बहुत अच्छा मानता हूं। लेकिन मुझे अभी पता चला है Akkaऔर तुरंत इसके अभिनेता पैटर्न (जो मुझे समझ में आता है) में दिलचस्पी थी।

अब, मेरे जावास्क्रिप्ट कौशल को मेरे स्काला / जावा कौशल के बराबर माना जाता है, मैं किसी भी प्रणाली की व्यावहारिकता पर ध्यान केंद्रित करना चाहता हूं। विशेष रूप से वेब सेवाओं के संदर्भ में।

यह मेरी समझ थी कि कई समवर्ती संचालन से निपटने के लिए नोड उत्कृष्ट है। मुझे लगता है कि एक संपत्ति प्रबंधन प्रणाली के लिए एक अच्छी नोड वेब सेवा एक ही समय में (बड़े, भारी ट्रैफ़िक एप्लिकेशन में) बदलाव प्रस्तुत करने वाले कई उपयोगकर्ताओं को संभालने में उत्कृष्ट होगी।

लेकिन अक्का में अभिनेताओं के बारे में पढ़ने के बाद, यह एक ही बात पर एक्सेल होगा। और मुझे टुकड़ों को काटने के काम को कम करने का विचार पसंद है। इसके अलावा, सालों पहले मैं एर्लैंग में डब्बल किया गया था और मैसेज पासिंग सिस्टम से प्यार हो गया।

मैं कई अनुप्रयोगों पर काम करता हूं जो जटिल व्यावसायिक तर्क से निपटते हैं और मैं सोच रहा हूं कि यह एक या दूसरे में भारी कूदने का समय है। विशेष रूप से विरासत स्ट्रट्स और सी # अनुप्रयोगों का उन्नयन।

वैसे भी, पवित्र युद्धों से बचते हुए, दोनों प्रणालियां मौलिक रूप से अलग कैसे हैं? ऐसा लगता है कि दोनों एक ही लक्ष्य के लिए तैयार हैं। शायद अक्का के "सेल्फ-हीलिंग" आर्किटेक्चर का एक फायदा है।

संपादित करें

ऐसा लग रहा है कि मुझे करीबी वोट मिल रहे हैं। कृपया इस प्रश्न को "जो बेहतर, नोड या अक्का है?" के रूप में न लें। मैं जो देख रहा हूं, वह नोड और अभिनेता आधारित लाइक्स जैसे अक्का जैसे इवेंट संचालित पुस्तकालयों में मूलभूत अंतर है।


12
मैंने आपको उन सभी करीबी मतदाताओं को "दूर जाना" कहने के लिए वोट दिया :)
नेरवे

@ cbmeeks मैं पूछ सकता हूं कि आपने क्या चुना और यह आपकी पसंद के साथ कैसा चल रहा है?
जस

जवाबों:


64

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

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

उपरोक्त का अर्थ संपूर्ण नहीं है, मुझे यकीन है कि बहुत अधिक अंतर हैं।


2
क्या आपको लगता है कि अगर मैं AKKA का उपयोग करने के लिए निश्चिंत वेब एप्लिकेशन बनाने का निर्णय लेता हूं तो PLAY-FRAMEWORK या SPRAY का उपयोग करना सबसे अच्छा तरीका है?
Ses

4
हां, दोनों अच्छे विकल्प हैं। प्ले एक फ्रेमवर्क के रूप में उपयुक्त है जो आपको पूरी तरह से एकीकृत विकास का अनुभव देता है, लेकिन इसका मतलब है कि प्ले आपके एप्लिकेशन को चला रहा होगा। स्प्रे बेहतर है अगर आप बस एक पतली REST परत अपने अक्का आवेदन में एम्बेडेड करना चाहते हैं। कृपया ध्यान दें कि स्प्रे अगले महीनों में एक्का-http बन जाएगा।
रोलैंड कुह्न

3
और यह भी इंगित करने के लिए, आपको स्कैला / जावा के साथ एक स्टेटिक रूप से टाइप की गई भाषा की सभी अच्छाई मिलती है और जावास्क्रिप्ट में कोई कॉलबैक नरक नहीं है। जावा / स्काला को जावास्क्रिप्ट की तुलना में डिबग करना आसान होगा।
चिरदीप तोमर

2
नोड के साथ समानता के संदर्भ में यह उल्लेख किया जाना चाहिए कि आप इसके क्लस्टर कोर एपीआई के साथ रनटाइम पर प्रक्रियाओं को कांटा कर सकते हैं । यह वही करेगा जो आप समानांतर अभिनेताओं से मतलब रखते हैं।
कर्नेल

2
मुझे यह लगता है कि 2012 से यह उत्तर अब बहुत दिनांकित है क्योंकि कई चीजें विशेष रूप से उनके साथ नोड से बदल गई हैं। नोड में npmjs.com/package/webworker-threads के वेब कर्मचारियों को देखें, आप एक इंट्रेलिव काम को एक पारल प्रक्रिया (सभी एक ही नोड प्रक्रिया में रहते हुए) में स्थानांतरित कर सकते हैं।
मार्क पिज़्ज़ाक - त्रिलोन।

8

मैंने अभी तक अक्का का उपयोग नहीं किया है, लेकिन ऐसा लगता है कि यह एरलांग जैसा है लेकिन जावा में है। इरलांग में सभी प्रक्रियाएं अक्का में अभिनेताओं की तरह हैं, उनके पास मेलबॉक्स हैं, आप उनके बीच संदेश भेज सकते हैं, आपके पास पर्यवेक्षक आदि हैं।

Node.js सहकारी संगति का उपयोग करता है। इसका मतलब है कि आपके पास अनुमति है जब आप इसे अनुमति देते हैं (उदाहरण के लिए जब आप io ऑपरेशन या कुछ अतुल्यकालिक घटना कहते हैं)। जब आपके पास कुछ लंबे ऑपरेशन (लंबे लूप में कुछ की गणना) पूरे सिस्टम ब्लॉक होते हैं।

एरलंग प्रीमेप्टिव टास्क स्विचिंग का उपयोग करता है। जब आपके पास लंबा लूप होता है, तो सिस्टम इसे अन्य ऑपरेशन चलाने और कुछ समय बाद जारी रखने के लिए रोक सकता है। यदि आप केवल छोटे ऑपरेशन करते हैं तो बड़े पैमाने पर संगामिति के लिए Node.js अच्छा है। दोनों लाखों ग्राहकों का समर्थन करते हैं: http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/ http://blog.whatsapp.com/index.php/2012/01/ 1 लाख है-तो-2011 /

जावा में आपको किसी भी कंसर्ट को करने के लिए थ्रेड्स की आवश्यकता होती है, अन्यथा आप फंक्शन के अंदर निष्पादन को रोक नहीं सकते हैं जो एरलांग करता है (वास्तव में फंक्शन कॉल के बीच विराम लगाता है, लेकिन यह सभी कार्यों के साथ हैपन करता है)। आप संदेशों के बीच निष्पादन को रोक सकते हैं।


ठीक है, इसलिए मुझे लगता है कि मुझे कई अलग-अलग स्रोतों से लॉग फ़ाइलों को रिकॉर्ड करने की आवश्यकता है। जब भी कोई एप्लिकेशन लॉग प्रविष्टि बनाता है, मुझे रिकॉर्डिंग के लिए उस प्रविष्टि को किसी अन्य एप्लिकेशन पर भी भेजना होगा। मुझे लगता है कि यह एक लंबी चलने वाली प्रक्रिया हो सकती है क्योंकि ऐप में DB टाइमआउट, http फेल्योर आदि हो सकते हैं, इसलिए इस उदाहरण में, DB को लिखने में एक लटका मेरे पूरे नोड सिस्टम को लटका देगा? AKKA एक ही मुद्दे को भुगतना होगा या मैं सिर्फ सहसंबंध नहीं मिल रहा है?
cbmeeks

1
न तो नुकसान होगा, क्योंकि db का उपयोग आमतौर पर ऐसे मामलों में अतुल्यकालिक के रूप में लागू किया जाता है। लेकिन अगर आप किसी तरह समकालिक पुस्तकालय बनाने में कामयाब रहे, तो वे दोनों जम जाएंगे।
यतिहे

धन्यवाद। मैं बहुत कोशिश कर रहा हूं कि इसे node vs akkaबहस में न बदलूं लेकिन मुझे एक वास्तविक समस्या है जिसे मुझे हल करने की आवश्यकता है। मैं कहूंगा कि मेरे जावा / जावास्क्रिप्ट कौशल बहुत करीब हैं, लेकिन मेरे पास नोड के साथ बहुत कम अनुभव है और कोई भी AKKA (या स्काला) के साथ नहीं है। लेकिन मेरे पास कई एप्लिकेशन हैं (अब के लिए आंतरिक लेकिन बाद में बाहरी) और लोग इन विशाल लॉग को खोजने के तरीकों की तलाश कर रहे हैं। गोपनीयता के मुद्दों के कारण बाहरी 3 पार्टी विकल्पों का उपयोग नहीं कर सकते। लगता है कि या तो काम को संभाल लेंगे। लेकिन मुझे AKKA का संदेश पास करना पसंद है इसलिए मैं इसका पता लगा सकता हूं। प्लस जावा को जेएस की तुलना में यहां अधिक धक्का दिया जाता है। धन्यवाद।
cbmeeks

यदि आपको बड़े पैमाने पर लॉग की खोज की आवश्यकता है, तो लॉगस्टैश या ग्रेलाग 2 को देखें।
टोड्डियस ज़ो

6

मुझे यकीन नहीं है कि यह ड्रा की तुलना में उचित है। मैं इसे और अधिक पढ़ता हूं "एक इवेंट आधारित सिस्टम एक अभिनेता मॉडल के साथ तुलना कैसे करता है?"। Nodejs एक अभिनेता मॉडल का समर्थन कर सकते हैं, जैसा कि स्काला अक्का में करता है, या ऑरलियन्स में C # करता है, वास्तव में nactor की जाँच करें , कोई व्यक्ति पहले से ही यह कोशिश कर रहा है।

कैसे एक घटना प्रणाली बनाम अभिनेता मॉडल की तुलना के लिए, मैं समझदार लोगों को इसका वर्णन करने देता। अभिनेता मॉडल के बारे में कुछ संक्षिप्त बिंदु:

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

इसके अलावा, नाटक की जाँच करें । यह एक अन्य नोडज अभिनेता मॉडल कार्यान्वयन है।


1
नोडज के साथ एक क्लस्टर स्थापित करने का प्रयास करें, आपको डॉकटर, कुबेरनेट्स की आवश्यकता है और वितरित प्रणाली को शिल्प करना चाहिए। नोडज में 1 और कोर के उपयोग को स्थापित करने का भी प्रयास करें। अक्का यह उन लोगों से निपटने के लिए है। खुद भी नोडज की परिपक्वता, सुरक्षा, और कोड के लिए जिस तरह से कुछ करने के लिए एक और फ्रेमवर्क की आवश्यकता होती है, एक बिंदु यह है कि नोड्ज खुद को बड़े वितरित सिस्टम के लिए उपयोग नहीं किया जा सकता है, लेकिन सिर्फ एमएसए के फैशन में कम से कम। मेरी राय वैसे भी।
राफेलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.