अक्का या रिएक्टर [बंद]


94

मैं एक नई परियोजना (जावा-आधारित) शुरू करने की प्रक्रिया में हूं। मुझे इसे एक मॉड्यूलर, वितरित और लचीला वास्तुकला के रूप में बनाने की आवश्यकता है।

इसलिए मैं चाहूंगा कि व्यावसायिक प्रक्रियाएं आपस में संवाद करें, आपस में मिल-जुलकर रहें, लेकिन स्वतंत्र भी।

मैं अभी दो ढाँचों में देख रहा हूँ, जो कि उम्र के अंतर के अलावा, 2 अलग-अलग विचार व्यक्त करते हैं:

उपरोक्त रूपरेखाओं में से किसी एक को चुनते समय मुझे क्या विचार करना चाहिए?

जहां तक ​​मैं अब तक समझता हूं, अक्का अभी भी किसी तरह से युग्मित है (एक तरह से मुझे उस अभिनेता को चुनना है जिसे मैं संदेश भेजना चाहता हूं), लेकिन बहुत लचीला। जबकि रिएक्टर ढीला है (जैसा कि इवेंट पोस्टिंग पर आधारित है)।

क्या कोई मुझे यह समझने में मदद कर सकता है कि एक उचित निर्णय कैसे लें?

अपडेट करें

अक्का की इवेंट बस की बेहतर समीक्षा करने के बाद , मुझे विश्वास है कि रिएक्टर द्वारा व्यक्त की जाने वाली सुविधाएँ पहले से ही अक्का में शामिल हैं।

उदाहरण के लिए सदस्यता और घटना प्रकाशन, https://github.com/reactor/reactor#events-selectors-and-consumers पर प्रलेखित , निम्नलिखित के रूप में अक्का में व्यक्त किया जा सकता है:

final ActorSystem system = ActorSystem.create("system");
final ActorRef actor = system.actorOf(new Props(
    new UntypedActorFactory() {

        @Override
        public Actor create() throws Exception {

            return new UntypedActor() {
                final LoggingAdapter log = Logging.getLogger(
                        getContext().system(), this);

                @Override
                public void onReceive(Object message)
                        throws Exception {
                    if (message instanceof String)
                        log.info("Received String message: {}",
                                message);
                    else
                        unhandled(message);
                }
            };
        }
    }), "actor");

system.eventStream().subscribe(actor, String.class);
system.eventStream().publish("testing 1 2 3");

इसलिए अब मुझे लगता है कि दोनों के बीच प्रमुख अंतर हैं:

  • अक्का, अधिक परिपक्व, टाइपसेफ के लिए बाध्य
  • रिएक्टर, शुरुआती चरण, वसंत के लिए बाध्य

क्या मेरी व्याख्या सही है? लेकिन वैचारिक रूप से एक्टर और रिएक्टर में उपभोक्ता के बीच अंतर क्या है ?


8
अकाला स्काला द्वारा उपयोग किए जाने के लिए बाध्य नहीं है, वास्तव में, बहुमत जावा से इसका उपयोग करता है।
विक्टर क्लैंग

1
डेविड: कुछ इस तरह: अक्का इवेंटबस एपीआई विथ अक्का एक्टर्स रिएक्टर पैटर्न को लागू करते हैं
विक्टर

9
बस स्पष्ट करने के लिए: रिएक्टर वसंत के लिए बाध्य नहीं है। हम जानबूझकर किसी भी स्प्रिंग निर्भरता को बाहर रखते हैं क्योंकि, एक मूलभूत ढांचे के रूप में, इसका उपयोग केवल स्प्रिंग उपयोगकर्ताओं के लिए प्रतिबंधित करने का कोई मतलब नहीं है। एक अभिनेता और एक उपभोक्ता के बीच अंतर के लिए: जहां तक ​​रिएक्टर का सवाल है, आपका उपभोक्ता स्टेटफुल हो सकता है या नहीं। यह माना जाता है कि आप एक स्टेटलेस अनाम वर्ग या जावा 8 लैम्ब्डा का उपयोग करना चाहते हैं, लेकिन यह एक आवश्यकता नहीं है। और जैसा कि मैंने अपने जवाब में उल्लेख किया है, रिएक्टर टूलसेट शुरुआती पुनरावृत्तियों के लिए है, जानबूझकर रसीला। हम "अगला अक्का" बनाने की कोशिश नहीं कर रहे हैं।
जॉन ब्रिसिन

8
बस vertx.io का एक उल्लेख छोड़ने के रूप में मेरा मानना ​​है कि यह एक ही घटना संचालित क्षेत्र में कुछ दिलचस्प अवधारणाओं के साथ समान नस में उन लोगों के लिए है जो शोध कर रहे हैं ..
Opentuned

1
कुछ वर्षों के दौरान, मैं भी एक ऐसी ही स्थिति में हूं, मेरा आवेदन मुख्य रूप से एक वसंत आधारित है और मुझे अब एक इवेंट संचालित सुविधा को संभालने की आवश्यकता है। क्या एक स्पष्ट विजेता b / w अक्का और स्प्रिंग-रिएक्टर है? यदि मैं अधिक जटिल परिदृश्यों तक पहुँचता हूँ तो मैं सक्रिय उपयोगकर्ता-कम्युनिटी के साथ एक रूपरेखा की तलाश कर रहा हूँ।
टिनटिन

जवाबों:


47

