Cache stampede
कैश भगदड़ एक प्रकार की कैस्केडिंग विफलता है जो तब हो सकती है जब कैशिंग तंत्र के साथ बड़े पैमाने पर समानांतर कंप्यूटिंग सिस्टम बहुत अधिक भार के तहत आते हैं। इस व्यवहार को कभी-कभी डॉग-पाइलिंग भी कहा जाता है। यह समझने के लिए कि कैश भगदड़ कैसे होती है, एक ऐसे वेब सर्वर पर विचार करें जो सिस्टम लोड को आसान बनाने के लिए कुछ समय के लिए कैश प्रस्तुत किए गए पृष्ठों के लिए मेमकचेड का उपयोग करता है। एकल यू. आर. एल. के लिए विशेष रूप से उच्च भार के तहत, सिस्टम तब तक उत्तरदायी रहता है जब तक संसाधन कैश रहता है, अनुरोधों को कैश की गई प्रति तक पहुँचकर संभाला जाता है। यह महंगे रेंडरिंग ऑपरेशन को कम करता है। कम भार के तहत, कैश चूक के परिणामस्वरूप रेंडरिंग ऑपरेशन की एकल पुनः गणना होती है। प्रणाली पहले की तरह जारी रहेगी, जिसमें उच्च कैश हिट दर के कारण औसत भार बहुत कम रखा जाएगा। हालांकि, बहुत भारी भार के तहत, जब उस पृष्ठ के कैश किए गए संस्करण की अवधि समाप्त हो जाती है, तो सर्वर फार्म में पर्याप्त समरूपता हो सकती है कि निष्पादन के कई धागे सभी उस पृष्ठ की सामग्री को एक साथ प्रस्तुत करने का प्रयास करेंगे। व्यवस्थित रूप से, समवर्ती सर्वरों में से कोई भी यह नहीं जानता कि अन्य एक ही समय में समान प्रतिपादन कर रहे हैं। यदि पर्याप्त रूप से अधिक भार मौजूद है, तो यह अपने आप में समाप्त हो रहे साझा संसाधनों के माध्यम से प्रणाली की भीड़ को नष्ट करने के लिए पर्याप्त हो सकता है। भीड़भाड़ के पतन के परिणामस्वरूप पृष्ठ को पूरी तरह से फिर से प्रस्तुत और फिर से कैश किए जाने से रोका जा सकता है, क्योंकि ऐसा करने का हर प्रयास समय पर समाप्त हो जाता है। इस प्रकार, कैश भगदड़ कैश हिट दर को शून्य तक कम कर देती है और प्रणाली को लगातार भीड़भाड़ के पतन में रखती है क्योंकि यह तब तक संसाधन को पुनर्जीवित करने का प्रयास करती है जब तक कि भार बहुत भारी रहता है। एक ठोस उदाहरण देने के लिए, मान लीजिए कि विचाराधीन पृष्ठ को प्रस्तुत करने में 3 सेकंड लगते हैं और हमारे पास प्रति सेकंड 10 अनुरोधों का यातायात है। फिर, जब कैश किए गए पृष्ठ की अवधि समाप्त हो जाती है, तो हमारे पास 30 प्रक्रियाएँ होती हैं जो एक साथ पृष्ठ के प्रतिपादन की पुनः गणना करती हैं और प्रस्तुत किए गए पृष्ठ के साथ कैश को अद्यतन करती हैं। विशिष्ट कैश उपयोग नीचे किसी वस्तु के लिए एक विशिष्ट कैश उपयोग पैटर्न है जिसे समय की प्रत्येक इकाई को अद्यतन करने की आवश्यकता होती हैः फ़ंक्शन लाने (कुंजी, टी. टी. एल.) {मान-कैश _ पढ़ने (कुंजी) यदि (! मान) {मान-पुनर्संकलन _ मूल्य () कैश _ लिखने (कुंजी, मूल्य, टी. टी. एल.)} वापसी मूल्य} यदि फ़ंक्शन में लंबा समय लगता है और कुंजी को बार-बार एक्सेस किया जाता है, तो कई प्रक्रियाएं एक साथ कैश मूल्य की समाप्ति पर कॉल करेंगी। विशिष्ट वेब अनुप्रयोगों में, कार्य एक डेटाबेस से पूछताछ कर सकता है, अन्य सेवाओं तक पहुँच सकता है, या कुछ जटिल संचालन कर सकता है (यही कारण है कि इस विशेष गणना को पहले स्थान पर कैश किया जा रहा है)। जब अनुरोध दर अधिक होती है, तो डेटाबेस (या कोई अन्य साझा संसाधन) अनुरोधों/प्रश्नों के अधिभार से पीड़ित होगा, जो बदले में प्रणाली के पतन का कारण बन सकता है। कैश भगदड़ शमन कैश भगदड़ को कम करने के लिए कई तरीकों का प्रस्ताव किया गया है (जिसे डॉगपाइल रोकथाम के रूप में भी जाना जाता है)। इन्हें मोटे तौर पर 3 मुख्य श्रेणियों में बांटा जा सकता है। लॉकिंग एक ही मूल्य के कई एक साथ पुनः संगणनों को रोकने के लिए, एक कैश चूकने पर एक प्रक्रिया उस कैश कुंजी के लिए लॉक प्राप्त करने का प्रयास करेगी और इसे केवल तभी पुनः गणना करेगी जब वह इसे प्राप्त करेगी। जब ताला प्राप्त नहीं किया जाता है तो मामले के लिए अलग-अलग कार्यान्वयन विकल्प होते हैंः तब तक प्रतीक्षा करें जब तक कि मूल्य की पुनः गणना नहीं की जाती है, एक "नहीं मिला" वापस करें और ग्राहक को मूल्य की अनुपस्थिति को ठीक से संभालने के लिए कहें, कैश में एक बासी वस्तु रखें जब तक कि नया मूल्य फिर से गणना की जाती है यदि ठीक से लागू किया जाता है, तो ताला लगाना भगदड़ को पूरी तरह से रोक सकता है, लेकिन ताला लगाने के तंत्र के लिए एक अतिरिक्त लेखन की आवश्यकता होती है। लेखन की संख्या को दोगुना करने के अलावा, मुख्य कमी लॉकिंग तंत्र का सही कार्यान्वयन है जो लॉक प्राप्त करने की प्रक्रिया की विफलता, लॉक के लिए समय-से-जीवन की ट्यूनिंग, दौड़-शर्तों आदि सहित किनारे के मामलों का भी ध्यान रखता है। बाहरी पुनः संगणना यह समाधान कैश मूल्य के पुनः संगणना को इसकी आवश्यकता वाली प्रक्रियाओं से बाहरी प्रक्रिया में ले जाता है। बाहरी प्रक्रिया के पुनः संगणना को विभिन्न तरीकों से शुरू किया जा सकता हैः जब कैश मूल्य समय-समय पर अपनी समाप्ति के करीब पहुंचता है जब मूल्य की आवश्यकता वाली प्रक्रिया का सामना कैश चूक से होता है तो इस दृष्टिकोण के लिए एक और गतिशील भाग-बाहरी प्रक्रिया-की आवश्यकता होती है जिसे बनाए रखने और निगरानी करने की आवश्यकता होती है। इसके अलावा, इस समाधान के लिए अप्राकृतिक कोड पृथक्करण/दोहराव की आवश्यकता होती है और यह ज्यादातर स्थिर कैश कुंजियों के लिए उपयुक्त है (यानी, गतिशील रूप से उत्पन्न नहीं होता है, जैसा कि एक आईडी द्वारा अनुक्रमित कुंजियों के मामले में होता है)। संभावित जल्दी समाप्ति इस दृष्टिकोण के साथ, प्रत्येक प्रक्रिया एक स्वतंत्र संभावित निर्णय लेकर अपनी समाप्ति से पहले कैश मूल्य की पुनः गणना कर सकती है, जहां जैसे-जैसे हम मूल्य की समाप्ति के करीब पहुंचते हैं, प्रारंभिक पुनः संगणना करने की संभावना बढ़ जाती है। चूंकि संभावित निर्णय प्रत्येक प्रक्रिया द्वारा स्वतंत्र रूप से किया जाता है, इसलिए भगदड़ के प्रभाव को कम किया जाता है क्योंकि कम प्रक्रियाएं एक ही समय में समाप्त हो जाएंगी। एक घातीय वितरण के आधार पर निम्नलिखित कार्यान्वयन को भगदड़ को रोकने में इसकी प्रभावशीलता और जल्दी गणना कैसे हो सकती है, के संदर्भ में इष्टतम दिखाया गया है। फ़ंक्शन x-fetch (की, टी. टी. एल., बीटा = 1) {मान, डेल्टा, एक्सपायरी-कैश _ रीड (की) यदि (! मान। (समय ()-डेल्टा * बीटा * लॉग (रैंड (0,1))) ≤ समाप्ति) {प्रारंभ-समय () मान-पुनर्संकलन-मूल्य () डेल्टा-समय ()-कैश _ राइट (की, (मान, डेल्टा), टी. टी. एल.) रिटर्न मान शुरू करें} पैरामीटर को 1 से अधिक मूल्य पर सेट किया जा सकता है ताकि पहले की गणनाओं का समर्थन किया जा सके और भगदड़ को और कम किया जा सके लेकिन लेखक दिखाते हैं कि सेटिंग = 1 व्यवहार में अच्छी तरह से काम करता है। चर मूल्य की पुनः गणना करने के समय का प्रतिनिधित्व करता है और इसका उपयोग संभाव्यता वितरण को उचित रूप से मापने के लिए किया जाता है। इस दृष्टिकोण को लागू करना सरल है और यातायात दर बढ़ने पर स्वचालित रूप से प्रारंभिक गणना का समर्थन करके कैश भगदड़ को प्रभावी ढंग से कम करता है। एक कमी यह है कि यह कैश में अधिक मेमोरी लेता है क्योंकि हमें कैश आइटम के साथ मूल्य डेल्टा को बंडल करने की आवश्यकता होती है-जब कैशिंग प्रणाली कुंजी समाप्ति समय की पुनर्प्राप्ति का समर्थन नहीं करती है, तो हमें बंडल में (यानी,) को भी संग्रहीत करने की आवश्यकता होती है। संदर्भ बाहरी लिंक कैश भगदड़ को कम करना, जोशुआ थिजसेन, 2010 विशिष्ट पर्ल कैश उपयोग के लिए समस्याएं और समाधान, जोनाथन स्वार्ट्ज, 2008 इंजीनियरिंग विफलताएं समानांतर कंप्यूटिंग कंप्यूटर अनुकूलन कैश (कंप्यूटिंग)