7

कहें कि मेरे पास कुछ 3 लोड लोड-संतुलित ईसी 2 सर्वर पर चल रहा है, जो एसडी 3 पर संग्रहीत डेटा के बड़े हिस्से के साथ सरल डीबी से मेटाडेटा को संग्रहीत और पुनर्प्राप्त कर रहा है (सरल डीबी की पूरी 1 केबी सीमा के कारण)। चूंकि एस 3 बहुत अधिक विलंबता है और मैं वैसे भी अनुरोधों का एक टन नहीं बनाना चाहता हूं, मैं जानकारी के लिए एक कैशिंग परत चाहता हूं ... ElastiCache दर्ज करें।ईसी 2 पर एक ऐप ElastiCache उदाहरणों को स्वतः कैसे प्राप्त कर सकता है?

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

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

+0

मुझे शक है यह इस सवाल का जवाब देने के लिए एक महान सौदा मायने रखती है, लेकिन जो कुछ भी मेरे EC2 इसके लायक के लिए ऐप PHP में संभवतः अधिक किया जाएगा। –

+0

मैंने https://forums.aws.amazon.com/thread.jspa?threadID=74852 पर इन पंक्तियों के साथ एक फीचर अनुरोध देखा, इसलिए दुर्भाग्य से ऐसा लगता है कि इसमें आपके कैश एंडपॉइंट्स के साथ कॉन्फ़िगरेशन फ़ाइल है, आप सभी के बारे में है अभी के लिए कर सकते हैं –

उत्तर

0

यदि आपका ऐप वर्जन कंट्रोल से तैनात है (मुझे आशा है कि यह है), तो आप कॉन्फ़िगरेशन फ़ाइल को संपादित करेंगे और एप्लिकेशन को फिर से तैनात करेंगे। मुझे इस दृष्टिकोण के साथ एक बड़ी समस्या नहीं दिख रही है, लेकिन शायद मुझे स्पष्ट याद आ रही है।

मुझे बताएं।

+2

मैं उम्मीद कर रहा था कि कैश क्लस्टर को एप्लिकेशन में पेश करने के लिए एक लोचदार तंत्र था जैसे कि यह एक सर्वर था। किसी विशेष कुंजी के लिए किस अंतराल को हिट करने की चिंता न करें, कैश कॉन्फ़िगरेशन के बारे में चिंता न करें, जब कैश नोड को कताई या बंद कर दें, ऐसा लगता है कि ऐसी चीज अभी तक मौजूद नहीं है। –

+0

यह नहीं करता है। आम तौर पर, एडब्ल्यूएस 'एलिस्टी कैश आपको नोड्स प्रदान करता है। उन नोड्स का उपयोग कैसे किया जाता है (उदाहरण के लिए आप उन सभी को विशाल स्टोर के रूप में उपयोग करते हैं, या आप दर्पण करते हैं, इत्यादि) आप पर निर्भर हैं। यह ठीक है कि कैसे memcache काम करता है। आप शायद अपनी खोज को आवधिक एपीआई कॉल में लपेट सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता। हम इन परिवर्तनों के लिए फिर से तैनात हैं। – Till

+0

मैं इसके चारों ओर विस्तारित जादू नहीं डालूंगा। जैसे सिर्फ एक नोड जोड़ना आम तौर पर एक अच्छा विचार नहीं है या आपका एप्लिकेशन शायद कुछ सौदा कर सकता है। जैसेजब मैं अपने लोचदार कैश क्लस्टर में एक और नोड जोड़ता हूं, तो मुझे कैश क्लस्टर को फिर से बोलने की आवश्यकता होती है। आमतौर पर, इसे कॉन्फ़िगरेशन में जोड़ना आसान होता है, ext/memcache (हम PHP का उपयोग करते हैं) के लिए सेटिंग्स को समायोजित करते हैं और फिर कैश खाली करके और फिर से पॉप्युलेट करने से स्क्रैच से प्रारंभ करते हैं। – Till

0

अमेज़ॅन की लोचदार दर्द Autodiscovery बिल्कुल भयानक है। यह मूल रूप से स्थापित करना असंभव है, जो पागल है क्योंकि यह बहुत आसान होना चाहिए।

मैंने आपके द्वारा चल रहे नोड्स की संख्या के बाद एक लोचदार नोड यूआरएल उत्पन्न करने के लिए PHP में एक साधारण फ़ंक्शन लिखा था। हां, यदि आप नोड्स की संख्या बदलते हैं (या शायद यह मान एक env var में डाल दें) तो आपको अपना कोड अपडेट करना होगा।

यह वही नोड्स एक ही कुंजी के नक्शे:

function get_elasticache_node_url($key, $config_url, $num_nodes) { 
    $node = hexdec(substr(md5($key), 0, 15)) % $num_nodes + 1; 
    $nodestr = str_pad($node, 4, "0", STR_PAD_LEFT); 
    return str_replace('.cfg.','.'.$nodestr.'.',$config_url); 
} 

$num_nodes = 10; 
$config_url = 'cluster-name.xyzxyz.cfg.use1.cache.amazonaws.com'; 

echo get_elasticache_node_url("key1", $config_url, $num_nodes); 
echo get_elasticache_node_url("key2", $config_url, $num_nodes); 

आउटपुट:

cluster-name.xyzxyz.0001.use1.cache.amazonaws.com 
cluster-name.xyzxyz.0004.use1.cache.amazonaws.com