एक स्केलेबल संदेश कतार वास्तुकला डिजाइनिंग


22

मैंने हाल ही में स्केलेबल और एंटरप्राइज़ कंप्यूटर आर्किटेक्चर की बारीकियों को सीखना शुरू कर दिया है, और केंद्रीय घटकों में से एक मैसेजिंग कतार है। किसी भी प्रोग्रामिंग प्रतिमान से सबसे अधिक सीखने के लिए, मैं एक मैसेजिंग कतार सेवा के अपने संस्करण को लागू करने की कोशिश कर रहा हूं।

अब तक, मेरा आरंभिक डिज़ाइन एक थ्रेडेड सॉकेट श्रोता पर चलता है, लेकिन एक ही संदेश को दो अलग-अलग प्रोसेसिंग नोड्स द्वारा दो बार डाउनलोड किए जाने से रोकने के लिए, संदेश कतार इंडेक्स रजिस्टर तब पढ़ा जाता है, जब रीड किया जाता है, और रजिस्टर के बाद अनलॉक हो जाता है अपडेट किया गया। इस प्रकार, यह थ्रेडेड होने की आवश्यकता को नकारता है, और इसका मतलब है कि सर्वर के प्रसंस्करण की गति के आधार पर एक स्केलेबल सिस्टम के आकार के लिए एक छत है संदेश सेवा कतार सेवा चल रही है।

इसके आसपास पहुंचने का तरीका कई सर्वरों पर संदेश कतार सेवा को चलाया जाएगा, लेकिन इससे एक ही संदेश के दो बार डाउनलोड होने की संभावना बढ़ जाएगी। इस तरह के मुद्दों को रोकने का एकमात्र तरीका एक निरस्तीकरण कॉलबैक शामिल होगा जो कि (सर्वर के बाद, या यहां तक ​​कि एक सर्वर पर थ्रेड्स ने, अपनी जानकारी को सिंक्रनाइज़ किया है और इस तरह के पुन: जारी करने का पता लगाया है) प्रसंस्करण नोड को रोक देगा। वर्तमान नौकरी, और अगले संदेश के लिए संदेश कतार को फिर से क्वेरी करें, लेकिन फिर से, एक सीलिंग होगी जहां भेजा जा रहा अधिकांश ट्रैफ़िक सिंक्रनाइज़ेशन होगा, और कॉलबैक रद्द हो जाएगा, जिससे एक अड़चन पैदा होगी और सूचना के प्रसंस्करण को धीमा कर देगा। प्रसंस्करण नोड्स में से अधिकांश नल संचालन और समय बर्बाद कर रहा होगा।

इस समस्या को हल करने के लिए अंतिम तरीका मैं यह सोच सकता हूं कि प्रत्येक संदेश कतार सर्वर (और प्रत्येक सर्वर पर प्रत्येक थ्रेड) के पास एक विशिष्ट ऑफसेट होगा जहां कतार में यह दिख रहा है, लेकिन हो सकता है कि इसके आधार पर समस्याएँ हों यदि विशेष रूप से प्रसंस्करण एक विशिष्ट क्रम में किया जाना आवश्यक है, तो आवेदन का प्रकार।

इसलिए, कहा जा रहा है कि क्या संदेश कतार वास्तुकला के कोई भी डिज़ाइन हैं जो मुझे दिखा सकते हैं कि मौजूदा उद्यम ग्रेड संदेश कतार सेवाएं इन समस्याओं से कैसे बचती हैं?


2
यह एक बड़ा सवाल है। अगर मैं आप होता तो ibm.com पर होता और कुछ लाल किताबों की तलाश करता जो विस्तार से बताती है कि mq क्या करता है और (यदि आप भाग्यशाली हैं) कैसे काम करता है। निश्चित रूप से, ये पुस्तकें आपके लिए सभी उत्तर प्रदान नहीं करेंगी, लेकिन वे प्रश्न के परिमाण के अनुसार विचार और विचार देंगे। एमक्यू काफी जटिल है - मैंने 15 साल पहले इस पर काम किया था।
पेटे

अन्य आर्किटेक्चर देखने के लिए टिब्बो रेंडीज़वस ( tibco.com/products/automation/messaging/low-latency/rendezvous/… ), अपाचे ActiveMQ और स्प्रेड (स्प्रेड डॉट ओआरजी ) शामिल हैं।
एक्सल केम्पर

1
पहिया को सुदृढ़ मत करो। ZeroMQ, RabbitMQ, Redis, आदि
djechlin

1
@djechlin पहिया अब तक का सबसे प्रबलित आइटम है। यह हमेशा राउंडर हो सकता है, लेकिन इस मामले में, इसे
मजबूत

@cgoddard उन तकनीकों में से एक पर कोड बेस में डाइविंग का प्रयास करता है।
djechlin

जवाबों:


14

संक्षेप में:

यह एक कठिन समस्या है। पहिया को सुदृढ़ मत करो।

कई तकनीकें हैं जो संदेश कतार परत को हल करती हैं। उनमे शामिल है

  • ZeroMQ
  • RabbitMQ
  • अपाचे काफ्का
  • रेडिस, BLPOP या PUBSUB के साथ (मैंने पूछा है कि यह यहाँ कैसे करना है )।
  • RabbitMQ के अलावा अन्य AMQP कार्यान्वयन

मुझे लगता है कि यह मेरे लिए गुंजाइश से बाहर है कि प्रत्येक की कमियों पर चर्चा करें, कम से कम नहीं क्योंकि मैं वास्तव में इस खांसी को ठीक करने के लिए विशेषज्ञता का दावा नहीं करता, खरगोश खांसी का उपयोग नहीं करता ।

