2012-03-13 52 views
6

हम हॉर्नेटक स्टोर और आगे तंत्र का उपयोग करने की कोशिश कर रहे हैं ... हालांकि कोर स्टैंड का उपयोग करके एक स्टैंडअलोन हॉर्नेटक्यू उदाहरण से दूसरे को संदेशों को अग्रेषित करना बहुत धीमा है। हम प्रति सेकंड 200 संदेशों से ऊपर थ्रूपुट दर बढ़ाने में सक्षम नहीं हैं।हॉर्नेटक कोर ब्रिज का उपयोग करके बहुत कम थ्रूपुट

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

<acceptors> 
     <acceptor name="netty"> 
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> 
     <param key="host" value="${hornetq.remoting.netty.host:192.168.2.xxx}"/> 
     <param key="port" value="${hornetq.remoting.netty.port:xxxx}"/> 
     <param key="tcp-send-buffer-size" value="1048576"/> 
     <param key="tcp-receive-buffer-size" value="1048576"/> 
     <param key="use-nio" value="true"/> 
     <param key="batch-delay" value="50"/> 
     <param key="use-nio" value="true"/> 
     </acceptor> 
<acceptors> 
<address-settings> 
      <address-setting match="jms.queue.Record"> 
        <dead-letter-address>jms.queue.RecordDLQ</dead-letter-address> 
        <max-size-bytes>262144000</max-size-bytes> 
        <page-size-bytes>10485760</page-size-bytes> 
        <address-full-policy>PAGE</address-full-policy> 
      </address-setting> 
    </address-settings> 
    <queues> 
      <queue name="jms.queue.Record"> 
         <address>jms.queue.Record</address> 
      </queue> 
    </queues> 

:

<connectors> 
      <connector name="netty-bridge"> 
       <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
       <param key="host" value="destination.xxx.com"/> 
       <param key="port" value="5445"/> 
       <param key="batch-delay" value="50"/> 
       <param key="tcp-send-buffer-size" value="1048576"/> 
       <param key="tcp-receive-buffer-size" value="1048576"/> 
       <param key="use-nio" value="true"/> 
      </connector> 
</connectors> 
<address-settings> 
     <address-setting match="jms.queue.Record"> 
       <dead-letter-address>jms.queue.RecordDLQ</dead-letter-address> 
       <max-size-bytes>262144000</max-size-bytes> 
       <page-size-bytes>10485760</page-size-bytes> 
       <address-full-policy>PAGE</address-full-policy> 
     </address-setting> 
</address-settings> 
<queues> 
     <queue name="jms.queue.Record"> 
        <address>jms.queue.Record</address> 
     </queue> 
</queues> 
<bridges> 
     <bridge name="core-bridge"> 
       <queue-name>jms.queue.Record</queue-name> 
       <forwarding-address>jms.queue.Record</forwarding-address> 
       <retry-interval>1000</retry-interval> 
       <retry-interval-multiplier>1.0</retry-interval-multiplier> 
       <reconnect-attempts>-1</reconnect-attempts> 
       <confirmation-window-size>10485760</confirmation-window-size> 
       <static-connectors> 
         <connector-ref>netty-bridge</connector-ref> 
       </static-connectors> 
     </bridge> 
</bridges> 

निम्न गंतव्य HornetQ पर कोर पुल विन्यस्त करने के लिए प्रासंगिक अनुभाग हैं:

निम्नलिखित अग्रेषण HornetQ पर कोर पुल विन्यस्त करने के लिए प्रासंगिक वर्गों रहे हैं सभी सिस्टम वैरिएबल (सीपीयू/मेमोरी/डिस्क आईओ/नेटवर्क/आदि) को कम किया जाता है और लॉग में कोई त्रुटि नहीं होती है।

नोट: हमने एनआईओ के साथ-साथ विरासत/पुराने आईओ दोनों के साथ प्रयास किया है। यह HornetQ-2.2.5-फाइनल और दोनों के साथ करने की कोशिश की गई है HornetQ-2.2.8-जीए (2.2.8-जीए स्रोत से बनाया गया था)

के रूप में किसी भी विचार क्या इस मुद्दे और क्या संकल्प कारण हो सकता है हो सकता है?

अन्य अवलोकन: ऐसा लगता है कि मुख्य पुल के माध्यम से भेजे जा रहे संदेश लेनदेन हैं ... इसलिए क्या इन लेन-देन को पकड़ना संभव है और दो हॉर्नेटक उदाहरणों के बीच संचार असीमित रूप से होता है?

+0

यह एक बग तय किया गया था –

उत्तर

3

ठीक है .. मैंने इसे अपने लिए बाहर निकाला।

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

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

जेबॉस को मूल पुल में इस समांतरता को कॉन्फ़िगर करने योग्य आदर्श बनाने की आवश्यकता है।

+0

किसी बिंदु पर एक बग था। कृपया मेरे उत्तर पर एक नज़र डालें। –

1

मेरा मानना ​​है कि आप 2.2.5 का उपयोग कर रहे थे (यह आपके पोस्ट से स्पष्ट नहीं है कि आप किस संस्करण का उपयोग कर रहे थे) जिसमें पुल पर एक बग था जो आप कह रहे थे।

कुछ संस्करणों में पुल एसिंक पुष्टिकरणों पर गिनने के बजाय संदेशों को सिंक्रनाइज़ भेज रहा था।

इस पर एक नज़र डालें कि यह नवीनतम संस्करण पर कैसे व्यवहार करेगा।