2008-08-20 18 views
20

कोई भी एक अच्छा और भरोसेमंद ओपन सोर्स क्यूइंग सर्वर/मंच के बारे में जानता है?अच्छा ओपन सोर्स क्व्यूइंग प्लेटफार्म?

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

उत्तर

5

काफी खुला स्रोत नहीं है, लेकिन काफी खुला है: Amazon's Queue service। बहुत विश्वसनीय, उपयोग करने में बहुत आसान है।

ओपन सोर्स रूबी: Beanstalkd

JBossJava-Messaging-Service समर्थन है। message bean page देखें।

अपाचे में JMS उत्पाद है; सभी अपाचे उत्पाद खुले स्रोत हैं।

+1

बीनस्टॉकड सी में लिखित एक डिमन है। इसमें ग्राहक पुस्तकालय हैं कई भाषाओं के लिए। यह एक रूबी-केवल समाधान से बहुत दूर है। –

3

मुझे गेयस के अमेज़ॅन SQS का विचार पसंद है, हालांकि इसमें बड़ी देरी संदेशों के बीच का समय है। कुछ benchmarks 15-30 सेकेंड एक संदेश दिखाते हैं जो संदेश एक मिनट के रूप में धीमे होते हैं। तो यदि गति एक मुद्दा है तो आप अपना खुद का MOM चला सकते हैं।

मैं अपाचे से ActiveMQ की अनुशंसा करता हूं। हमने बेंचमार्क किए हैं और इसकी गति सॉकेट कनेक्शन के बहुत करीब हैं। हालांकि इसे कभी भी बड़े उत्पादन पैमाने पर ऐप पर इस्तेमाल नहीं किया है।

+0

जैसा कि मैंने आपके द्वारा लिंक किए गए बेंचमार्क को पढ़ा है ([यहां पर ले जाया गया है) (http://devver.wordpress.com/2008/06/18/speed-with-messaging-matters/)) मुझे बाहर से 0.4 सेकंड का समय दिखाई देता है ईसी 2 से एडब्ल्यूएस और 0.04 सेकंड। – chmac

7

ActiveMQ काफी अच्छा उत्पाद है: स्थापित करने में आसान, तैनाती आसान, साथ काम करने में आसान है। क्लस्टरिज़ेबल, कई प्रोटोकॉल समर्थित हैं, आदि। हम इसे उत्पादन में आजमा रहे हैं, विश्वसनीय लगता है (इसकी अपनी समस्याओं के साथ, लेकिन इतने सारे नहीं)

मैंने जेबॉस मैसेजिंग की कोशिश की है, लेकिन मुझे इसका उपयोग करना बहुत मुश्किल लगता है, और कम परिपक्व (यह जेबॉस एमक्यू का एक रिफैक्टरिंग है और यह काफी स्थिर और पूर्ण नहीं है ...)

[संपादित करें] क्षमा करें, मैंने आपके प्रश्न को पर्याप्त ध्यान से नहीं पढ़ा ... मैंने जेएमएस विनिर्देश की जांच की: यह करता है संदेश की प्राथमिकता आदेश लागू करना, लेकिन जेएमएस में केवल 10 स्तर प्राथमिकताएं हैं, और कार्यान्वयनकर्ताओं को उनका सम्मान करने के लिए मजबूर नहीं किया जाता है (मैंने यह नहीं देखा कि एएमक्यू क्या करता है) लेकिन भिन्नता कतारों का उपयोग करके प्राथमिकता प्रबंधन भी हासिल किया जा सकता है ... [/ संपादित करें]

+0

ActiveMQ 5.4.2 संदेश प्राथमिकताओं का समर्थन करता है। –

5

ActiveMQ के अलावा जो आपकी मांगों के लिए काम करना चाहिए, आप RabbitMQ या OpenAMQ पर भी देख सकते हैं।

-2

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

+0

इसमें कुछ योग्यता है। यदि आपकी सेवा पहले से ही केंद्रीय डेटाबेस पर निर्भर करती है और यदि प्रदर्शन आवश्यकताएं बहुत अधिक नहीं हैं। –

15

@ डेविडनिकोल का उल्लेख है कि आप डेटाबेस का उपयोग कर सकते हैं; हालांकि डेटाबेस के साथ नकारात्मकता कई धागे/प्रक्रियाओं में बहुत अधिक भार संतुलन कर रही है, थोड़ी मुश्किल है; आप अक्सर एक थ्रेड प्राप्त करते हैं जो कतार के सिर को लॉक कर देता है जिससे प्रेषण थोड़ा सा थ्रेड हो जाता है।

संदेश कतार के मुख्य उपयोगों में से एक आमतौर पर विश्वसनीय लोड बैलेंसर प्राप्त करने के लिए होता है - फिर आप Competing Consumers चला सकते हैं क्योंकि आप सभी को एक ही कतार से खींचना चाहते हैं ताकि आप बड़े पैमाने पर स्केलेबिलिटी दे सकें।

यदि आप संदेश कतार मार्ग पर जाते हैं; तो Apache ActiveMQ सबसे लोकप्रिय ओपन सोर्स कार्यान्वयन है और मैं इसके साथ शुरू करने की सिफारिश करता हूं क्योंकि इसे biggest and most active community (समान ओपन सोर्स प्रोजेक्ट्स के बीच चयन करने के लिए मेरी निजी पसंदीदा मीट्रिक) मिली है।

वहाँ implement priority queues with ActiveMQ करने के लिए विभिन्न तरीके हैं - मुख्य दुविधा यह आप विलंबता Resequencer pattern introduces या सिर्फ चयनकर्ताओं और प्राथमिकताओं की विभिन्न श्रेणियों के लिए उपभोक्ताओं की अलग प्रक्रिया/धागा पूल उपयोग कर रहा है एक बेहतर, कम विलंबता समाधान है के साथ सौदा कर सकते हैं।

जबकि चयनकर्ता कार्यान्वयन शुद्ध प्राथमिकता कतार कार्यान्वयन नहीं है - यह अभ्यास में बेहतर काम करता है क्योंकि यह उच्च प्राथमिकता संदेशों को बुलबुला करने के लिए चारों ओर प्रतीक्षा करने से बचाता है; इसके अलावा यह कम प्राथमिकता संदेशों से बचाता है जो आपके प्रोसेसर को हॉगिंग प्रक्रिया करने में काफी समय लगता है।

+0

धन्यवाद। मैंने आपके उत्तर से Resequencer पैटर्न के बारे में सीखा। –

2

बीटीडब्ल्यू आपके प्रश्न के लिए एक अलग पहलू यह है कि आप जो भी तकनीक चुनते हैं उससे बात करने के लिए एपीआई का उपयोग करना है।

किसी भी मिडलवेयर या आधारभूत संरचना के साथ मेरी सिफारिश hide the middleware from your business logic as this article describes पर आज़माएं। मिडलवेयर से अलग अपने व्यापार तर्क को ध्यान में रखते हुए आप मिडलवेयर कार्यान्वयन को आसानी से बदल सकते हैं - क्योंकि वास्तव में कोई भी आकार-फिट-सभी मिडलवेयर तकनीक नहीं है - उनके सभी के पास अपने स्वयं के पेशेवर और विपक्ष हैं। प्लस आवश्यकताएं बदलती हैं - विशेष रूप से लोड, वॉल्यूम, थ्रुपुट, सिंक्रनाइज़ और विलंबता के मामले में - इसलिए आपको कभी-कभी प्रोजेक्ट

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