एक बुनियादी कतार प्रणाली लिखना काफी सरल है, लेकिन जैसा कि आपने सभी चुनौतियों के साथ ऊपर उल्लेख किया है, इसे सही करना एक और मामला है। मैंने घर के विकसित सिस्टम का उपयोग किया है जिसके लिए मैंने स्रोत कोड, 3 पार्टी सिस्टम और विभिन्न जेएमएस प्रदाता लिखे हैं। JMS (जावा मैसेजिंग सर्विस) अब तक का सबसे पूर्ण समाधान है। आप जो पूछते हैं, उसमें से अधिकांश जेएमएस में उपलब्ध है। मेरा पसंदीदा JMS प्रदाता ActiveMQ है। स्प्रिंग के साथ अपने ऐप में एम्बेड करने के लिए नि: शुल्क, प्रदर्शन करने वाला, स्थापित करने में आसान और अधिक महत्वपूर्ण है। JMS प्रदाता आपके द्वारा बॉक्स से बाहर की गई हर चीज प्रदान नहीं करते हैं, लेकिन वे आपके द्वारा पूछे जाने वाले उपकरण को सेट करने के लिए बहुत से उपकरण प्रदान करते हैं। मुझे आपके द्वारा सूचीबद्ध सभी एप्लिकेशन की बहुत आवश्यकता नहीं है। आदेश देना महत्वपूर्ण नहीं हो सकता (यह सबसे अच्छा है अगर यह नहीं है),
http://activemq.apache.org/what-open-source-integration-solution-works-best-with-activemq-.html
क्या यह मजबूत है या आदेश खोना है? हाँ। यह आपके कार्यक्रमों की जरूरतों पर निर्भर करता है। यहाँ विवरण हैं: http://activemq.apache.org/total-ordering.html ।
क्या इसका कोई अर्थ लगाया गया है? नहीं, लेकिन यह आपके आवेदन परत में लागू करने के लिए तुच्छ है आपको इसकी आवश्यकता होनी चाहिए।
क्या हमारे पास एक मशीन पर फिट होने की तुलना में अधिक कतारें हो सकती हैं? हाँ। आपके पास क्लस्टर किए गए सर्वर हो सकते हैं, और यदि आप कई मशीनों को अलग-अलग कतारों के साथ सेटअप करना चाहते हैं, तो आप या तो खींच सकते हैं।
क्या हमारे पास एक मशीन में फिट होने की तुलना में एक कतार में अधिक डेटा हो सकता है? हाँ, अधिकांश JMS प्रदाताओं को किसी प्रकार के DB / लगातार स्टोरेज का उपयोग करना पड़ता है ताकि यह सुनिश्चित किया जा सके कि JMS प्रदाता नीचे चला गया है या नहीं।
हम संभावित रूप से डेटा खोने से पहले कितनी मशीनें क्रैश कर सकते हैं? यह उत्तर देने में थोड़ा कठिन है क्योंकि यह समय से संबंधित है। हालाँकि, आप JMS प्रदाता को क्रैश कर सकते हैं और बशर्ते डिस्क दूषित न हो, यह वापस आ जाएगी और शुरू हो जाएगी, जहां इसे अंतिम प्रतिबद्धता मिली थी। इसका मतलब यह है कि संदेश दो बार दिए जा सकते हैं, लेकिन यदि आप इसे संभालने के लिए अपने ऐप को कोड करते हैं तो यह कोई समस्या नहीं है। जब तक आपके पास प्रत्येक प्रकार (निर्माता, उपभोक्ता या JMS सर्वर) में से कम से कम एक है तब तक यह पूरा हो जाएगा। आपके पास अतिरेक के लिए लोड / बैलेंस / फेलओवर भी हो सकता है, एक डिस्क को आप पर बाहर जाना चाहिए।
क्या यह नेट-स्प्लिट्स को टोलरेट कर सकता है? मुझे लगता है कि मैं समझता हूं कि "नेट-स्प्लिट" से आपका क्या मतलब है, लेकिन मैं पूरी तरह से निश्चित नहीं हूं। मुझे लगता है कि अगर JMS सर्वरों को बंद कर दिया गया है, तो हमारा मतलब है, और हम सर्वरों में से एक के साथ कनेक्शन को ढीला कर देंगे, यह दूसरे सर्वर पर जाएगा और जहां इसे छोड़ा गया है वहां पिकअप करेगा। हां, लेकिन फिर से इस प्रकार की स्थितियां ग्राहक को खो जाने वाले बिंदु के आधार पर डुप्लिकेट संदेशों को जन्म दे सकती हैं।
नेट-स्प्लिट तय होने पर क्या यह स्वचालित रूप से डेटा को समेट सकता है? यदि आप लेन-देन सत्रों का उपयोग कर रहे हैं, तो यह केवल किसी भी संदेश को फिर से प्रकाशित करेगा, जो मौजूदा ग्राहकों के लिए उस पर कॉल करने के लिए प्रतिबद्ध है।
क्या यह डिलीवरी की गारंटी दे सकता है जब ग्राहक दुर्घटनाग्रस्त हो सकते हैं? हाँ यह JMS के मुख्य लक्ष्यों में से एक है। गारंटी वितरण का मतलब है कि यदि कोई संदेश कतारबद्ध है, तो उसे ग्राहक द्वारा नियंत्रित किए जाने की गारंटी है।
क्या यह गारंटी दे सकता है कि एक ही संदेश एक से अधिक बार वितरित नहीं किया गया है? हाँ यदि लेनदेन सत्रों का उपयोग किया जा रहा है। इसका मतलब है कि एक ग्राहक ने संदेश को स्वीकार कर लिया है और कमिट / रोलबैक कहा है। एक बार जब कमिट किया जाता है तो यह संदेश को पुनर्परिभाषित नहीं करेगा।
क्या किसी भी बिंदु पर एक नोड दुर्घटनाग्रस्त हो सकता है, वापस आ सकता है, और कबाड़ बाहर नहीं भेज सकता है? उस मामले में जहां आपके पास टिकाऊ क्लस्टर कतारें हैं। यदि क्लस्टर में अन्य नोड ने संदेश दिया है, तो यह "कबाड़" नहीं उगाएगा। यह अभी भी किसी भी चीज़ को स्वीकार नहीं कर सकता है जिसे स्वीकार नहीं किया गया है।
क्या आप बिना समय के चल रहे क्लस्टर से नोड्स जोड़ सकते हैं या हटा सकते हैं? हाँ।
क्या आप बिना समय गंवाए चल रहे क्लस्टर में नोड्स अपग्रेड कर सकते हैं? यह मेरे लिए जवाब देने के लिए थोड़ा मुश्किल है, लेकिन मुझे विश्वास है कि हां आप ऐसा कर सकते हैं।
क्या यह विषम सर्वर पर समस्याओं के बिना चल सकता है? इसका वास्तव में क्या मतलब है? मैंने पाया है कि अधिकांश JMS प्रदाता अलग-अलग हार्डवेयर, OS, आदि का उपयोग करके वातावरण में चलाना बहुत आसान है, हालांकि, यदि आप प्रदर्शन का मतलब रखते हैं, तो यह एक पूरी बात है। किसी भी वितरित प्रसंस्करण प्रणाली को धीमा नोड द्वारा नकारात्मक रूप से प्रभावित किया जा सकता है। मेरे पास कतार और उपभोक्ताओं को चलाने वाले 2 8 कोर इंटेल सर्वर थे। यह एक साथ 16 कोर है, और जब मैंने एक उपभोक्ता के रूप में एकल कोर मशीन को जोड़ा, तो मुझे केवल उन दो बक्सों का उपयोग करने से बेहतर प्रदर्शन मिला। यह एकल कोर मशीन इतनी धीमी थी कि 2x के एक कारक द्वारा पूरे ग्रिड को धीमा कर देती थी। इसका JMS प्रति सेगमेंट से कोई लेना देना नहीं था।
आप सर्वर के एक समूह के लिए "छड़ी" कतार कर सकते हैं? लघु उत्तर हाँ। मैं ऐसे तरीके के बारे में सोच सकता हूं जहां आप एक क्लस्टर चला सकते हैं जो केवल यूरोपीय डेटा सेंटर में है, और वहां कतार को कॉन्फ़िगर करें। फिर अपने वसंत विन्यास में अपने उपभोक्ताओं को उस कतार के साथ-साथ अन्य समूहों पर अन्य कतारों का उपभोग करने के लिए सेटअप करें। आप डॉक्स से परामर्श करना चाह सकते हैं:
http://activemq.apache.org/clustering.html
क्या यह कम से कम दो डेटासेंटर में डेटा प्रतिकृतियां डालना सुनिश्चित कर सकता है, यदि उपलब्ध हो तो? फिर से मुझे ऐसा लगता है, लेकिन क्लस्टरिंग डॉक्स से परामर्श करना सबसे अच्छा है।
फिर से जेएमएस में बहुत सारे विकल्प हैं जिन्हें आप अपनी ज़रूरत के अनुसार बदल सकते हैं। लेनदेन किए गए सत्रों और टिकाऊ कतारों का उपयोग प्रदर्शन लागत के साथ आता है। मैंने सभी घंटियाँ और सीटी प्रभाव प्रदर्शन को 10x जितना चालू किया है। जब मैंने JBossMQ का उपयोग किया, अगर हमने इनमें से कुछ सुविधाओं को बंद कर दिया तो हम लगभग 10,000 संदेश / संदेश प्राप्त कर सकते थे, लेकिन उन्हें चालू करने से हमें 1000 संदेश / संदेश मिल गए। बड़ा बूंद।