Cache stampede
کیش بھگدڑ ایک قسم کی جھرنوں کی ناکامی ہے جو اس وقت ہو سکتی ہے جب کیشنگ میکانزم کے ساتھ بڑے پیمانے پر متوازی کمپیوٹنگ سسٹم بہت زیادہ بوجھ کے تحت آتے ہیں۔ اس رویے کو بعض اوقات ڈاگ پیلنگ بھی کہا جاتا ہے۔ یہ سمجھنے کے لیے کہ کیش میں بھگدڑ کیسے ہوتی ہے، ایک ایسے ویب سرور پر غور کریں جو سسٹم لوڈ کو آسان بنانے کے لیے کچھ عرصے کے لیے کیش رینڈرڈ پیجز کے لیے میم کیچ کا استعمال کرتا ہے۔ کسی ایک یو آر ایل پر خاص طور پر زیادہ بوجھ کے تحت، سسٹم اس وقت تک ذمہ دار رہتا ہے جب تک کہ ریسورس کیش رہتا ہے، درخواستوں کو کیش شدہ کاپی تک رسائی کے ذریعے سنبھالا جاتا ہے۔ یہ مہنگے رینڈرنگ آپریشن کو کم کرتا ہے۔ کم بوجھ کے تحت، کیش مس کے نتیجے میں رینڈرنگ آپریشن کا واحد دوبارہ حساب ہوتا ہے۔ نظام پہلے کی طرح جاری رہے گا، کیش ہٹ ریٹ زیادہ ہونے کی وجہ سے اوسط بوجھ بہت کم رکھا جائے گا۔ تاہم، بہت زیادہ بوجھ کے تحت، جب اس صفحہ کے کیش شدہ ورژن کی میعاد ختم ہو جاتی ہے، تو سرور فارم میں کافی ہم آہنگی ہو سکتی ہے کہ عمل کے متعدد دھاگے اس صفحے کے مواد کو بیک وقت پیش کرنے کی کوشش کریں گے۔ منظم طریقے سے، مشترکہ سرورز میں سے کوئی بھی نہیں جانتا ہے کہ دوسرے ایک ہی وقت میں ایک ہی انجام دے رہے ہیں۔ اگر کافی زیادہ بوجھ موجود ہے، تو یہ خود ہی مشترکہ وسائل کو ختم کرنے کے ذریعے نظام کی بھیڑ کو ختم کرنے کے لیے کافی ہو سکتا ہے۔ بھیڑ بھاڑ کے خاتمے کے نتیجے میں صفحہ کو مکمل طور پر دوبارہ پیش کرنے اور دوبارہ کیش ہونے سے روکا جاتا ہے، کیونکہ ایسا کرنے کی ہر کوشش بار بار ختم ہو جاتی ہے۔ اس طرح، کیش بھگدڑ کیش ہٹ کی شرح کو صفر تک کم کر دیتی ہے اور نظام کو مسلسل بھیڑ کے خاتمے میں رکھتی ہے کیونکہ یہ اس وقت تک وسائل کو دوبارہ پیدا کرنے کی کوشش کرتی ہے جب تک کہ بوجھ بہت زیادہ رہے۔ ایک ٹھوس مثال دینے کے لیے، فرض کریں کہ زیر غور صفحہ کو پیش کرنے میں 3 سیکنڈ لگتے ہیں اور ہمارے پاس فی سیکنڈ 10 درخواستوں کا ٹریفک ہے۔ پھر، جب کیش شدہ پیج کی میعاد ختم ہو جاتی ہے، تو ہمارے پاس 30 عمل ہوتے ہیں جو بیک وقت پیج کی رینڈرنگ کو دوبارہ گنتے ہیں اور رینڈر شدہ پیج کے ساتھ کیش کو اپ ڈیٹ کرتے ہیں۔ عام کیش کا استعمال ذیل میں کسی آئٹم کے لیے کیش کے استعمال کا ایک عام نمونہ ہے جسے وقت کی ہر اکائی کو اپ ڈیٹ کرنے کی ضرورت ہوتی ہے: فنکشن fetch (کلید، ٹی ٹی ایل) {ویلیو کیش _ ریڈ (کلید) اگر (! ویلیو) {ویلیو کیش _ ویلیو () کیش _ رائٹ (کلید، ویلیو، ٹی ٹی ایل)} ریٹرن ویلیو} اگر فنکشن میں کافی وقت لگتا ہے اور کلید تک کثرت سے رسائی حاصل کی جاتی ہے، تو بہت سے عمل بیک وقت کیش ویلیو کی میعاد ختم ہونے پر کال کریں گے۔ عام ویب ایپلی کیشنز میں، فنکشن ڈیٹا بیس سے استفسار کر سکتا ہے، دوسری خدمات تک رسائی حاصل کر سکتا ہے، یا کچھ پیچیدہ آپریشن انجام دے سکتا ہے (یہی وجہ ہے کہ اس مخصوص کمپیوٹیشن کو پہلی جگہ پر کیش کیا جا رہا ہے)۔ جب درخواست کی شرح زیادہ ہوتی ہے، تو ڈیٹا بیس (یا کوئی دوسرا مشترکہ وسائل) درخواستوں/سوالات کے زیادہ بوجھ کا شکار ہو جائے گا، جو بدلے میں نظام کے خاتمے کا سبب بن سکتا ہے۔ کیش بھگدڑ کو کم کرنے کے لیے کیش بھگدڑ کو کم کرنے کے لیے کئی طریقے تجویز کیے گئے ہیں (جسے ڈاگ پائیل کی روک تھام بھی کہا جاتا ہے)۔ انہیں تقریبا 3 اہم زمروں میں تقسیم کیا جا سکتا ہے۔ لاکنگ ایک ہی قدر کی بیک وقت متعدد دوبارہ گنتی کو روکنے کے لیے، کیش چھوٹ جانے پر ایک عمل اس کیش کلید کے لیے لاک حاصل کرنے کی کوشش کرے گا اور اسے صرف اس صورت میں دوبارہ گنتی کرے گا جب وہ اسے حاصل کرے۔ جب تالا حاصل نہیں کیا جاتا ہے تو اس معاملے کے لیے عمل درآمد کے مختلف اختیارات ہوتے ہیں: اس وقت تک انتظار کریں جب تک کہ قیمت دوبارہ شمار نہ ہو جائے "" نہیں ملا "واپس کریں اور کلائنٹ کو قیمت کی عدم موجودگی کو صحیح طریقے سے سنبھالنے کے لیے کہیں جب تک کہ نئی قیمت دوبارہ شمار نہ کی جائے، استعمال کے لیے کیش میں ایک پرانی چیز رکھیں اگر مناسب طریقے سے نافذ کیا جائے تو لاکنگ بھگدڑ کو مکمل طور پر روک سکتی ہے، لیکن لاکنگ میکانزم کے لیے ایک اضافی تحریر کی ضرورت ہوتی ہے۔ لکھنے والوں کی تعداد کو دوگنا کرنے کے علاوہ، اہم خرابی لاکنگ میکانزم کا درست نفاذ ہے جو لاک حاصل کرنے کے عمل کی ناکامی، لاک کے لیے ٹائم ٹو لائیو کی ٹیوننگ، ریس کی شرائط وغیرہ سمیت ایج کیسوں کا بھی خیال رکھتا ہے۔ بیرونی ریکمپیوٹیشن یہ حل کیش ویلیو کی ریکمپیوٹیشن کو ضرورت کے عمل سے بیرونی عمل میں منتقل کرتا ہے۔ بیرونی عمل کی دوبارہ گنتی کو مختلف طریقوں سے متحرک کیا جا سکتا ہے: جب کیش کی قیمت وقتا فوقتا اس کی میعاد ختم ہونے کے قریب پہنچتی ہے جب کسی عمل کو قیمت کی ضرورت ہوتی ہے تو اسے کیش کی کمی کا سامنا کرنا پڑتا ہے۔ اس نقطہ نظر کے لیے ایک اور حرکت پذیر حصہ-بیرونی عمل-کی ضرورت ہوتی ہے جسے برقرار رکھنے اور نگرانی کرنے کی ضرورت ہوتی ہے۔ اس کے علاوہ، اس حل کے لیے غیر فطری کوڈ کی علیحدگی/نقل کی ضرورت ہوتی ہے اور یہ زیادہ تر جامد کیش کیز کے لیے موزوں ہے (یعنی، متحرک طور پر تیار نہیں، جیسا کہ آئی ڈی کے ذریعے انڈیکس کی گئی چابیاں کے معاملے میں ہوتا ہے)۔ ممکنہ ابتدائی میعاد ختم ہونے کا امکان اس نقطہ نظر کے ساتھ، ہر عمل کیش ویلیو کو اس کی میعاد ختم ہونے سے پہلے ایک آزاد ممکنہ فیصلہ کر کے دوبارہ شمار کر سکتا ہے، جہاں جیسے جیسے ہم ویلیو کی میعاد ختم ہونے کے قریب ہوتے جاتے ہیں ابتدائی ریکمپیوٹیشن انجام دینے کا امکان بڑھتا جاتا ہے۔ چونکہ ممکنہ فیصلہ ہر عمل کے ذریعے آزادانہ طور پر کیا جاتا ہے، اس لیے بھگدڑ کے اثر کو کم کیا جاتا ہے کیونکہ ایک ہی وقت میں کم عمل ختم ہو جائیں گے۔ ایک ایکسپونینشیل ڈسٹری بیوشن پر مبنی مندرجہ ذیل نفاذ کو بھگدڑ کو روکنے میں اس کی تاثیر اور ابتدائی دوبارہ گنتی کیسے ہو سکتی ہے اس کے لحاظ سے بہترین دکھایا گیا ہے۔ فنکشن x-fetch (کلید، ٹی ٹی ایل، بیٹا = 1) {قیمت، ڈیلٹا، میعاد ختم ہونے پر کیش _ ریڈ (کلید) اگر (! قیمت۔۔ (وقت ()-ڈیلٹا * بیٹا * لاگ (رینڈ (0,1)) ± میعاد ختم ہونے پر) {اسٹارٹ Â ٹائم () قیمت Â ریکمپیوٹ _ ویلیو () ڈیلٹا Â ٹائم ()-اسٹارٹ کیش _ رائٹ (کلید، (قیمت، ڈیلٹا)، ٹی ٹی ایل)} ریٹرن ویلیو} پیرامیٹر کو 1 سے زیادہ قیمت پر سیٹ کیا جا سکتا ہے تاکہ پہلے کی بازیافتوں کو ترجیح دی جا سکے اور بھگدڑ کو مزید کم کیا جا سکے لیکن مصنفین ظاہر کرتے ہیں کہ ترتیب = 1 عملی طور پر اچھی طرح سے کام کرتا ہے۔ متغیر قدر کی دوبارہ گنتی کرنے کے وقت کی نمائندگی کرتا ہے اور امکان کی تقسیم کو مناسب طریقے سے پیمانے پر استعمال کرنے کے لیے استعمال ہوتا ہے۔ اس نقطہ نظر کو نافذ کرنا آسان ہے اور ٹریفک کی شرح میں اضافے پر خود بخود ابتدائی دوبارہ گنتی کی حمایت کرکے کیش کی بھگدڑ کو مؤثر طریقے سے کم کرتا ہے۔ ایک خرابی یہ ہے کہ یہ کیش میں زیادہ میموری لیتا ہے کیونکہ ہمیں کیش آئٹم کے ساتھ ویلیو ڈیلٹا کو بنڈل کرنے کی ضرورت ہے-جب کیشنگ سسٹم کلیدی میعاد ختم ہونے کے وقت کی بازیافت کی حمایت نہیں کرتا ہے، تو ہمیں (یعنی) کو بھی ذخیرہ کرنے کی ضرورت ہے۔ بنڈل میں۔ حوالہ جات بیرونی روابط کیش بھگدڑ کو کم کرنا، جوشوا تھیجسن، 2010 عام پرل کیش کے استعمال کے مسائل اور حل، جوناتھن سوارٹز، 2008 انجینئرنگ کی ناکامیاں متوازی کمپیوٹنگ کمپیوٹر اصلاح کیش (کمپیوٹنگ)