2013-04-04 12 views
8

मुझे एक एपीजीएम पब सॉकेट पर एक या अधिक एपीजीएम एसयूबी सॉकेट में संदेश भेजने वाला ऐप मिला है। चीजें अधिकतर काम करती हैं, लेकिन यदि सदस्यता लेने वाले आवेदन को काफी देर तक छोड़ दिया जाता है, तो आम तौर पर यह एक संदेश या कुछ संदेश गायब हो जाएगा। (मेरे संदेशों में अनुक्रम संख्याएं हैं, इसलिए मैं बता सकता हूं कि कोई गुम या आदेश से बाहर है या नहीं।) जेडएमक्यू दस्तावेज़ों के पढ़ने के आधार पर, मैंने सोचा होगा कि एपीजीएम की "विश्वसनीय मल्टीकास्ट" प्रकृति इसे होने से रोकती है, एक एसयूबी सॉकेट के बाद एक संदेश मिलता है, यह बंद होने तक या प्रमुख नेटवर्क परेशानियों तक (यानी कनेक्शन अधिकतम हो जाता है) तक उन्हें रखने की गारंटी है।क्या विश्वसनीयता विश्वसनीयता (यदि कोई है) क्या ZMQ एपीजीएम पर PUB/SUB के लिए बनाता है?

वैसे भी, यह संदर्भ है, लेकिन सवाल केवल शीर्षक है: जेडएमक्यू एपीजीएम पर पीयूबी/एसयूबी के लिए क्या विश्वसनीयता गारंटी देता है (यदि कोई है)?

+0

क्या आप प्रकाशक में एक उच्च वॉटरमार्क स्थापित कर रहे हैं? –

+0

बस डिफ़ॉल्ट का उपयोग कर। संदेश दर उच्च नहीं है, प्रति सेकंड 2 10 बी-160 केबी संदेश, प्रत्येक एक फ्रेम में। (औसत संदेश आकार 80 केबी है।) आंकड़े 1000 पर्याप्त से अधिक था। – scott

+0

क्या आपने सत्यापित किया है कि बैक चैनल सही तरीके से काम कर रहा है: प्रेषक और रिसीवर सही नेटवर्क इंटरफेस का उपयोग कर रहे हैं? उदाहरण के लिए आप वायरशर्क में पीजीएम प्रोटोकॉल का पालन कर सकते हैं। –

उत्तर

7

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

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

पीजीएम कॉन्फ़िगरेशन वास्तविक समय प्रसारण पर लक्षित है जैसे कि धीमी रिसीवर प्रेषक को रोक नहीं सकता है। प्रोटोकॉल दोनों प्रतिमानों का समर्थन करता है लेकिन बाद में मांग की कमी के कारण लागू नहीं किया गया है।

+1

रिकवरी विंडो पर व्यावहारिक सीमाएं क्या हैं? मैंने ZMQ_RECOVERY_IVL को 10 सेकंड पर सेट किया है, जो मेरी डेटा दर पर उचित मात्रा में स्मृति (<5 एमबी) है, और मैंने कभी भी 2-3 सेकंड से अधिक डेटा के डेटा को एक बार में छोड़ा नहीं देखा है। मैंने सोचा होगा कि मुझे उन परिस्थितियों में विश्वसनीयता मिल जाएगी। – scott

+0

कुछ गलत दिखता है, [ओपनपीजीएम लॉगिंग] सक्षम करने का प्रयास करें (https://code.google.com/p/openpgm/wiki/OpenPgm5CReferenceErrorHandling) और देखें कि कुछ दिलचस्प दिखाई देता है या नहीं। –

+2

ओपनपीजीएम लॉगिंग ने बहुत सारी जानकारी प्रदान की जो मुझे बिल्कुल समझ में नहीं आया। लेकिन मैंने अपने ZMQ_RECOVERY_IVL को 100 सेकंड तक बढ़ा दिया, और मेरा ZMQ_SNDBUF और ZMQ_RCVBUF 10 एमबी तक पहुंच गया, और इससे विश्वसनीयता में नाटकीय सुधार हुआ। – scott

4

ज़ीरोएमक्यू बिल्कुल एक गारंटी देता है: सभी संदेश पूर्ण होते हैं - आपको कभी भी आंशिक संदेश प्राप्त नहीं होंगे। यह विश्वसनीयता की कोई गारंटी नहीं देता है। आपको उच्च पानी के निशान (एचडब्ल्यूएम) व्यवहार के दस्तावेज़ीकरण की जांच करनी चाहिए, जो the suicidal snail द्वारा सचित्र किए गए संदेशों के लिए सबसे आम कारण है।

+0

ईपीजीएम "विश्वसनीय मल्टीकास्ट" नहीं है? ZMQ के माध्यम से उस प्रोटोकॉल को उपलब्ध कराने से परेशान क्यों करें यदि यह वास्तव में आपको विश्वसनीयता नहीं देता है। कच्चे यूडीपी सॉकेट के माध्यम से मल्टीकास्ट का समर्थन क्यों न करें? – scott

+0

@ स्कॉट पीजीएम आदेशित डिलीवरी लागू करता है, स्विच किए गए नेटवर्क पैकेट को पुन: व्यवस्थित करेंगे और पीजीएम मूल अनुक्रम को फिर से इकट्ठा कर सकता है। मल्टीकास्ट पथ परिभाषा के महत्वपूर्ण अर्थशास्त्र भी हैं जिन्हें सहायक वास्तुकला की आवश्यकता होती है। –

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