हां। Mnesia
आपकी आवश्यकताओं को पूरा करता है। हालांकि, जैसा कि आपने कहा था, एक उपकरण अच्छा होता है जब इसका उपयोग करने वाले व्यक्ति इसे गहराई से समझते हैं। हमने distributed authentication system
पर मेनेसिया का उपयोग किया है और हमें अब तक किसी भी समस्या का अनुभव नहीं हुआ है। जब मैनेशिया को कैश के रूप में उपयोग किया जाता है तो यह memcached से बेहतर होता है, एक कारण के लिए "मेमकैच गारंटी नहीं दे सकता कि आप क्या लिखते हैं, आप किसी भी समय मेमोरी स्वैप मुद्दों और सामान के कारण पढ़ सकते हैं" (here का पालन करें)।
हालांकि, इसका मतलब है कि आपकी वितरित प्रणाली एरलांग पर बनाई जा रही है। दरअसल आपके मामले में मैनेशिया अधिकांश नोएसक्यूएल कैश समाधान धड़कता है क्योंकि उनके सिस्टम Eventually consistent
हैं। मैनेशिया लगातार है, जब तक कि क्लस्टर में नेटवर्क उपलब्धता सुनिश्चित की जा सके। एक वितरित कैश सिस्टम के लिए, आप ऐसी स्थिति नहीं चाहते हैं जहां आप विभिन्न नोड्स से एक ही कुंजी के लिए अलग-अलग मान पढ़ते हैं, इसलिए मैनेशिया की स्थिरता यहां आसान होती है।
आपको कुछ सोचना चाहिए, यह है कि एक वितरित सिस्टम के लिए केंद्रीकृत मेमोरी कैश होना संभव है। यह इस प्रकार काम करता है: आपके पास RABBITMQ
सर्वर प्रत्येक क्लस्टर नोड पर AMQP क्लाइंट द्वारा चल रहा है और पहुंच योग्य है। सिस्टम AMQP इंटरफेस पर बातचीत करते हैं। क्योंकि, कैश केंद्रीकृत है, कैश से लिखने और पढ़ने के लिए जिम्मेदार प्रक्रिया/प्रणाली द्वारा स्थिरता सुनिश्चित की जाती है। अन्य सिस्टम सिर्फ AMQP message bus
पर एक कुंजी के लिए अनुरोध करते हैं, और कैश के लिए ज़िम्मेदार सिस्टम इस संदेश को प्राप्त करता है और इसे मान के साथ उत्तर देता है।
हमने हाल ही में सिस्टम के लिए Message bus Architecture using RABBITMQ
का उपयोग किया है जिसमें बैंकिंग सिस्टम, एक ईआरपी सिस्टम और सार्वजनिक ऑनलाइन सेवा के साथ एकीकरण शामिल है। हमने जो कुछ बनाया वह सभी को एक साथ फ्यूज करने के लिए ज़िम्मेदार था और हमें खुशी है कि हमने RABBITMQ
का उपयोग किया था।विवरण बहुत सारे हैं लेकिन हमने जो किया है वह एक संदेश प्रारूप, और एक सिस्टम पहचान तंत्र के साथ आना है। संदेश सिस्टम से लिखने और पढ़ने के लिए सभी प्रणालियों में RABBITMQ क्लाइंट होना चाहिए। फिर आप प्रत्येक सिस्टम के लिए Queue
पढ़ लेंगे, ताकि अन्य सिस्टम उस कतार में अपने अनुरोध लिख सकें, जिसका नाम RABBITMQ के अंदर है, जो सिस्टम के स्वामित्व के समान है। फिर, बाद में, आपको बस पर गुजरने वाले संदेशों को एन्क्रिप्ट करना होगा। अंत में, आपके पास बड़ी दूरी/राज्यों में एक साथ बंधे सिस्टम हैं, लेकिन एक कुशल नेटवर्क के साथ, आप विश्वास नहीं करेंगे कि RABBITMQ इन प्रणालियों को कितनी तेजी से बांधता है। किसी भी तरह, RABBITMQ को भी क्लस्टर किया जा सकता है, और मुझे आपको यह बताना चाहिए कि यह Mnesia
है जो RABBITMQ को शक्ति देता है (जो आपको बताता है कि मैनेशिया कितना अच्छा हो सकता है)।
एक और बात यह है कि, आपको कुछ पढ़ना और लिखना चाहिए जब तक आप इसके साथ सहज न हों।
स्रोत
2013-05-24 06:16:44
आपके विस्तृत सुझाव के लिए धन्यवाद। मैं केंद्रीकृत कैश सिस्टम के बजाय किसी प्रकार का स्थानीय इन-मेमोरी कैश समाधान पसंद करता हूं। केंद्रीकृत कैश सिस्टम का मतलब नेटवर्किंग संचार विलंब होता है, और ऑब्जेक्ट को क्रमबद्ध/संग्रहीत करने के लिए अतिरिक्त बाइनरी या स्ट्रिंग से ऑब्जेक्ट को deserialize करने के लिए अतिरिक्त लागत होती है। मेरी स्थिति में, मेरे पास कई छोटे कैश आइटम हैं, और एक HTTP अनुरोध के भीतर, मैं एक सौ आइटम तक पूछ सकता हूं लेकिन बैच में नहीं। उस स्थिति में, एक केंद्रीकृत कैश सिस्टम मेरे लिए उपयुक्त नहीं लगता है। क्या मैनेसिया के पास अन्य मशीनों से कैश का अनुरोध करने से रोकने के लिए किसी प्रकार का स्थानीय कैश होता है? –
हां। यदि प्रत्येक नोड में एक ही डेटाबेस की एक मैनेशिया कॉपी है, तो स्थिरता क्लस्टर-व्यापी होगी। हमेशा। किसी भी समय, आप किसी क्लस्टर नोड से जो भी पढ़ते हैं वह वही होगा जहां। लेकिन, यह नेटवर्क उपलब्धता पर धारणा है, और वितरित प्रणाली में भाग लेने वाले सभी नोड्स पर मैनेसिया की उपलब्धता है। –