इस बिंदु पर बताना मुश्किल है क्योंकि रिएक्टर अभी भी एक स्केच है और मैं (अक्का टेक लीड) में अंतर्दृष्टि नहीं है कि यह कहां जाएगा। यह देखना दिलचस्प होगा कि क्या रिएक्टर अक्का का प्रतियोगी बन जाता है, हम आगे देख रहे हैं।

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

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


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

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

कोई चिंता नहीं है, मुझे लगता है कि आप ठीक करेंगे, और मुझे पूरा यकीन है कि इस क्षेत्र में अधिक पुस्तकालयों के प्रवेश के रूप में हम क्रॉस-परागण देखेंगे।
रोलैंड कुह्न

37

रिएक्टर स्प्रिंग के लिए बाध्य नहीं है, यह एक वैकल्पिक मॉड्यूल है। हम चाहते हैं कि रिएक्टर पोर्टेबल हो, जॉन फाउंडेशन के रूप में एक नींव।

मैं उत्पादन में धकेलने के बारे में आश्वस्त नहीं होऊंगा क्योंकि हम भी माइलस्टोन (1.0.0.SAPSHOT) नहीं हैं, इस संबंध में, मुझे अक्का पर एक गहरी नज़र होगी जो एक शानदार अतुल्यकालिक फ्रेम आईएमओ है। भी विचार Vert.x और फिनेक्ल अनुकूलित किया जा सकता है जो कि यदि आप एक मंच (पूर्व) के लिए या composable वायदा (उत्तरार्द्ध) के लिए या तो देखो। यदि आप अतुल्यकालिक पैटर्न की एक विस्तृत श्रृंखला की देखभाल करते हैं , तो शायद GPars आपको अधिक संपूर्ण समाधान प्रदान करेगा।

अंत में, हम निश्चित रूप से ओवरलैप हो सकता है, वास्तव में हम (, लचीला composable इवेंट वितरित, और किसी भी भेजने की रणनीति के लिए बाध्य नहीं) एक मिश्रित दृष्टिकोण की ओर झुकाव रहे हैं जहां आप आसानी से से बिट्स पा सकते हैं RxJava , Vert.x , अक्का आदि । हम भाषा की पसंद से भी सहमत नहीं हैं, भले ही हम ग्रूवी के लिए दृढ़ता से प्रतिबद्ध हों, लोगों ने पहले से ही क्लोजर और कोटलिन बंदरगाहों को शुरू कर दिया है । इस मिश्रण में इस तथ्य को जोड़ें कि कुछ आवश्यकताओं को स्प्रिंग एक्सडी और ग्रेल्स द्वारा संचालित किया जाता है ।

आपके साक्षी हित के लिए बहुत धन्यवाद, उम्मीद है कि आप कुछ महीनों में अधिक तुलना अंक लेंगे :)


धन्यवाद स्टीफन, मेरा मानना ​​है कि आपका उत्तर (और जॉन की टिप्पणी, stackoverflow.com/questions/16595393/akka-or-reactor/… ) बहुत स्पष्ट दृष्टिकोण देता है। मैंने अभी भी प्रश्न के उत्तर को चिह्नित करने से पहले पकड़ लिया है, जैसा कि आपने कहा, आइए देखें कि निकट भविष्य में क्या चबूतरे हैं। फिर से मैं वास्तव में सराहना करता हूं कि दोनों परियोजनाओं में शामिल लोगों ने उपयोगी अंतर्दृष्टि प्रदान करने में समय बिताया।
डेविड रिकिटेल्ली

मैं Vert.x से सहमत हूँ। मैंने घटकों के बीच संवाद करने के लिए परियोजना के एक जोड़े में वर्ट.एक्स का उत्पादन वातावरण में किया था और यह मूल रूप से काम करता है।
जीत

33

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

इसके साथ ही कहा, सिर्फ इसलिए कि रिएक्टर इंटर-नोड कॉम्पट नहीं करता है OOTB का मतलब यह नहीं है कि यह नहीं कर सकता । :) एक को केवल कुछ क्लस्टर्ड स्मार्ट देने के लिए Redis या AMQP जैसे कुछ का उपयोग करके रिएक्टर्स के बीच समन्वय के लिए एक काफी पतली नेटवर्क लेयर की आवश्यकता होगी।

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

अगर आपको ऐसी कोई चीज़ चाहिए, जो अभी क्लस्टर होती है, तो आप अक्का का चयन करने में सुरक्षित होंगे।


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

जॉन, मैं आपकी प्रतिक्रिया यहां पढ़ रहा था: blog.springsource.org/2013/05/13/… - तो हम मान सकते हैं कि लंबे समय में अक्का और रिएक्टर समान फ्रेमवर्क होंगे, दोनों रिएक्टर पैटर्न और एक्टर मॉडल का समर्थन करते हैं।
डेविड रिकिटेली

निम्नलिखित टिप्पणी निम्नलिखित के कारण अधिक सही नहीं है: stackoverflow.com/questions/16595393/akka-or-reactor/… और stackoverflow.com/a/16674388/565110
डेविड रिकसिटेल्ली

मुझे समझ नहीं आता कि यह टिप्पणी अब कैसे गलत है? यहां कुछ भी नहीं रिएक्टर की रणनीतिक दिशा के स्पष्टीकरण के साथ विरोधाभास करता है।
जॉन ब्रिसबिन

1
पकड़ लिया। जी हां, आप सही समझ रहे हैं। ये सवाल पूछने के लिए धन्यवाद! :)
जॉन ब्रिसिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.