वितरित कतार समस्या के समाधान क्या हैं?


23

मैं उन विभिन्न तरीकों के बारे में अधिक जानने की कोशिश कर रहा हूं जो एक वितरित कतार की समस्या को हल कर सकते हैं। इसलिए मुझे पता होगा कि कौन से उत्पाद, सेवाएं, कार्यान्वयन और शोध पत्र हैं जो पहले से ही बाहर हैं।

कार्यान्वयन को कई चुनौतियों का सामना करना पड़ेगा और उन्हें व्यापार करने के लिए मजबूर किया जाएगा:

  • क्या इसके पास मजबूत या ढीली ऑर्डरिंग है?
  • क्या इसका कोई अर्थ लगाया गया है?
  • क्या हमारे पास एक मशीन पर फिट होने की तुलना में अधिक कतारें हो सकती हैं?
  • क्या हमारे पास एक मशीन में फिट होने की तुलना में एक कतार में अधिक डेटा हो सकता है?
  • हम संभावित रूप से डेटा खोने से पहले कितनी मशीनें क्रैश कर सकते हैं?
  • क्या यह नेट-स्प्लिट्स को सहन कर सकता है?
  • नेट-स्प्लिट तय होने पर क्या यह स्वचालित रूप से डेटा को समेट सकता है?
  • क्या यह डिलीवरी की गारंटी दे सकता है जब ग्राहक दुर्घटनाग्रस्त हो सकते हैं?
  • क्या यह गारंटी दे सकता है कि एक ही संदेश एक से अधिक बार वितरित नहीं किया गया है?
  • क्या किसी भी बिंदु पर एक नोड दुर्घटनाग्रस्त हो सकता है, वापस आ सकता है, और कबाड़ बाहर नहीं भेज सकता है?
  • क्या आप बिना समय के चल रहे क्लस्टर से नोड्स जोड़ सकते हैं या हटा सकते हैं?
  • क्या आप बिना समय गंवाए चल रहे क्लस्टर में नोड्स अपग्रेड कर सकते हैं?
  • क्या यह विषम सर्वर पर समस्याओं के बिना चल सकता है?
  • आप सर्वर के एक समूह के लिए "छड़ी" कतार कर सकते हैं? (उदाहरण: "ये कतारें केवल यूरोपीय डेटासेंटर में अनुमत हैं")
  • क्या यह कम से कम दो डेटासेंटर में डेटा प्रतिकृतियां डालना सुनिश्चित कर सकता है, यदि उपलब्ध हो तो?

मुझे इस बात का कोई भ्रम नहीं है कि कोई भी कार्यान्वयन उन सभी को "हां" कहने में सक्षम होगा। मुझे केवल विभिन्न कार्यान्वयनों के बारे में सुनने में दिलचस्पी है; वे कैसे काम करते हैं, उन्होंने कौन से ट्रेडऑफ बनाए हैं और शायद उन्होंने ट्रेडऑफ के अपने विशेष सेट पर फैसला क्यों किया।

इसके अलावा अगर कोई ऐसी चुनौतियां हैं जो उपरोक्त सूची में मुझे याद आती हैं।

जवाबों:


13

एक बुनियादी कतार प्रणाली लिखना काफी सरल है, लेकिन जैसा कि आपने सभी चुनौतियों के साथ ऊपर उल्लेख किया है, इसे सही करना एक और मामला है। मैंने घर के विकसित सिस्टम का उपयोग किया है जिसके लिए मैंने स्रोत कोड, 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 संदेश / संदेश मिल गए। बड़ा बूंद।


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

फिर नेटप्लिट्स पर हाँ के लिए। यदि कोई उपभोक्ता नीचे जाता है या संचार नहीं कर सकता है तो वह कनेक्ट करने का प्रयास करता रहेगा। नौकरी जो इसे दी गई थी, जो बाद में कमिट नहीं हुई, उसे बाद में अन्य उपभोक्ताओं को दिया जाएगा। यदि कोई JMS प्रदाता नीचे चला जाता है और आपके पास क्लस्टर संदेशों के अन्य सदस्य हैं, तो संदेशों को खोने से बचाने के लिए क्लस्टर भर में डुप्लिकेट किया जा सकता है।
जुबसॉन्डबस

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