बड़े पैमाने के वातावरण में Redis cache की performance बढ़ाना
(meetup.toast.com)Redis ऑनलाइन सेवाओं में caching के लिए व्यापक रूप से इस्तेमाल होने वाला in-memory database है। लेकिन अगर इसे गलत तरीके से इस्तेमाल किया जाए, तो अनपेक्षित समस्याएँ पैदा हो सकती हैं या यहाँ तक कि बड़े स्तर की outage भी हो सकती है। हाल ही में मैं संयोग से एक किताबों की दुकान में एक कंपनी की SRE टीम में काम करने वाले इंजीनियर से मिला। बातचीत के दौरान उन्होंने यहाँ तक कहा, “Redis असल में एक necessary evil है. इसे इस सोच के साथ इस्तेमाल करना चाहिए कि कभी न कभी इससे जुड़ी कोई outage ज़रूर होगी।”
संदर्भ - Kakao "Redis, गलत इस्तेमाल करो तो बर्बाद हो जाओगे":
https://zdnet.co.kr/view/?no=20131119174125
संदर्भ - Coupang की error का कारण open source 'Redis DB' था:
http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904
इसी वजह से Redis ऐसी चीज़ है जिसे अच्छी समझ और सावधानी के साथ ही इस्तेमाल करना चाहिए।
भूमिका लंबी हो गई। NHN ने RedisConf 2020 की प्रस्तुति की सामग्री के आधार पर एक दस्तावेज़ पेश किया है, जिसमें बड़े ट्रैफिक वाले वातावरण में Redis को cache के रूप में इस्तेमाल करते समय performance issue पैदा कर सकने वाले 3 बिंदुओं की पहचान की गई है और उनके समाधान समझाए गए हैं।
-
Cache Stampede: cache space सीमित होती है, इसलिए आम तौर पर stored data के लिए expiration time (TTL) सेट किया जाता है। लेकिन यदि उस data पर लगातार read requests आ रही हों और उसी समय cache expiration हो जाए, तो अचानक वे read requests DB पर केंद्रित हो जाती हैं, और फिर वही Redis पर duplicate write requests के रूप में उमड़ पड़ती हैं। इसे Cache Stampede कहा जाता है। इसके समाधान के तौर पर probability distribution पर आधारित algorithm से TTL value को पहले से refresh करना, या debounce (बार-बार दोहराए जाने वाले events में केवल आख़िरी event को execute करना) की अवधारणा लागू करना शामिल है।
-
Hot Keys: जब किसी एक key पर reads केंद्रित हो जाती हैं, तब भी performance गिर सकती है। ऊपर दिए गए लेख में इसके उपाय के रूप में key name के आगे prefix लगाकर कई replicas बनाने, और फिर उन prefix वाले replicas पर reads को random तरीके से distribute करने का तरीका बताया गया है।
-
Compression: बड़े आकार के data को Redis में store करने पर भी performance degradation हो सकती है। इस स्थिति में उपयुक्त compression लागू करने भर से speed और memory usage, दोनों में बड़ा लाभ मिल सकता है। कौन-सा compression method और ratio सही रहेगा, यह स्थिति और environment पर निर्भर करता है, इसलिए इसे लागू करते समय usage environment को reproduce करने वाला benchmark test अनिवार्य है.
1 टिप्पणियां
संदर्भ - ऊपर उल्लेखित probability distribution-आधारित एल्गोरिदम (Probablistic Early Recomputation) का उदाहरण कोड शामिल करने वाला लेख:
https://engineering.linecorp.com/ko/blog/…