2013-05-24 3 views
6

सुबह सभीसर्वश्रेष्ठ एरलांग इन-मेमोरी कैश सिस्टम क्रॉस नेटवर्क नोड्स = मैनेसिया?

मैं erlang के लिए नया हूँ, लेकिन मैं अपने पहले प्रोजेक्ट को एर्लांग पर डिजाइन करने की कोशिश कर रहा हूं जितना मैं कर सकता हूं। यहां मुझे एरलांग इन-मेमोरी कैश सिस्टम के लिए कुछ सुझाव चाहिए।

  1. कैश आइटम कुंजी-मूल्य आधारित संग्रहण है। कुंजी आमतौर पर एक ASCII स्ट्रिंग है; मूल्य erlang के प्रकारों में संख्या/सूची/tuple/आदि शामिल हैं
  2. कैश आइटम किसी भी नोड द्वारा सेट किया जा सकता है।
  3. कैश आइटम किसी भी नोड द्वारा प्राप्त किया जा सकता है।
  4. कैश आइटम को विभिन्न सर्वरों पर भी सभी नोड्स को पार किया जाता है
  5. गंदे पढ़ने की अनुमति है, मैं प्रदर्शन को कम करने के लिए कोई लॉक या लेनदेन नहीं चाहता हूं।
  6. पूरी तरह वितरित, कोई केंद्रीकृत मशीन या सेवा नहीं।
  7. अच्छा प्रदर्शन
  8. आसान स्थापित & तैनाती & विन्यास & रखरखाव

प्रथम पसंद मुझे लगता है mnesia है, लेकिन मैं इस पर कोई experence है। क्या यह मेरी आवश्यकता को पूरा करता है? मैं किस प्रदर्शन की अपेक्षा कर सकता हूं?

एक और विकल्प memcached है - लेकिन मुझे डर है कि प्रदर्शन मैनेशिया से कम है क्योंकि अतिरिक्त सीरियलाइजेशन/deserialization प्रदर्शन किया जाता है क्योंकि memcached डिमन एक और ओएस प्रक्रिया से है।

कोई भी सुझाव मदद है :)

उत्तर

10

हां। 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 को शक्ति देता है (जो आपको बताता है कि मैनेशिया कितना अच्छा हो सकता है)।

एक और बात यह है कि, आपको कुछ पढ़ना और लिखना चाहिए जब तक आप इसके साथ सहज न हों।

+0

आपके विस्तृत सुझाव के लिए धन्यवाद। मैं केंद्रीकृत कैश सिस्टम के बजाय किसी प्रकार का स्थानीय इन-मेमोरी कैश समाधान पसंद करता हूं। केंद्रीकृत कैश सिस्टम का मतलब नेटवर्किंग संचार विलंब होता है, और ऑब्जेक्ट को क्रमबद्ध/संग्रहीत करने के लिए अतिरिक्त बाइनरी या स्ट्रिंग से ऑब्जेक्ट को deserialize करने के लिए अतिरिक्त लागत होती है। मेरी स्थिति में, मेरे पास कई छोटे कैश आइटम हैं, और एक HTTP अनुरोध के भीतर, मैं एक सौ आइटम तक पूछ सकता हूं लेकिन बैच में नहीं। उस स्थिति में, एक केंद्रीकृत कैश सिस्टम मेरे लिए उपयुक्त नहीं लगता है। क्या मैनेसिया के पास अन्य मशीनों से कैश का अनुरोध करने से रोकने के लिए किसी प्रकार का स्थानीय कैश होता है? –

+0

हां। यदि प्रत्येक नोड में एक ही डेटाबेस की एक मैनेशिया कॉपी है, तो स्थिरता क्लस्टर-व्यापी होगी। हमेशा। किसी भी समय, आप किसी क्लस्टर नोड से जो भी पढ़ते हैं वह वही होगा जहां। लेकिन, यह नेटवर्क उपलब्धता पर धारणा है, और वितरित प्रणाली में भाग लेने वाले सभी नोड्स पर मैनेसिया की उपलब्धता है। –

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