यहां तक ​​कि अगर आप इनमें से किसी भी तकनीक का उपयोग नहीं करना चाहते हैं, तो उनके दस्तावेज़ पढ़ें।

यह आपको डिज़ाइन पैटर्न पर शिक्षित करेगा जो एक सिस्टम पर संभव है। ZeroMQ के दस्तावेज़ीकरण को पढ़ना आपको कई क्लासिक संदेश कतारबद्ध आर्किटेक्चर पर शिक्षित करेगा, जिन्हें उन्होंने ईमानदारी से लागू किया है। यहां तक ​​कि अगर आप ZeroMQ का उपयोग नहीं करते हैं, तो इन पैटर्नों को जानने से आपको अन्य कतारबद्ध तकनीकों का मूल्यांकन करने में मदद मिलेगी, यह पूछकर कि क्या आप उस पैटर्न को लागू कर सकते हैं।

RabbitMQ / AMQP के एक्सचेंज-कतार मॉडल के बारे में जानें। रूटिंग आपके लिए आ सकती है - यह Redis PUBSUB द्वारा समर्थित है, लेकिन मुझे याद नहीं है कि इसे ZeroMQ द्वारा समर्थित किया जा रहा है - और फैनआउट कुछ ऐसा है जिसका मेरी दुकान उपयोग कर रही है, यद्यपि कुछ समय के लिए एक मेम्केड पोल (yuck!) पर खराब तरीके से लागू किया गया। ।

कैसे एक का चयन करने के लिए?

मैं एक स्टार्टअप पर काम करता हूं, जिसका SLA एक वेब-ऐप के लिए विशिष्ट है - कुछ आउटेज ठीक हैं, जब तक कि हम डेटा के कम नुकसान के साथ जल्दी से सेवा बहाल कर सकते हैं। हमें ट्विटर या टम्बलर जैसी समस्याओं के बारे में नहीं सोचना है, इसलिए हमें वास्तव में थ्रूपुट वॉल्यूम के बारे में नहीं सोचना चाहिए। कहा जा रहा है, यदि आप मेरी तरह SLA लागू कर रहे हैं, तो ये विचार मन में आएंगे:

  • क्या ग्राहक पुस्तकालय वास्तव में काम करते हैं ? क्या उनमें संबंध बनाए रखना आसान है? (ZeroMQ, रेडिस: हाँ। RabbitMQ: नहीं)।
  • निगरानी और प्रबंधन एक सर्वर कंसोल से आसान है? (रेडिस: हां, RabbitMQ: हां, ZeroMQ: ऐसा नहीं है कि मुझे याद है लेकिन हमने इसका इस्तेमाल लंबे समय तक नहीं किया था)
  • क्या ग्राहक आंतरिक कतार का समर्थन करते हैं इसलिए कम आउटेज में बहुत कम डेटा हानि होती है? (ZeroMQ, रेडिस: हाँ। RabbitMQ: नहीं।)

बेशक, अगर आप उच्च आवृत्ति वाले ट्रेडिंग शॉप के लिए काम कर रहे हैं, तो ये आपकी कम चिंताएं होंगी। आप अंत में उच्चतर थ्रूपुट के बदले क्लाइंट-साइड लाइब्रेरी में विकास का समय देने के लिए तैयार होंगे। लेकिन मैं आपको यह बताने के लिए और अधिक लिख रहा हूं कि ये प्रौद्योगिकियां अपने प्रदर्शन के आधार पर बाजार का रुख करती हैं, न कि उनकी आउट-ऑफ-द-बॉक्स कार्यक्षमता। आप एक वेब स्टार्टअप हैं, तो आप कर रहे हैं अब तक अधिक पूर्व की तुलना में बाद में रुचि रखते हैं, और तदनुसार, Redis, जो और अधिक शानदार प्रदर्शन पर उपयोग की कठिनाई की तुलना में अच्छा प्रदर्शन पर उपयोग में आसानी के लिए अनुकूलित है की तरह कुछ, शायद एक है RabbitMQ से बेहतर विकल्प। (मैं वास्तव में खरगोश की तरह नहीं हूँ)।


8
पहिया को मजबूत मत करो !!! अगर लिनस ने सोचा कि आप अब विंडोज का उपयोग कर रहे हैं। उसने मज़ाक के लिए MINIX को फिर से बनाया "क्योंकि उसे यह पसंद नहीं था" और देखो कि हमारे पास अब क्या है।
क्रिसपोटेक

9
@chrisapotek लाइनस ने समस्या पर एक शॉट लेने से पहले ऑपरेटिंग सिस्टम इंटर्नल्स को समझा । यहाँ ओपी इस स्तर पर अपनी शब्दावली का निर्माण कर रहा है। अंतर।
erbdex

2
@chrisapotek वह भी चाहते थे। यदि आप एक बेहतर संदेश बस का निर्माण करना चाहते हैं, तो आगे बढ़ें, लेकिन आप शायद ऐसा नहीं करना चाहते हैं जबकि आप एक वेब ऐप या जो भी बनाना चाहते हैं। मैं भी योग्य होने की सलाह देता हूं। जब भी मैं कोड लिखना चाहता हूं, मैं व्यक्तिगत रूप से एक ऑपरेटिंग सिस्टम को फिर से स्थापित करने के लिए योग्य नहीं हूं।
djechlin
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.