पहले "पुराने" संदेश सिस्टम (एमक्यू) कार्यान्वयन में पुराने हैं, लेकिन वे इंजीनियरिंग के विचार में एक नए हैं: लेन-देन की निरंतर कतार । स्काला एक्टर्स और अक्का शायद एक नया कार्यान्वयन है, लेकिन एक्टर्स के पुराने संगामिति मॉडल पर बनाया गया है।
दो मॉडल लेकिन व्यवहार में बहुत समान होने क्योंकि वे दोनों घटना आधारित संदेश हैं अंत: करने के लिए मेरा उत्तर देखें बनाम अक्का RabbitMQ ।
यदि आप केवल JVM के लिए कोड करने जा रहे हैं तो अक्का शायद एक अच्छा विकल्प है। अन्यथा मैं RabbitMQ का उपयोग करता।
इसके अलावा, यदि आप एक स्काला डेवलपर हैं, तो अक्का को बिना दिमाग वाला होना चाहिए। हालांकि अक्का के जावा बाइंडिंग बहुत जावा-ईश नहीं हैं और स्काला के टाइप सिस्टम के कारण कास्टिंग की आवश्यकता होती है।
जावा में भी लोग आमतौर पर अपरिवर्तनीय वस्तुएं नहीं बनाते हैं जो मैं आपको संदेश भेजने के लिए सुझाता हूं। नतीजतन जावा में गलती से अका का उपयोग करके कुछ करना आसान होगा जो स्केल नहीं करेगा (संदेशों के लिए परस्पर वस्तुओं का उपयोग करके, अजीब करीबी कॉलबैक स्थिति पर निर्भर करता है)। एमक्यू के साथ यह कोई समस्या नहीं है क्योंकि संदेश हमेशा गति की कीमत पर क्रमबद्ध होते हैं। अक्का के साथ वे आम तौर पर नहीं होते हैं।
अक्का भी अधिकांश एमक्यू की तुलना में बड़ी मात्रा में उपभोक्ताओं के साथ बेहतर है। ऐसा इसलिए है क्योंकि अधिकांश MQ (JMS, AMQP) क्लाइंट्स के लिए हर कतार कनेक्शन के लिए एक थ्रेड की आवश्यकता होती है ... इस प्रकार बहुत सारी कतारें == बहुत सारे स्थायी रूप से चलने वाले धागे। यह मुख्य रूप से एक ग्राहक समस्या है। मुझे लगता है कि ActiveMQ अपोलो में एक गैर-अवरोधक डिस्पैचर है जो एएमक्यूपी के लिए उस मुद्दे को स्पष्ट रूप से ठीक करता है। RabbitMQ क्लाइंट के पास ऐसे चैनल हैं जो आपको कई उपभोक्ताओं को संयोजित करने की अनुमति देते हैं लेकिन अभी भी बड़ी संख्या में उपभोक्ताओं के साथ समस्याएँ हैं जो संभावित रूप से गतिरोध या कनेक्शन का कारण बनते हैं इसलिए इस समस्या से बचने के लिए आमतौर पर अधिक थ्रेड जोड़े जाते हैं।
यह कहा जा रहा है कि अक्का की रीमोटिंग नई है और शायद अभी भी सभी विश्वसनीय संदेश गारंटी और क्यूओएस की पेशकश नहीं करता है जो पारंपरिक संदेश कतार प्रदान करते हैं (लेकिन यह हर रोज बदल रहा है)। इसका आम तौर पर सहकर्मी से सहकर्मी भी है, लेकिन मुझे लगता है कि सर्वर-टू-पीयर का समर्थन करता है जो आम तौर पर ज्यादातर MQ सिस्टम करते हैं (यानी विफलता का एकल बिंदु) लेकिन MQ सिस्टम हैं जो पीयर-टू-पीयर (RabbitMQ) सर्वर- हैं झांकना)।
अंत में RabbitMQ और अक्का वास्तव में एक अच्छी जोड़ी बनाते हैं। आप विशेष रूप से RabbitMQ के लिए एक रैपर के रूप में अक्का का उपयोग कर सकते हैं क्योंकि RabbitMQ संदेशों की खपत को संभालने और संदेशों को स्थानीय रूप से (एक JVM में) रूट करने में आपकी मदद नहीं करता है।
अक्का कब चुनना है
- बहुत सारे उपभोक्ता हैं (लाखों सोचो)।
- कम विलंबता की आवश्यकता है
- एक्टर कंसीडर मॉडल के लिए खोलें
उदाहरण प्रणाली: एक इंटरैक्टिव वास्तविक समय चैट प्रणाली
एमक्यू कब चुनें
- विभिन्न प्रणालियों के कई (यानी गैर JVM) के साथ एकीकृत करने की आवश्यकता
- विलंबता की तुलना में संदेश की विश्वसनीयता अधिक महत्वपूर्ण है
- अधिक उपकरण और व्यवस्थापक UI पसंद करेंगे
- लंबे चलने वाले कार्यों के लिए पिछले अंक बेहतर होने के कारण
- अभिनेताओं की तुलना में एक अलग संगामिति मॉडल का उपयोग करना चाहेंगे
उदाहरण प्रणाली: एक अनुसूचित लेन-देन बैच प्रसंस्करण प्रणाली
संबंधित टिप्पणियों के आधार पर EDIT
मैंने एक धारणा बनाई कि ओपी वितरित प्रसंस्करण से संबंधित था जिसे अक्का और संदेश कतार दोनों संभाल सकते हैं। मुझे लगता है कि वह वितरित अक्का के बारे में बात कर रहा था । स्थानीय संगामिति के लिए अक्का का उपयोग करना अधिकांश संदेश कतारों की तुलना में नारंगी के लिए एक सेब है । मैं सबसे कहता हूं क्योंकि आप संदेश कतार मॉडल को स्थानीय रूप से एक संगामिति मॉडल (यानी विषय, क्वीज, एक्सचेंज) के रूप में लागू कर सकते हैं, जो रिएक्टर लाइब्रेरी और सरल-प्रतिक्रिया दोनों हैं हैं।
कम विलंबता अनुप्रयोगों के लिए सही संगामिति मॉडल / पुस्तकालय चुनना बहुत महत्वपूर्ण है। संदेश कतार के रूप में एक वितरित प्रसंस्करण समाधान आमतौर पर आदर्श नहीं होता है क्योंकि मार्ग लगभग हमेशा तार पर किया जाता है जो स्पष्ट रूप से आवेदन की तुलना में धीमा होता है और इस प्रकार अक्का एक बेहतर विकल्प होगा। हालांकि मेरा मानना है कि कुछ मालिकाना एमक्यू प्रौद्योगिकियां स्थानीय रूटिंग के लिए अनुमति देती हैं। जैसा कि मैंने पहले उल्लेख किया है कि ज्यादातर MQ क्लाइंट थ्रेडिंग के बारे में बहुत बेवकूफ हैं और गैर-अवरुद्ध IO पर भरोसा नहीं करते हैं और प्रति कनेक्शन / कतार / चैनल के लिए एक धागा है ... विडंबना यह है कि गैर-अवरोधक io हमेशा कम विलंबता नहीं है लेकिन आम तौर पर अधिक संसाधन है कुशल।
जैसा कि आप वितरित प्रोग्रामिंग के विषय को देख सकते हैं और समवर्ती प्रोग्रामिंग बल्कि बड़ी है और हर रोज बदल रही है, इसलिए मेरा मूल इरादा भ्रमित नहीं था, बल्कि वितरित संदेश प्रसंस्करण के एक विशेष क्षेत्र पर ध्यान केंद्रित करना है जो कि मैं हालांकि ओपी के साथ संबंध था। संगामिति के संदर्भ में, कोई व्यक्ति अपनी खोजों को "प्रतिक्रियाशील" प्रोग्रामिंग (RFP / स्ट्रीम) पर केंद्रित करना चाहता है, जो कि "नया" है, लेकिन अभिनेता मॉडल और संदेश कतार मॉडल के समान मॉडल है, जिसमें इन सभी मॉडलों को आम तौर पर जोड़ा जा सकता है क्योंकि वे घटना आधारित हैं।