Vert.x

2012-09-06 7 views
12

में क्लस्टरिंग और साझा डेटा मैं वर्ट.एक्स (नेटटी और हेज़ेलकास्ट पर आधारित) में विकसित कर रहा हूं, और मैं दो सर्वर उदाहरणों के बीच डेटा साझा करने की कोशिश कर रहा हूं (विभिन्न मशीनों में उन उदाहरणों का ईश, वही लैन)।Vert.x

मेरी समस्या यह है कि मुझे नहीं पता कि वर्क.एक्स सर्वर को कॉन्फ़िगर करने के लिए उन्हें अपने समवर्ती मेमोरी मैप्स को साझा करने की अनुमति देने के लिए (सिद्धांत कहता है कि यह संभव है)।

मैंने Vert.x और Hazelcast से कई दस्तावेज़ पढ़े हैं लेकिन मेरे पास अभी तक परिणाम नहीं हैं। (मुझे नहीं पता कि hazelcast xml कॉन्फ़िगरेशन फ़ाइलों को लोड करने के लिए vert.x को कैसे बल देना है)।

अग्रिम धन्यवाद!

उत्तर

4

आप vert.x के विभिन्न उदाहरणों के बीच डाटा साझा नहीं कर सकते AFAIK - प्रलेखन से

"[...] इस तरह के एक उपयोग के मामले में बेहतर एक साझा नक्शा संरचना उपलब्ध कराने के द्वारा हल किया है कि हो सकता है एक ही vert.x उदाहरण में विभिन्न लंबवत उदाहरणों द्वारा सीधे पहुंचाया गया। "

चूंकि "vert.x उदाहरण" का अर्थ है "jvm instance" आप विभिन्न jvm के बीच साझामैप/सेट का उपयोग नहीं कर सकते हैं। आप इसके लिए इवेंट बस का उपयोग कर सकते हैं।

+2

मैं vert.x और अपने बयान से सहमत नहीं की कोशिश नहीं कर के साथ पूरी तरह से परिचित नहीं है - इसका hazelcast का उपयोग कर संभव हो जाना चाहिए (नक्शे दोहराया जाता है)। –

+0

@castarco प्रलेखन यह भी कहता है: "vert.x के बाद के संस्करणों में हम क्लस्टर में सभी vert.x उदाहरणों द्वारा डेटा को साझा करने की अनुमति देने के लिए इसका विस्तार करना चाहते हैं।" तो उस पर नजर रखें। –

+0

@CarloBertuccini Vert.x में Hazelcast डेटा संरचनाओं का उपयोग करने का कोई तरीका है? –

2

जैसा कि बताया गया है, Vert.x में बंडल की गई डेटा साझा करने वाली ऑब्जेक्ट्स एकाधिक Vert.x उदाहरणों में डेटा साझा करने का समर्थन नहीं करती हैं। ऐसा करने के लिए आपको या तो करना होगा:

  1. "सामान्य" साझा डेटाबेस का उपयोग करें।
  2. एक वर्टिकल सेट करें जो SharedMap उदाहरण प्रबंधित करता है और शेष क्लस्टर के लिए और उसके बाद के अपडेट के लिए प्रकाशित करता है और सुनता है।
  3. अपने एप्लिकेशन को डिज़ाइन करें ताकि आपको इस तरह से डेटा साझा करने की आवश्यकता न हो।
7

विभिन्न मशीनों पर vertx उदाहरणों के बीच डेटा साझा

विकल्प के लिए विकल्प हैं 1.

आप Vert.x ClusterManager इस्तेमाल कर सकते हैं और यह नक्शे है:

ClusterManager clusterManager = ((VertxInternal)vertx).clusterManager(); 
Map map = clusterManager.getSyncMap("mapName"); // shared distributed map 

उस मानचित्र को हेज़ेलकास्ट IMAP द्वारा समर्थित किया गया है और वितरित किया जाता है। यह मानता है कि आप -cluster पैरामीटर के साथ वर्टक्स चला रहे हैं और क्लस्टरिंग कॉन्फ़िगर किया है।

हालांकि ध्यान दें कि यह आंतरिक API है और आमतौर पर उत्पादन के लिए अनुशंसित नहीं है। यदि आप एक बार प्रयोग कर रहे हैं तो यह उपयोगी हो सकता है।

विकल्प 2.

आप एक बार vertx संकुल मोड में शुरू कर दिया है Hazelcast तक पहुँच प्राप्त कर सकते हैं:

Set<HazelcastInstance> instances = Hazelcast.getAllHazelcastInstances(); 
    HazelcastInstance hz = instances.stream().findFirst().get(); 
    Map map = hz.getMap("mapName"); // shared distributed map 
+0

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

3

Vert.x 2 क्लस्टर चौड़ा साझा डेटा का समर्थन नहीं करता। हालांकि, Vert.x 3 एक एसिंक्रोनस एपीआई का पर्दाफाश करता है जो अंतर्निहित हैज़लकास्ट क्लस्टर प्रबंधक को लपेटता है।

वर्ट के लिए।एक्स 2, हालांकि, आप अपने कार्यकर्ता वर्टिकल में सीधे हेज़ेलकास्ट उदाहरण का उपयोग कर सकते हैं।

HazelcastInstance hazelcast = Hazelcast.getAllHazelcastInstances().iterator().next(); 

नोट है कि आप केवल Hazelcast एपीआई सीधे इस तरह से एक कार्यकर्ता verticle से पहुंचना चाहिए: बस Vert.x Hazelcast उदाहरण पाने के लिए Hazelcast के स्थिर तरीकों का उपयोग। हेज़ेलकास्ट एपीआई अवरुद्ध हो रहा है, इसलिए यदि सामान्य ऊर्ध्वाधर में उपयोग किया जाता है तो यह इवेंट लूप को अवरुद्ध कर देगा।

3

Vert.x 3 के साथ - यदि आप अपने वर्ट.एक्स उदाहरणों को "क्लस्टर मोड" में कॉन्फ़िगर करते हैं (जो -cluster को Vert.x लॉन्चर, see here for details की कमांड लाइन में जोड़ने के समान सरल हो सकता है), तो आप इसका उपयोग कर सकते हैं "वितरित मानचित्र" तक पहुंच प्राप्त करने के लिए SharedData इंटरफ़ेस जो क्लस्टर सदस्यों को पारदर्शी रूप से क्लस्टर में डेटा पढ़ने और लिखने की अनुमति देता है।

उदाहरण:

if (vertx.isClustered()) { 
    log.info("Using clustered data store"); 
    vertx.sharedData().<String, MyEntity>getClusterWideMap("entities", 
      res -> { 
       AsyncMap<String, MyEntity> dataMap = res.result(); 
       setDataStore(dataMap); 
      }); 
}