Cache stampede
ক্যাশে স্ট্যাম্পেড হল এক ধরনের ক্যাসকেডিং ব্যর্থতা যা তখন ঘটতে পারে যখন ক্যাশিং প্রক্রিয়া সহ ব্যাপক সমান্তরাল কম্পিউটিং সিস্টেমগুলি খুব বেশি লোডের অধীনে আসে। এই আচরণকে কখনও কখনও কুকুর-পিলিংও বলা হয়। ক্যাশে স্ট্যাম্পড কীভাবে ঘটে তা বোঝার জন্য, এমন একটি ওয়েব সার্ভারের কথা বিবেচনা করুন যা সিস্টেম লোড সহজ করার জন্য কিছু সময়ের জন্য ক্যাশে রেন্ডার করা পৃষ্ঠাগুলিতে মেমক্যাচ ব্যবহার করে। একটি একক ইউআরএল-এ বিশেষভাবে উচ্চ লোডের অধীনে, সিস্টেমটি ততক্ষণ প্রতিক্রিয়াশীল থাকে যতক্ষণ সম্পদটি ক্যাশে থাকে, অনুরোধগুলি ক্যাশে করা অনুলিপি অ্যাক্সেস করে পরিচালনা করা হয়। এটি ব্যয়বহুল রেন্ডারিং অপারেশনকে কমিয়ে দেয়। কম লোডের অধীনে, ক্যাশে মিসের ফলে রেন্ডারিং অপারেশনের একক পুনর্বিবেচনা হয়। উচ্চ ক্যাশে হিট হারের কারণে গড় লোড খুব কম রাখা সহ সিস্টেমটি আগের মতোই অব্যাহত থাকবে। যাইহোক, খুব ভারী লোডের অধীনে, যখন সেই পৃষ্ঠার ক্যাশে করা সংস্করণের মেয়াদ শেষ হয়ে যায়, তখন সার্ভার ফার্মে যথেষ্ট সমান্তরালতা থাকতে পারে যে কার্যকর করার একাধিক থ্রেড একই সাথে সেই পৃষ্ঠার বিষয়বস্তু রেন্ডার করার চেষ্টা করবে। পদ্ধতিগতভাবে, সমবর্তী সার্ভারগুলির কেউই জানে না যে অন্যরা একই সময়ে একই রেন্ডারিং করছে। যদি পর্যাপ্ত পরিমাণে উচ্চ বোঝা উপস্থিত থাকে, তবে এটি ভাগ করা সম্পদের ক্লান্তির মাধ্যমে সিস্টেমের যানজট পতনের জন্য যথেষ্ট হতে পারে। কনজেশন পতনের ফলে পৃষ্ঠাটি সম্পূর্ণরূপে পুনরায় রেন্ডার এবং পুনরায় ক্যাশে হওয়া থেকে বিরত থাকে, কারণ এটি করার প্রতিটি প্রচেষ্টা বার বার শেষ হয়ে যায়। এইভাবে, ক্যাশে স্ট্যাম্পেড ক্যাশে হিট হারকে শূন্যে নামিয়ে আনে এবং সিস্টেমটিকে ক্রমাগত যানজটের মধ্যে রাখে কারণ এটি যতক্ষণ পর্যন্ত লোড খুব ভারী থাকে ততক্ষণ সম্পদটি পুনরুজ্জীবিত করার চেষ্টা করে। একটি সুনির্দিষ্ট উদাহরণ দেওয়ার জন্য, ধরে নিন যে বিবেচনাধীন পৃষ্ঠাটি রেন্ডার করতে 3 সেকেন্ড সময় নেয় এবং আমাদের প্রতি সেকেন্ডে 10 টি অনুরোধের ট্র্যাফিক রয়েছে। তারপর, যখন ক্যাশে করা পৃষ্ঠার মেয়াদ শেষ হয়ে যায়, তখন আমাদের 30টি প্রক্রিয়া রয়েছে যা একযোগে পৃষ্ঠার রেন্ডারিং পুনরায় গণনা করে এবং রেন্ডার করা পৃষ্ঠার সাথে ক্যাশে আপডেট করে। সাধারণ ক্যাশে ব্যবহার নিচে একটি আইটেমের জন্য একটি সাধারণ ক্যাশে ব্যবহারের প্যাটার্ন রয়েছে যা সময়ের প্রতিটি ইউনিটে আপডেট করা প্রয়োজনঃ ফাংশন আনয়ন (কী, টিটিএল) {ভ্যালু কেশে _ রিড (কী) যদি (! ভ্যালু) {ভ্যালু → রিকম্প্যুট _ ভ্যালু () ক্যাশে _ রাইট (কী, ভ্যালু, টিটিএল)} রিটার্ন ভ্যালু} যদি ফাংশনটি দীর্ঘ সময় নেয় এবং কীটি ঘন ঘন অ্যাক্সেস করা হয়, তবে অনেকগুলি প্রক্রিয়া একই সাথে ক্যাশে মানের মেয়াদ শেষ হওয়ার পরে কল করবে। সাধারণ ওয়েব অ্যাপ্লিকেশনগুলিতে, ফাংশনটি একটি ডাটাবেস অনুসন্ধান করতে পারে, অন্যান্য পরিষেবাগুলি অ্যাক্সেস করতে পারে বা কিছু জটিল ক্রিয়াকলাপ সম্পাদন করতে পারে (যে কারণে এই নির্দিষ্ট গণনাটি প্রথম স্থানে ক্যাশে করা হচ্ছে)। যখন অনুরোধের হার বেশি হয়, তখন ডাটাবেস (বা অন্য কোনও ভাগ করা সংস্থান) অতিরিক্ত অনুরোধ/প্রশ্নের শিকার হবে, যা ফলস্বরূপ সিস্টেমের পতনের কারণ হতে পারে। ক্যাশে পদপিষ্ট প্রশমন ক্যাশে পদপিষ্ট প্রশমিত করার জন্য বেশ কয়েকটি পদ্ধতির প্রস্তাব দেওয়া হয়েছে (যা ডগপাইল প্রতিরোধ নামেও পরিচিত)। এগুলিকে মোটামুটিভাবে 3টি প্রধান বিভাগে ভাগ করা যেতে পারে। লক করা একই মানের একাধিক একযোগে পুনঃগণনার প্রতিরোধ করতে, একটি ক্যাশে মিস করার পরে একটি প্রক্রিয়া সেই ক্যাশে কী-এর জন্য লক অর্জনের চেষ্টা করবে এবং এটি অর্জন করলেই এটি পুনরায় গণনা করবে। যখন লকটি অধিগ্রহণ করা হয় না তখন মামলার জন্য বিভিন্ন বাস্তবায়ন বিকল্প রয়েছেঃ মানটি পুনরায় গণনা না হওয়া পর্যন্ত অপেক্ষা করুন একটি "খুঁজে পাওয়া যায়নি" ফেরত দিন এবং ক্লায়েন্টকে মূল্যের অনুপস্থিতি সঠিকভাবে পরিচালনা করতে বলুন নতুন মানটি পুনরায় গণনা করার সময় ক্যাশেতে একটি বাসি আইটেম রাখুন যদি সঠিকভাবে প্রয়োগ করা হয় তবে লকিং স্ট্যাম্পডগুলি পুরোপুরি প্রতিরোধ করতে পারে, তবে লকিং ব্যবস্থার জন্য একটি অতিরিক্ত লেখার প্রয়োজন হয়। লেখার সংখ্যা দ্বিগুণ করা ছাড়াও, প্রধান ত্রুটি হল লকিং পদ্ধতির সঠিক বাস্তবায়ন যা লক অর্জনের প্রক্রিয়াটির ব্যর্থতা, লকের জন্য সময়-থেকে-বেঁচে থাকার সুর, রেস-শর্তাদি ইত্যাদি সহ প্রান্তিক মামলাগুলির যত্ন নেয়। বাহ্যিক পুনঃগণনা এই সমাধানটি ক্যাশে মানের পুনঃগণনাকে প্রয়োজনীয় প্রক্রিয়াগুলি থেকে একটি বাহ্যিক প্রক্রিয়ায় নিয়ে যায়। বাহ্যিক প্রক্রিয়াটির পুনঃগণনার প্রক্রিয়াটি বিভিন্ন উপায়ে শুরু করা যেতে পারেঃ যখন ক্যাশে মান পর্যায়ক্রমে তার মেয়াদ শেষ হওয়ার কাছাকাছি পৌঁছায় যখন কোনও প্রক্রিয়ার মূল্যের প্রয়োজন হয় তখন ক্যাশে মিস হয় এই পদ্ধতির জন্য আরও একটি চলমান অংশ-বাহ্যিক প্রক্রিয়া-প্রয়োজন যা বজায় রাখা এবং পর্যবেক্ষণ করা প্রয়োজন। উপরন্তু, এই সমাধানের জন্য অস্বাভাবিক কোড পৃথকীকরণ/অনুলিপি প্রয়োজন এবং বেশিরভাগই স্ট্যাটিক ক্যাশে কীগুলির জন্য উপযুক্ত (অর্থাৎ, গতিশীলভাবে উত্পন্ন নয়, যেমন একটি আইডি দ্বারা সূচীভুক্ত কীগুলির ক্ষেত্রে)। সম্ভাব্য তাড়াতাড়ি মেয়াদ শেষ হওয়া এই পদ্ধতির সাহায্যে, প্রতিটি প্রক্রিয়া একটি স্বাধীন সম্ভাবনাময় সিদ্ধান্ত নিয়ে তার মেয়াদ শেষ হওয়ার আগে ক্যাশে মানটি পুনরায় গণনা করতে পারে, যেখানে মূল্যের মেয়াদ শেষ হওয়ার কাছাকাছি আসার সাথে সাথে প্রাথমিক পুনঃগণনার সম্ভাবনা বৃদ্ধি পায়। যেহেতু সম্ভাব্য সিদ্ধান্ত প্রতিটি প্রক্রিয়া দ্বারা স্বাধীনভাবে নেওয়া হয়, তাই পদপিষ্টের প্রভাব হ্রাস করা হয় কারণ একই সময়ে কম প্রক্রিয়াগুলির মেয়াদ শেষ হয়ে যাবে। একটি সূচকীয় বণ্টনের উপর ভিত্তি করে নিম্নলিখিত বাস্তবায়নটি স্ট্যাম্পড প্রতিরোধে এর কার্যকারিতার দিক থেকে সর্বোত্তম বলে প্রমাণিত হয়েছে এবং কীভাবে প্রাথমিক পুনঃগণনার ঘটনা ঘটতে পারে। ফাংশন x-fetch (কী, টি. টি. এল, বিটা = 1) {মান, ডেল্টা, এক্সপায়ারি → ক্যাশে _ রিড (কী) যদি (! মান। (সময় ()-ডেল্টা * বিটা * লগ (র্যান্ড (0,1)) ± মেয়াদ শেষ হয়) {শুরু-সময় () মান → পুনঃগণনা _ মান () ডেল্টা-সময় ()-ক্যাশে _ রাইট (কী, (মান, ডেল্টা), টি. টি. এল)} রিটার্ন মান শুরু করুন} পূর্ববর্তী পুনঃগণনার পক্ষে প্যারামিটারটি 1 এর চেয়ে বেশি মানের জন্য সেট করা যেতে পারে এবং স্ট্যাম্পডগুলি আরও কমাতে পারে তবে লেখকরা দেখান যে সেটিং = 1 অনুশীলনে ভাল কাজ করে। পরিবর্তনশীল মানটি পুনরায় গণনা করার সময়কে উপস্থাপন করে এবং সম্ভাব্যতা বিতরণকে যথাযথভাবে পরিমাপ করতে ব্যবহৃত হয়। এই পদ্ধতিটি বাস্তবায়িত করা সহজ এবং ট্র্যাফিকের হার বাড়লে স্বয়ংক্রিয়ভাবে প্রাথমিক গণনার পক্ষে হয়ে ক্যাশে স্ট্যাম্পডগুলি কার্যকরভাবে হ্রাস করে। একটি ত্রুটি হ 'ল এটি ক্যাশে আরও মেমরি নেয় কারণ আমাদের ক্যাশে আইটেমের সাথে মান ডেল্টা বান্ডিল করতে হবে-যখন ক্যাশিং সিস্টেম কী মেয়াদ শেষ হওয়ার সময় পুনরুদ্ধারকে সমর্থন করে না, তখন আমাদেরও (অর্থাৎ) সংরক্ষণ করতে হবে বান্ডিল। তথ্যসূত্র বাইরের লিঙ্ক ক্যাশে স্ট্যাম্পেড কমানো, জোশুয়া থিজসেন, 2010 সাধারণ পার্ল ক্যাশে ব্যবহারের সমস্যা ও সমাধান, জোনাথন সোয়ার্টজ, 2008 ইঞ্জিনিয়ারিং ব্যর্থতা সমান্তরাল কম্পিউটিং কম্পিউটার অপ্টিমাইজেশন ক্যাশে (কম্পিউটিং)