- Redis टेक इंडस्ट्री में सबसे सकारात्मक प्रतिष्ठा पाने वाली तकनीकों में से एक है
- यह बहुत अच्छी तरह डिज़ाइन की गई बेहतरीन तकनीक है और इसमें अपने आप में कोई खामी नहीं है, लेकिन यह हमेशा ज़रूरी नहीं होती
- 10+ सालों में 3 कंपनियों में एक ही पैटर्न देखा गया:
- समस्या आई और Redis उपयुक्त लगा, लेकिन वास्तव में उसने स्थिति में सुधार नहीं किया या मूल समस्या का समाधान नहीं किया
- उसने बस जटिलता के लिए जटिलता जोड़ दी
पहला मामला: Tantan का अनुभव
- Tantan चीन का दूसरा सबसे बड़ा डेटिंग ऐप है, और PostgreSQL आधारित 50~100 हाई-परफॉर्मेंस डेटाबेस सर्वर चलाता है
- हर सर्वर user ID के आधार पर sharding किया गया है, इसलिए किसी विशेष user का डेटा सिर्फ एक सर्वर में ही संग्रहीत होता है
- समस्या की स्थिति
- 'swipe' की गिनती को स्टोर करना और तेज़ी से अपडेट करना ज़रूरी था
- शुरुआत में इसे Redis में स्टोर करना उपयुक्त माना गया
- लगा कि कुछ हाई-परफॉर्मेंस Redis सर्वर ही पर्याप्त होंगे, इसलिए सेटअप शुरू किया गया
- पुनर्विचार और समाधान
- टीम में Redis की जगह सीधे PostgreSQL में स्टोर करने के विकल्प पर चर्चा हुई
- PostgreSQL सर्वरों पर लोड पहले से ही ऊँचा था, इसलिए अतिरिक्त लोड बहुत कम रहने की उम्मीद थी
- PostgreSQL में स्टोर करने के बाद भी परफॉर्मेंस में कोई गिरावट नहीं आई, और Redis अपनाना अनावश्यक था
दूसरा मामला: Bannerflow का अनुभव
- पृष्ठभूमि
- Bannerflow विज्ञापन निर्माण और प्रकाशन प्लेटफ़ॉर्म है
- एक नई microservice में Facebook जैसे social network पर विज्ञापन प्रकाशित करने के समर्थन के लिए Redis अपनाने का निर्णय लिया गया
- समस्या की स्थिति
- Tantan की तुलना में लोड काफ़ी कम था, इसलिए Redis की ज़रूरत थी भी या नहीं, यह स्पष्ट नहीं था
- शुरुआती डेवलपर के जाने के बाद Redis अपनाने की वजह साफ़ तौर पर समझाने वाला कोई नहीं था
- परिणाम
- लोड कम होने के कारण Redis की वास्तव में ज़रूरत नहीं थी
- लंबे समय में Redis को हटाना सबसे अच्छा विकल्प है, इस निष्कर्ष पर पहुँचा गया
तीसरा मामला: MAJORITY का अनुभव
- पृष्ठभूमि
- MAJORITY एक fintech कंपनी है, जिसने बाहरी API कॉल के परिणाम cache करने के लिए Redis अपनाया
- Redis को location lookup डेटा cache करके प्रोसेसिंग स्पीड बढ़ाने और लागत घटाने के लिए लाया गया
- समस्या की स्थिति
- वही डेटा DB (Azure SQL) में भी स्टोर था
- Redis कॉल की जगह DB कॉल करने पर भी लोड में लगभग कोई वृद्धि नहीं होने की उम्मीद थी
- lock प्रोसेसिंग की ज़रूरत के कारण Redis को बनाए रखना चाहा गया, लेकिन Azure SQL इसे पर्याप्त रूप से संभाल सकता था
- परिणाम
- इस निष्कर्ष पर पहुँचा गया कि Redis अपनाना अनावश्यक था
- Redis की जगह Azure SQL उपयोग करने की योजना बनाई गई
निष्कर्ष
- ये तीनों मामले अलग-अलग डोमेन, tech stack और लोड स्थितियों में हुए
- समानता यह थी कि Redis अनावश्यक रूप से अपनाया गया था
- Redis अपनाने से पहले वास्तविक आवश्यकता और परफॉर्मेंस लाभ पर पर्याप्त विचार करना चाहिए
- Dan McKinley के 'Choose Boring Technology' व्याख्यान की सिफारिश
5 टिप्पणियां
Redis का उपयोग करना है या नहीं, इससे अलग domain और persistence के बीच एक caching layer रखना (जिसका basic implementation bypass हो) बिल्कुल भी over-engineering नहीं है। Logging, fake data, debugging, profiling, और शायद असली caching भी…
+1 मैं भी सहमत हूँ। सिर्फ़ एक layer जोड़ने से भी
leewayबनती है, और कई तरह की चीज़ों को सुलझाने के लिए जगह मिल जाती है।ऐसा लगता है कि बात Redis में समस्या होने की नहीं है, बल्कि इस दृष्टिकोण की है कि जब केवल DB से काम चल सकता है, तो अतिरिक्त component जोड़कर management burden क्यों बढ़ाया जाए।
यह काफ़ी संक्षेप में समझाता है, इसलिए इसे बस इस रूप में लेना अच्छा होगा कि इस तरह का नज़रिया भी विचार करने लायक है।
ऐसी स्थितियाँ भी हो सकती हैं जहाँ application logic को simple रखते हुए Redis cache लागू करना बेहतर विकल्प हो,
इसलिए स्थिति के अनुसार चुनना होगा.
टाइटल ने फँसा लिया था। हा हा, सहमत हूँ~~
Hacker News राय
2015 में Uber में काम करते समय, ZIP code आधारित geographic partitioning को hexagon आधारित तरीके में बदलने की कोशिश की गई थी
Redis के overuse पर बहस हुई थी
Redis के उपयोग की संस्कृति उसकी लोकप्रियता की तुलना में विकसित नहीं हुई है
यह Redis बनाम non-Redis का मुद्दा नहीं है, बल्कि ऐसे data के साथ काम करने का मुद्दा है जो अच्छी तरह serialize नहीं होता
software development में अक्सर दूसरे लोगों के तरीके दोहराने की प्रवृत्ति होती है
Redis ही एकमात्र production-ready "data structure server" है
हो सकता है cache की ज़रूरत ही न हो
Redis का API शानदार है, लेकिन operational risk है
Redis के उपयोग की सिफारिश न करने की प्रवृत्ति आश्चर्यजनक है
Redis temporary cache के रूप में ठीक है, लेकिन transaction या distributed store के रूप में कमज़ोर है