ক্যাশিংয়ের কাঁটা
সাধের লাউ যখন বৈরাগী
এতক্ষণ ক্যাশিংয়ের গুণগান শুনে মন্টু তো আকাশে উড়ছে। কিন্তু বল্টু ভাই তাকে মাটিতে নামিয়ে আনলেন।
— “শোন মন্টু, ক্যাশ সেটআপ করলেই যে জীবন সুন্দর হয়ে যাবে, এমন না। ক্যাশিংয়েরও নিজস্ব কিছু সাইড ইফেক্ট আছে। ঠিকমতো হ্যান্ডেল না করলে হিতের বিপরীত হতে পারে।”
মন্টু আকাশ থেকে পড়ল। — “বলেন কী ভাই! এখানে আবার কী ঝামেলা?”
বল্টু ভাই আঙ্গুল গুনে বলা শুরু করলেন।
১. থান্ডারিং হার্ড (Thundering Herd) - কাচ্চির হাড়ি যখন খালি!
“ধর তোর বিড়ালটিউবে একটা ভিডিও সুপার ভাইরাল। প্রতি সেকেন্ডে হাজার হাজার মানুষ সেটা দেখছে। ডাটাটা ক্যাশে আছে, তাই সমস্যা নেই। কিন্তু হঠাৎ ক্যাশের মেয়াদ (TTL) শেষ হয়ে গেল!”
“এটা অনেকটা বিয়ের বাড়ির কাচ্চির হাড়ির মতো। যতক্ষণ কাচ্চি আছে, সবাই খুশি। যেই না হাড়ি খালি হলো (Cache Expire), তখন হাজার হাজার ক্ষুধার্ত মেহমান (User Request) একসাথে বাবুর্চির (Database) ওপর ঝাঁপিয়ে পড়ল, ‘ভাই কাচ্চি দেন!'। বাবুর্চি কি একা এত মানুষ সামলাতে পারবে? সে তো হার্ট অ্যাটাক করবে! একেই বলে Thundering Herd প্রবলেম।”

সমাধান: বাবুর্চিকে বলা, “সবাইকে একসাথে আসতে দিও না, লাইনে দাঁড় করাও। (Staggered Expiration)” অথবা হাড়ি খালি হওয়ার আগেই নতুন হাড়ি রেডি রাখা (Background Refresh)।
২. বিগ কি (Big Key) - রিকশায় মোটা যাত্রী
“ধর তোর রেডিস মেমরি হলো একটা রিকশা। সেখানে দুজন চিকন মানুষ আরামসে বসতে পারে। কিন্তু তুই যদি সেখানে ২০০ কেজির বিশাল এক ভিডিওর লিস্ট (Big Key) জোর করে বসিয়ে দিস, তখন কী হবে? অন্য কেউ আর বসতে পারবে না, রিকশাও নড়তে পারবে না। নেটওয়ার্ক জ্যাম হয়ে যাবে।”
সমাধান: বিশাল ডাটাকে ছোট ছোট টুকরো করে রাখা অথবা কম্প্রেস (Compress) করে রাখা।
৩. ক্যাশ পলিউশন (Cache Pollution) - ঘরভর্তি জঞ্জাল
“তোর স্টোররুমে এমন কিছু পুরনো খবরের কাগজ বা ভাঙা চেয়ার আছে না, যেগুলো গত ৫ বছরেও কেউ ধরেনি? এগুলো শুধু শুধু জায়গা নষ্ট করছে। ক্যাশেও এমন হয়। এমন সব ডাটা ক্যাশে বসে আছে যা কেউ খুঁজছে না, অথচ নতুন দরকারি ডাটা রাখার জায়গা নেই। একেই বলে Cache Pollution।”
সমাধান: ওই যে বললাম LRU (Least Recently Used) পলিসি, পুরনো জঞ্জাল ঝেটিয়ে বিদায় করা!
৪. ক্যাশ পেনেট্রেশন (Cache Penetration) - অন্ধকে সিনেমা দেখানো
“ধর কোনো হ্যাকার বা বোকা ইউজার এমন একটা ভিডিওর আইডি দিয়ে সার্চ দিল যেটা তোর ডাটাবেসেই নেই (যেমন: id= -999)। ক্যাশে খুঁজলে পাবে না (Cache Miss), তাই রিকোয়েস্ট ডাটাবেসে যাবে। ডাটাবেসেও পাবে না। এখন যদি লাখ লাখ মানুষ এমন 'নাই' হয়ে যাওয়া ডাটা খুঁজতে থাকে, তাহলে তোর ক্যাশ বাইপাস হয়ে সব চাপ গিয়ে পড়বে ডাটাবেসের ওপর। ডাটাবেস তখন ফাও খাটনি খাটবে।”
সমাধান: যে ডাটা নেই, ক্যাশকে বলে দে, “ভাই, এই ডাটা নেই, এটাও মনে রাখ।" যাতে পরের বার কেউ চাইলে ক্যাশই তাকে না করে দিতে পারে।
বল্টু ভাই পিঠ চাপড়ে বললেন, “যাই হোক, এগুলো হলো কর্নার কেস। তুই যেহেতু শুরু করছিস, এত টেনশন নিস না। রেডিস মামা একাই অনেক স্মার্ট, সে অনেক কিছু সামলে নেবে।”
সব বুঝে মন্টু এবার বেজায় খুশি। সে খুশিমনে বল্টু ভাইয়ের কাছ থেকে বিদায় নিয়ে বাসায় এসেই সার্ভার আর ডাটাবেজের মাঝে রেডিস সেটআপ করতে বসে গেল। আর থাকবে না কোনো ভুতুড়ে সমস্যা, আর শুনতে হবে না ইউজারের গালি।
মন্টু মনে মনে ভাবছে, "সিস্টেম ডিজাইন জিনিসটা তো আসলেই জাদুর মতো!"