2011-04-28 7 views
5

मैं अकसर किये गए सवाल उद्धरण दिए गए उद्घाटन memcached कनेक्शन के साथ काम के लिए एक कुशल समाधान के लिए सुझाव के लिए देख रहा हूँ:memcached पर बहुत अधिक कनेक्शन की रोकथाम (Enyim क्लाइंट)

कुछ भी नहीं याद से आप को रोक रहा है गलती से कई को जोड़ने बार। यदि आप ऑब्जेक्ट के हिस्से के रूप में एक मेमकैड क्लाइंट ऑब्जेक्ट को तुरंत चालू करने की कोशिश कर रहे हैं, तो आश्चर्यचकित न हों जब एक ऑर्डर में 1,000 ऑब्जेक्ट्स 1,000 समांतर कनेक्शन बनाएं। सूची पर हॉपिंग से पहले इस तरह कीड़े के लिए ध्यान से देखो।

यह भी देखें: Initializing a Memcached Client और Managing Connection Objects

मैं हमारे कैशिंग विधानसभा में एक सिंगलटन का उपयोग कर, memcached ग्राहक प्रदान करने के लिए, हालांकि मुझे यकीन है कि वहाँ बेहतर तरीकों ताले परिचय के रूप में (अनावश्यक?) भूमि के ऊपर होना चाहिए हूँ पर विचार किया।

मैं ग्राहक के उपयोग के लिए पैटर्न पर स्पष्ट कर रहा हूँ, मैं क्या पर स्पष्ट नहीं कर रहा हूँ कैसे scalability और प्रदर्शन के संबंध में प्रभावी ढंग से ग्राहक का प्रयोग है। अन्य लोग memcached ग्राहकों का उपयोग करने के साथ कैसे सौदा करते हैं?

वहाँ आप के लिए यह 50 का एक उपहार है।

उत्तर

3

हमारे पास एक रेडिस क्लाइंट के साथ एक समान परिदृश्य था, और मूल रूप से हमारा समाधान एक सामान्य एकल उदाहरण था कि हमने lock के माध्यम से पहुंच को सिंक्रनाइज़ किया। यह ठीक था, लेकिन विलंबता और अवरोध से बचने के लिए हमने अंततः एक थ्रेड-सुरक्षित पाइपलाइन क्लाइंट लिखा, जो किसी भी अवरोध के बिना समवर्ती उपयोग की अनुमति देता है। मैं पुरुषों को प्रोटोकॉल से पीड़ित लोगों के बारे में ज्यादा नहीं जानता, लेकिन मुझे आश्चर्य है कि कुछ ऐसा ही लागू हो सकता है। मैं वास्तव में अगर मैं BookSleeve (हमारे कस्टम ओएसएस redis ग्राहक) को यह जोड़ सकता है अगर आप थोड़ी देर प्रतीक्षा कर सकते हैं देखने के लिए जांच कर रही कोशिश करने के लिए परीक्षा रहा हूँ।

लेकिन हम आम तौर पर सिंक्रनाइज़ किए गए साझा उदाहरण का उपयोग करने में सक्षम थे (एक सिंगलटन के समान ही चीज़, जो आप शुद्ध हैं) के आधार पर।


the FAQ पर glancing, पाइप लाइन वास्तव में एक संभावना है; और मैं पूरी तरह से booksleeve के अंदर एक async/pipelined memcached ग्राहक लिखने के विकल्प के लिए खुला रहा हूँ। अधिकांश कच्चे आईओ/मल्टीप्लेक्सिंग रेडिस के साथ काफी आम होगी। अन्य चालें आप विचार कर सकते हैं उपयोग कर रहा है get_multi आदि के बजाय अलग हो जाता है, जहां संभव - मैं, अपने वर्तमान ग्राहक इस का समर्थन करता है कि क्या पता नहीं है, हालांकि (इंद्रकुमार देखा नहीं किया है)।

लेकिन: यह कैसे Redis के लिए memcached विरोधाभासों मैं नहीं जानता, लेकिन हमारे मामले में , एक pipelined/मल्टिप्लेक्स API में स्विच करने का मतलब हम जरूरत नहीं थी बहुत (कई कनेक्शन) पूलिंग का उपयोग करने के लिए - एक एकल कनेक्शन (ठीक से पाइपलाइन) एक एकल नोड से समवर्ती उपयोग के बहुत से समर्थन करने में सक्षम है।

+0

मुझे लगता है कि डेटा को क्लाइंट से सर्वर पर बाइनरी प्रारूप में स्थानांतरित किया जाता है। सर्वर प्रत्येक memcached क्लाइंट इंस्टेंटेशन से कनेक्शन की एक्स संख्या खोलने लगता है। यह मुझे आश्चर्यचकित करता है कि क्या आप एक सेमफोर की तरह कुछ उपयोग कर सकते हैं ताकि x संख्याओं को थ्रेड को एक बार में एक्सेस किया जा सके? –

+0

@MrShoubs - मुझे प्रोटोकॉल spec को पढ़ना होगा :) –

+0

@MrShoubs अपडेट किया गया जवाब –

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