2016-07-29 10 views
5

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

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

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

यह विश्वसनीय संग्रह में ओवरहेड को कम करने के लिए है।

भरोसेमंद संग्रह कैश के रूप में कार्य करता है।

क्या ऊपर उल्लेखित मेरे समाधान को लागू करने का सबसे अच्छा अभ्यास है? क्या रिलायबल कोलेक्शन का आकलन करना अच्छा अभ्यास है?

उत्तर

3

यदि विश्वसनीय शब्दकोश कैश के रूप में कार्य करने के लिए है, तो मुझे वास्तव में अज़ूर स्टोरेज में अप्रयुक्त वस्तुओं को ऑफ़लोड करने का बिंदु नहीं दिखाई देता है। यदि यह कैश है, तो मैं अप्रयुक्त वस्तुओं को शुद्ध करने की अपेक्षा करता हूं, और कॉलर को कैश से समाप्त होने वाली किसी भी चीज़ के लिए सत्य के स्रोत पर वापस जाने की आवश्यकता होगी। लेकिन ऐसा लगता है जैसे आप विश्वसनीय शब्दकोश को सत्य का अद्यतित स्रोत होना चाहते हैं। इसलिए मुझे लगता है कि आपको पहले यह तय करना होगा कि क्या आप वास्तव में कैश बना रहे हैं, या सच्चे डेटा स्टोर का स्रोत है जो पृष्ठ डेटा को स्मृति से बाहर कर सकता है। यह बाद वाले की तरह लगता है।

किसी भी मामले में, जैसा कि आपने वर्णन किया है, यह किया जा सकता है, लेकिन उन्हें लगातार सिंक में रखना आसान नहीं होगा क्योंकि आपके पास एक विश्वसनीय शब्दकोश और बाहरी स्टोर में लेनदेन नहीं है।

संग्रह का आकलन करना ठीक है लेकिन यह एक महंगा ऑपरेशन है, इसलिए मैं इसे गर्म पथ में डेटा की बड़ी मात्रा में करने की अनुशंसा नहीं करता, जैसे उपयोगकर्ता अनुरोध पथ। समय-समय पर निर्धारित समय में करना ठीक है।

क्या आपको बाहरी संग्रहण में डेटा को ऑफ़लोड करने की आवश्यकता है? क्या आप स्थानीय डिस्क पर ऑफलोड कर सकते हैं? विश्वसनीय संग्रह जल्द ही राज्य को डिस्क पर ऑफलोडिंग कर देगा।

+0

मुझे विश्वसनीय संग्रह से डेटा को ऑफ़लोड करने की आवश्यकता है। यदि स्थानीय डिस्क पर ऑफ़लोड करना उपलब्ध है तो यह बहुत अच्छा होगा .... धन्यवाद। –

+2

यह प्रगति पर है। सबसे हालिया रिलीज (5.1) में, डेटा हमेशा स्मृति और डिस्क पर होता है। भविष्य में रिलीज में, केवल गर्म डेटा मेमोरी में होगा, और सभी डेटा डिस्क पर भी होंगे। –

+0

मैं इसके लिए तत्पर हूं - क्या यह देखने का कोई तरीका होगा कि स्मृति में कितना भी है? –

0

मैं एक अभिनेता का उपयोग करूंगा। प्रत्येक आइटम को अपने स्वयं के अभिनेता दें और वहां राज्य को स्टोर करें। जब अभिनेता कचरा इकट्ठा होता है, तो आप कहीं और राज्य को बचा सकते हैं, या बस अभिनेता टाइमर पर ऐसा कर सकते हैं।

ऐसा करने का मतलब है कि आपको बहुत से उदाहरणों को प्रबंधित करने के लिए बहुत से अभिनेता कोड को दोहराना नहीं होगा।

चेतावनी

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

+3

अभिनेता आमतौर पर कैश के लिए एक अच्छा विचार नहीं हैं क्योंकि प्रत्येक अभिनेता उदाहरण एकल-थ्रेडेड पहुंच को लागू करता है। इसका मतलब है कि एकाधिक पाठक एक ही डेटा तक पहुंच नहीं सकते हैं जो एक साथ खराब थ्रूपुट का कारण बनता है। –

+0

ग्रेट प्वाइंट! मुझे लगता है कि इसके लिए चेतावनी यह है कि कैश का उपयोगकर्ता उसी तरह विभाजित होता है जैसे कलाकारों को विभाजित किया जाता है। –

+2

हाँ, यह विशेष मामलों में _can_ काम करता है जहां आपके समवर्ती पढ़ने नहीं होते हैं, जैसे कि प्रत्येक अभिनेता उदाहरण एक उपयोगकर्ता का प्रतिनिधित्व करता है, जहां ग्राहक और अभिनेता के उदाहरण 1: 1 मैप किए जाते हैं। लेकिन एक सामान्य उद्देश्य कैश के रूप में, यह एक अच्छा विचार नहीं है। –

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