🎧 Listen to this article: English
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
जब किसी वेबसाइट पर भारी ट्रैफ़िक आता है, तो इससे परफ़ॉर्मेंस संबंधी समस्याएँ हो सकती हैं, खासकर यदि वह डेटा पुनर्प्राप्ति के लिए डेटाबेस पर निर्भर करती है। हम कई अनुप्रयोगों द्वारा सामना की जाने वाली एक आम समस्या के समाधान पर चर्चा कर रहे हैं: डेटाबेस पर अत्यधिक दबाव डाले बिना कैश समाप्ति को कैसे संभालें।
समस्या को समझना
वेबसाइट podbor-minuta.ru पर, कुछ डेटाबेस क्वेरीज़ काफी भारी हैं। गति बढ़ाने के लिए, वे परिणामों को कैश में संग्रहीत करते हैं। उदाहरण के लिए, वे लिस्टिंग पेजों के लिए अपार्टमेंट सूचियों और समग्र संख्याओं को कैश करते हैं। जब कैश मान्य होता है, तो सब कुछ सुचारू रूप से चलता है। हालाँकि, समस्या तब शुरू होती है जब कैश समाप्त हो जाता है।
एक दिन, उच्च लोड के दौरान, साइट को एक गंभीर समस्या का सामना करना पड़ा। 500 प्रतिक्रियाओं (responses) का एक बैच टाइम आउट हो गया। भले ही डेटाबेस अभी भी चल रहा था, क्वेरीज़ कतारबद्ध होने लगीं। यह स्थिति इसलिए उत्पन्न हुई क्योंकि कई अनुरोध एक ही समय में एक ही डेटा तक पहुँचने का प्रयास कर रहे थे, जिससे एक बाधा (bottleneck) उत्पन्न हो गई।
Cache Stampede क्या है?
प्रारंभिक कैशिंग लॉजिक सीधा था: यदि कोई मान कैश में नहीं है, तो एप्लिकेशन उसकी गणना करने के लिए डेटाबेस से क्वेरी करता है, फिर उस मान को वापस कैश में संग्रहीत करता है। यह एकल अनुरोध के लिए ठीक काम करता है। लेकिन कल्पना कीजिए कि यदि कैश समाप्त हो जाता है और अचानक, उसी डेटा के लिए दो सौ अनुरोध आते हैं। प्रत्येक अनुरोध देखता है कि कैश खाली है और प्रत्येक अनुरोध एक साथ डेटाबेस से क्वेरी करता है। इस परिदृश्य को एक के रूप में जाना जाता है कैश स्टैम्पीड (cache stampede).
कैश स्टैम्पीड के दौरान, डेटाबेस समान भारी क्वेरीज़ से भर जाता है, जिससे कनेक्शन सीमा समाप्त हो जाती है। परिणामस्वरूप, टाइमआउट के कारण कुछ अनुरोध छूट (drop) जाते हैं।
Single-Flight Caching लागू करना
इस समस्या को हल करने के लिए, टीम ने एक तकनीक लागू की जिसे कहा जाता है सिंगल-फ़्लाइट कैशिंग (single-flight caching)। यह विधि सुनिश्चित करती है कि यदि किसी विशिष्ट कुंजी (key) के लिए गणना पहले से चल रही है, तो उसी कुंजी के लिए कोई भी अन्य अनुरोध अपनी स्वयं की डेटाबेस क्वेरी शुरू करने के बजाय परिणाम की प्रतीक्षा करेगा। यहाँ बताया गया है कि यह कैसे काम करता है:
चरण 1: कैश की जाँच करें
सबसे पहले, एप्लिकेशन जाँचता है कि मान पहले से कैश में है या नहीं। यदि यह है, तो यह उस मान को तुरंत लौटा देता है।
चरण 2: कैश मिस (Cache Misses) को संभालें
यदि मान कैश में नहीं है, तो यह जाँचता है कि क्या उस कुंजी के लिए कोई गणना पहले से चल रही है। यदि ऐसा है, तो एप्लिकेशन उस गणना के समाप्त होने की प्रतीक्षा करेगा और परिणाम लौटाएगा।
चरण 3: एक प्रॉमिस (Promise) बनाएँ
यदि कोई गणना प्रगति पर नहीं है, तो एप्लिकेशन एक गणना शुरू करता है। यह गणना के लिए एक प्रॉमिस बनाता है और इसे कुंजी का उपयोग करके एक मैप में संग्रहीत करता है। इस तरह, अन्य अनुरोध एक नई डेटाबेस क्वेरी शुरू करने के बजाय उसी प्रॉमिस तक पहुँच सकते हैं।
यह कैसे काम करता है, इसका एक सरल कोड उदाहरण यहाँ दिया गया है:
const inFlight = new Map<string, Promise<unknown>>();
async function getOrSet<T>(key: string, compute: () => Promise<T>): Promise<T> {
const cached = cache.get(key);
if (cached !== undefined) return cached as T;
const running = inFlight.get(key);
if (running) return running as Promise<T>;
const promise = compute().then((value) => {
cache.set(key, value);
return value;
}).finally(() => {
inFlight.delete(key);
});
inFlight.set(key, promise);
return promise;
}
Single-Flight Caching के लाभ
Single-flight caching के क्रियान्वयन से कई लाभ हुए:
- डेटाबेस पर कम लोड: दो सौ समान क्वेरीज़ के बजाय, केवल एक क्वेरी डेटाबेस पर जाती है, जिससे लोड में काफी कमी आती है।
- बेहतर परफ़ॉर्मेंस: कनेक्शन पूल अब अनावश्यक रूप से समाप्त नहीं होता है, जिससे उच्च ट्रैफ़िक के दौरान अधिक सुचारू परफ़ॉर्मेंस मिलती है।
- दक्षता: कैश-हिट पाथ तेज़ बना रहता है, उन अनुरोधों के लिए कोई अतिरिक्त ओवरहेड नहीं होता जो कैश में अपना डेटा पाते हैं।
निष्कर्ष
Single-flight caching पीक समय के दौरान डेटाबेस लोड को प्रबंधित करने के लिए एक प्रभावी रणनीति है, विशेष रूप से तब जब कैश समाप्ति होती है। यह सुनिश्चित करके कि एक समय में केवल एक ही अनुरोध भारी क्वेरी को प्रोसेस करे, एप्लिकेशन परफ़ॉर्मेंस बनाए रख सकते हैं और सर्वर क्रैश को रोक सकते हैं।
लाभ
- कैश समाप्ति के दौरान डेटाबेस ओवरलोड को रोकता है।
- कैश किए गए डेटा के लिए तेज़ प्रतिक्रिया समय बनाए रखता है।
- डुप्लिकेट डेटाबेस क्वेरीज़ की संख्या को कम करता है।
कमियाँ
- इन-फ़्लाइट (in-flight) अनुरोधों को प्रबंधित करने के लिए अतिरिक्त लॉजिक की आवश्यकता होती है।
- सख्त वातावरण के लिए एक साझा लॉक (shared lock) की आवश्यकता हो सकती है, जिससे जटिलता बढ़ जाती है।
सावधानी
यह लेख केवल शैक्षणिक उद्देश्यों के लिए है। यदि आप कोई कैशिंग रणनीति लागू करते हैं, तो प्लेसहोल्डर मानों को अपने वास्तविक डेटा से बदलना सुनिश्चित करें और उन पर निर्भर रहने से पहले मूल स्रोतों से दावों की पुष्टि करें।
अक्सर पूछे जाने वाले प्रश्न
- Single-flight caching क्या है? — यह एक ऐसी कैशिंग रणनीति है जो एक समय में एक विशिष्ट कुंजी के लिए डेटा लाने के लिए केवल एक अनुरोध की अनुमति देती है, जिससे कई डेटाबेस क्वेरीज़ को रोका जा सकता है।
- Cache stampede क्या है? — एक ऐसी स्थिति जहाँ कैश मिस होने के बाद एक ही डेटा के लिए कई अनुरोध एक साथ डेटाबेस पर पहुँचते हैं, जिससे डेटाबेस अत्यधिक भारित हो जाता है।
- कैशिंग परफ़ॉर्मेंस को कैसे बेहतर बनाती है? — कैशिंग अक्सर एक्सेस किए जाने वाले डेटा को मेमोरी में स्टोर करती है, जिससे डेटाबेस से क्वेरी करने की तुलना में तेज़ डेटा पुनर्प्राप्ति की अनुमति मिलती है।
- जब कैश समाप्त हो जाता है तो क्या होता है? — जब कैश समाप्त हो जाता है, तो उसी डेटा के लिए अनुरोध डेटाबेस में बाढ़ की तरह आ सकते हैं, जिससे ठीक से प्रबंधित न होने पर परफ़ॉर्मेंस संबंधी समस्याएँ हो सकती हैं।
- क्या single-flight caching का उपयोग एकाधिक सर्वरों के साथ किया जा सकता है? — हाँ, लेकिन विभिन्न सर्वरों पर अनुरोधों को प्रभावी ढंग से प्रबंधित करने के लिए इसे shared locks जैसे अतिरिक्त तंत्रों की आवश्यकता होती है।
- कैशिंग के क्या लाभ हैं? — कैशिंग डेटाबेस लोड को कम करती है, डेटा पुनर्प्राप्ति को तेज़ करती है, और एप्लिकेशन के समग्र परफ़ॉर्मेंस में सुधार करती है।
टैग
#caching #database #performance #webdev #architecture #softwaredevelopment #programming #tech
API Security Testing Checklist
A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.