2009-12-03 5 views
16

के माध्यम से संदेश पंक्तियां वीएस डीबी टेबल कतार हमारे पास बहुत बड़ी मीडिया प्रसंस्करण (छवियों, वीडियो) के साथ-साथ ईमेल आउटपुट आदि के साथ जल्द ही बड़ी परियोजना आ रही है, सामानों की तरह सामान्य रूप से हम एक टेबल में डालते हैं "email_queue" और हम तालिका में कतार प्रक्रिया को चलाने के लिए एक क्रॉन का उपयोग करते हैं।सीआरओएन

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

क्या कोई तालिका और सीआरओएन की बजाय कतार प्रणाली का उपयोग करने के लाभों का विवरण दे सकता है? चूंकि मैं वास्तव में यह देखने के लिए नहीं देख सकता कि वे क्या हैं।

धन्यवाद

उत्तर

6

एक संदेश कतार (कम से कम एक वितरित एक, उदा RabbitMQ) आप शारीरिक नोड्स भर में काम वितरित करने की क्षमता देता है। काम करने और इसे संसाधित करने के लिए आपको अभी भी प्रत्येक नोड पर एक प्रक्रिया की आवश्यकता है।

यह अनुमान है कि अंततः यह आपकी आवश्यकताओं के अनुसार नीचे आ जाता है। आप संदेश कतारों का उपयोग कर पैमाने पर एक अधिक प्रबंधनीय समाधान प्राप्त कर सकते हैं: आप अपने नोड्स को अधिक आसानी से डीक्यूल कर सकते हैं।

बेशक, एक सीखने की वक्र है ... तो यह फिर से आपके लक्षित लक्ष्यों पर वापस आती है।


ध्यान दें कि प्रत्येक नोड पर आप अभी भी अपने क्रॉन/db तालिका का पुन: उपयोग जब तक (और अगर) आप कार्यान्वयन में परिवर्तन करना चाहते कर सकते हैं। जब आप कर सकते हैं तो decoupling के बारे में यह बहुत अच्छा है।

+1

हाय, मैं समझता हूं कि, लेकिन आप एक टेबल/क्रॉन के साथ एक ही चीज़ नहीं कर सकते, डीबी से दूरस्थ रूप से कनेक्ट हो सकते हैं और क्रॉन को दूसरी मशीन पर चला सकते हैं? – Bowen

+0

आप निश्चित रूप से कर सकते हैं लेकिन फिर यह एक और "युग्मित समाधान" प्रतीत होता है। एक संदेश कतार दृष्टिकोण WITH, आप नोड कार्यान्वयन के लिए अधिक decoupled हैं। यह एक अच्छी बात हो सकती है। – jldupont

+0

युग्मित बीक्यूज यह प्रारूप वाई के साथ डेटाबेस एक्स का उपयोग करता है, या क्योंकि यह प्रारूप बी के साथ कतार का उपयोग करता है? अच्छा सवाल @bowen। – graffic

19

अंतर:

  1. एक बार एक संदेश कतार इसे तुरंत दिया जा सकता है पर डाल दिया है। तो यदि आपका क्रॉन सामान्यतः हर 5 मिनट में चला जाता है, तो आप कतार के साथ तेजी से प्रक्रिया कर सकते हैं।

  2. यदि आपकी कतार प्रणाली लेनदेन का समर्थन करती है, तो यह प्रक्रिया विफल होने पर स्वचालित रूप से एक संदेश फिर से वितरित कर देगा।

  3. आपकी कतार में क्या पूछताछ करना कठिन हो सकता है। एक डेटाबेस टेबल खोजने के लिए एक अच्छा तरीका है (एसक्यूएल)।

  4. यदि आपके पास संदेशों को संभालने वाले एकाधिक सर्वर/प्रक्रिया/धागे हैं, तो कतार प्रणाली सुनिश्चित करेगी कि एक संदेश केवल उनमें से किसी को दिया जाता है। एक डीबी तालिका के साथ आप आवेदन कोड के माध्यम से इस संभाल करने के लिए (ताला लगा, झंडे, आदि ...)

+2

ग्रेट पॉइंट्स, मेरी राय में एक बेहतर जवाब। –

4

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

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

एमक्यू आमतौर पर संदेश तक पहुंच को सिंक्रनाइज़ करने के बावजूद एक और निफ्टी सुविधा जोड़ते हैं (आप अगली चीज़ प्राप्त करने के लिए अपने एसक्यूएल में ऐसा कर सकते हैं या नहीं कर सकते हैं)।

मैं क्रॉन/टेबल तंत्र को पोल-आधारित और एमक्यू को ईवेन्ट-आधारित के रूप में मानना ​​पसंद करता हूं।

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

एमक्यू हालांकि एसिंक्रोनस आपके क्रॉन विंडो के बीच काम करेगा। आप कैसे जानते हैं कि अगली क्रॉन नौकरी चलाने से पहले आपके टेबल में संसाधित संदेशों की संख्या को पूरा किया जा सकता है और पिछली नौकरी पर कदम उठाने का प्रयास करता है?

एमक्यू के लिए कई उपभोक्ता आपको फिट होने पर काम को स्केल करने की अनुमति देते हैं। उपर्युक्त उदाहरण में यदि आपने देखा कि आपका load average (ओएस 'प्रक्रिया कतार में वही है) आपके जैसा से बड़ा है, तो आप मेट्रिक्स मांग के रूप में इसे चालू और ऑफ़लाइन लाने के लिए एक और उपभोक्ता को उस भार को संभालने के लिए प्रावधान कर सकते हैं।

संदेश प्राथमिकता और प्रदर्शन जैसे कुछ परिचालन मानकों (कुछ कतार स्मृति में रह सकते हैं, अन्य डिस्क में बने रह सकते हैं) के लिए एमक्यू स्थापित किए जा सकते हैं।

डाउनसाइड वह है (जैसा कि पहले से ही उल्लेख किया गया है) कि कतार कभी-कभी पूछताछ करने के लिए कठिन हो सकती है और जिसके लिए मीट्रिक प्राप्त करना पड़ सकता है। मुझे हमेशा एमक्यू सिस्टम मिलते हैं जिनमें डीबी बैकिंग स्टोर होता है ताकि मैं स्वयं को एसक्यूएल के साथ कतार देख सकूं।

1

यह काफी बार पूछता है, और आमतौर पर एमक्यू जाने के लिए एक अनिवार्य कारण नहीं है यदि आप डेटाबेस के साथ सहज हैं। Here's one example thread

मेरा लेना यह है कि आप सीखने की वक्र से बचना चाहते हैं जब तक कि आपकी डेटा आवश्यकताओं में असाधारण रूप से उच्च वॉल्यूम शामिल न हों, जो कि टाइमर के साथ प्रक्रिया के बजाए क्रॉन की चीज है (टाइमर के साथ बहुत कम प्रक्रियाएं)।

संबंधित मुद्दे