2012-04-05 27 views
24

के साथ थ्रूपुट अधिकतम करें हमारी परियोजना में, हम डेटा पास करने के लिए "कार्य पंक्तियों" पैटर्न में खरगोश एमक्यू का उपयोग करना चाहते हैं।RabbitMQ

निर्माता पक्ष पर, हम कुछ टीसीपी सर्वर (node.js में) को उच्च समवर्ती डेटा रिकॉर्डेड करने के लिए बनाते हैं और बिना किसी काम किए एमक्यू को भेजते हैं।

उपभोक्ता पक्ष पर, हम एमक्यू से कार्य डेटा प्राप्त करने के लिए जावा क्लाइंट का उपयोग करते हैं, इसे संभालें और फिर एएके।

तो सवाल यह है: अधिकतम संदेश पासपुट/प्रदर्शन (उदाहरण के लिए, 400,000 संदेश/सेकंड) प्राप्त करने के लिए, कितनी कतार सबसे अच्छी है? क्या वह और कतार का मतलब बेहतर थ्रूपुट/प्रदर्शन है? और क्या मुझे कुछ और नोटिस करना चाहिए? ऐसे परिदृश्य में RabbitMQ का उपयोग करने के लिए कोई ज्ञात सर्वोत्तम अभ्यास मार्गदर्शिका?

किसी भी टिप्पणी की अत्यधिक सराहना की जाती है !!

उत्तर

24

RabbitMQ में सर्वश्रेष्ठ प्रदर्शन के लिए, अपने रचनाकारों की सलाह का पालन करें। RabbitMQ blog से: जब वे खाली रहे

RabbitMQ के कतारों सबसे तेजी से कर रहे हैं। जब एक कतार खाली होती है, और इसमें उपभोक्ता संदेश प्राप्त करने के लिए तैयार होते हैं, तो जैसे ही कतार द्वारा एक संदेश प्राप्त होता है, यह सीधे उपभोक्ता तक जाता है। एक टिकाऊ कतार में एक सतत संदेश के मामले में, हाँ, यह डिस्क पर भी जायेगा, लेकिन यह एक असीमित तरीके से किया जाता है और भारी रूप से buffered है। मुख्य बिंदु यह है कि बहुत कम बुक-रखरखाव करने की आवश्यकता है, बहुत कम डेटा संरचनाएं संशोधित की जाती हैं, और बहुत छोटी अतिरिक्त मेमोरी आवंटित करने की आवश्यकता होती है।

यदि आप वास्तव में खरगोश एमक्यू कतारों के प्रदर्शन में गहरी खुदाई करना चाहते हैं, तो यह other blog entry उनके डेटा में और भी आगे जाता है।

26

एक प्रतिक्रिया मैं एक बार RabbitMQ-पर चर्चा मेलिंग समूह से मिला वहाँ अन्य चीजें हैं जो आप प्रवाह बढ़ाने के लिए और प्रतीक्षा अवधि कम करने की कोशिश कर सकते हैं के अनुसार:

  • उपयोग एक बड़ा प्रीफ़ेच गिनती। छोटे मूल्य प्रदर्शन को चोट पहुंचाते हैं।

  • एक विषय विनिमय प्रत्यक्ष या प्रशंसक विनिमय से धीमा है।

  • सुनिश्चित करें कि कतार कम रहें। लंबी कतार ओवरहेड अधिक प्रसंस्करण लगाती है।

  • यदि आप विलंबता और संदेश दरों की परवाह करते हैं तो छोटे संदेशों का उपयोग करें। एक कुशल प्रारूप का उपयोग करें (उदा। एक्सएमएल से बचें) या पेलोड को संपीड़ित करें।

  • हायपीई के साथ प्रयोग, जो प्रदर्शन में मदद करता है।

  • लेनदेन और दृढ़ता से बचें। तत्काल या अनिवार्य मोड में प्रकाशन से बचें। एच से बचें। क्लस्टरिंग प्रदर्शन को भी प्रभावित कर सकती है।

  • आप एक मल्टी कोर सिस्टम पर बेहतर प्रवाह क्षमता को प्राप्त होगा यदि आप कई कतारों और उपभोक्ताओं की है।

  • कम से कम v2.8.1 का उपयोग करें, जो प्रवाह नियंत्रण प्रस्तुत करता है। सुनिश्चित करें कि मेमोरी और डिस्क स्पेस अलार्म कभी ट्रिगर नहीं करते हैं।

  • वर्चुअलाइजेशन एक छोटा प्रदर्शन जुर्माना लगा सकता है।

  • अपने ओएस और नेटवर्क स्टैक को ट्यून करें। सुनिश्चित करें कि आप पर्याप्त रैम से अधिक प्रदान करते हैं। तेजी से कोर और रैम प्रदान करें।

+0

क्या कोई विषय विनिमय धीमा है क्योंकि यह गणना करने के लिए लंबे समय तक एक्सचेंज लेता है कि किस कतार को संदेश भेजने की आवश्यकता है? – robertjewell

2

आप एक बड़ा प्रीफ़ेच गिनती के साथ और एक ही समय एसीके से अधिक संदेशों अपने उपभोक्ता से (बजाय प्रत्येक संदेश के लिए एसीके भेजने के) में प्रवाह क्षमता में वृद्धि होगी।

लेकिन, ज़ाहिर है, (http://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack) पर एकाधिक ध्वज वाले एसीके के लिए आपके उपभोक्ता अनुप्रयोग (http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-August/029600.html) पर अतिरिक्त तर्क की आवश्यकता है। आपको ब्रोकर से भेजे गए संदेशों के डिलीवरी टैग की एक सूची रखना होगा, उनकी स्थिति (चाहे आपका एप्लिकेशन उन्हें संभाला है या नहीं) और डिलीवरी वाले सभी संदेशों के दौरान प्रत्येक एन-डी डिलीवरी-टैग (एनडीTAG) एसीके एनडीएजी से कम या उसके बराबर कम किया गया है।

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