একটি উচ্চ-ট্রাফিক ভিডিও সাইট তাদের ট্রেন্ডিং-পেজ ফিডের জন্য ডেটাবেস কুয়েরি প্রতি মিনিটে ৪,০০০ থেকে কমিয়ে ৫০-এর নিচে নিয়ে এসেছে এবং হোল-পেজ ক্যাশিং (whole-page caching) থেকে Varnish এবং Edge Side Includes (ESI) ব্যবহার করে ফ্র্যাগমেন্ট ক্যাশিংয়ে (fragment caching) স্থানান্তরের মাধ্যমে তাদের ৯৫তম-পার্সেন্টাইল রেসপন্স টাইম ৩৮০ ms থেকে কমিয়ে ৪০ ms-এ নামিয়ে এনেছে।
কেন সাইটটির একটি ভিন্ন ক্যাশ স্ট্র্যাটেজি প্রয়োজন ছিল
একটি অঞ্চলের প্রায় প্রতিটি ভিজিটরদের জন্য দিনের সবচেয়ে বেশি দেখা ক্লিপগুলো দেখায় এমন ফ্রন্ট পেজটি দেখতে প্রায় একই রকম: প্রায় ১০ লক্ষ ব্যবহারকারীর জন্য HTML-এর প্রায় ৯৫ শতাংশই অভিন্ন থাকে, যেখানে বাকি ৫ শতাংশে লগ-ইন করা ব্যবহারকারীর নাম বা সার্চ বক্সের মতো ব্যক্তিগত তথ্য থাকে। ইঞ্জিনিয়ারিং টিম দুটি প্রতিকূল বিকল্পের মুখোমুখি হয়েছিল:
- পুরো পেজটি ক্যাশ করা এবং লগ-ইন করা ব্যবহারকারীদের কাছে পুরনো বা 'স্টেল' (stale) ব্যক্তিগত তথ্য দেখানোর ঝুঁকি নেওয়া।
- ক্যাশ পুরোপুরি বাইপাস করা এবং প্রতিটি রিকোয়েস্টকে সরাসরি ডেটাবেসে আঘাত করতে দেওয়া।
উভয় পদ্ধতিই ব্যবহারকারীর অভিজ্ঞতা নষ্ট করছিল। টিম তখন ESI-এর দিকে ঝুঁকে পড়ে, যা একটি রিভার্স-প্রক্সি (reverse-proxy) প্রযুক্তি যা নেটওয়ার্কের এজ (edge) প্রান্তে স্বতন্ত্রভাবে ক্যাশ করা ফ্র্যাগমেন্ট থেকে একটি পেজ তৈরি করতে সাহায্য করে।
ফ্র্যাগমেন্ট ক্যাশিং কীভাবে সেটআপ করা হয়েছিল
ওপেন-সোর্স HTTP অ্যাক্সিলারেটর Varnish, পেজটিকে তিনটি পরিবর্তনযোগ্য অংশ বিশিষ্ট একটি স্কেলিটন (skeleton) হিসেবে বিবেচনা করেছিল:
- ভিডিও গ্রিড (Video grid) – ট্রেন্ডিং ভিডিওর একটি ব্যয়বহুল, অঞ্চল-ব্যাপী তালিকা। এটি ৬০ সেকেন্ডের জন্য ক্যাশ করা হয় কারণ এটি ঘন ঘন পরিবর্তিত হয় কিন্তু প্রতিটি বেনামী (anonymous) ভিজিটরের জন্য এটি একই থাকে।
- ল্যাঙ্গুয়েজ সুইচার (Language switcher) – একটি স্ট্যাটিক UI এলিমেন্ট যা খুব কম পরিবর্তিত হয়। এটি ২৪ ঘণ্টার জন্য ক্যাশ করা হয়।
- হেডার (Header) – একমাত্র প্রকৃত ব্যক্তিগত ফ্র্যাগমেন্ট (ব্যবহারকারীর নাম, অবতার, নোটিফিকেশন)। এটি কখনোই ক্যাশ করা হয় না; Varnish প্রতিবার অ্যাপ্লিকেশন সার্ভারে রিকোয়েস্টটি ফরওয়ার্ড করে।
যখন একটি রিকোয়েস্ট আসে, Varnish ক্যাশ করা স্কেলিটনটি প্রদান করে, তার লোকাল স্টোর থেকে দুটি ক্যাশ করা ফ্র্যাগমেন্ট সংগ্রহ করে এবং ব্যাকএন্ড থেকে লাইভ হেডারটি যুক্ত করে।
গুরুত্বপূর্ণ পরিসংখ্যান
পরিবর্তনের পর:
- ট্রেন্ডিং পেজের জন্য ডেটাবেস লোড প্রতি মিনিটে ৪,০০০ কুয়েরি থেকে কমে ৫০-এর নিচে নেমে এসেছে।
- ৯৫তম-পার্সেন্টাইল ল্যাটেন্সি ৩৮০ ms থেকে ৪০ ms-এ নেমে এসেছে।
রোলআউট থেকে প্রাপ্ত তিনটি ব্যবহারিক শিক্ষা
১. গ্রেস পিরিয়ড ক্যাশ মিসের প্রভাব কমিয়ে দেয় যখন কোনো ফ্র্যাগমেন্টের TTL শেষ হয়ে যায়, Varnish সাধারণত নতুন কন্টেন্ট আনার জন্য বিরতি নেয়, যা ল্যাটেন্সিতে একটি স্পাইক তৈরি করে এবং এটি একই সাথে অসংখ্য ব্যাকএন্ড কলের একটি "thundering herd" সমস্যার সৃষ্টি করতে পারে। একটি গ্রেস পিরিয়ড (grace period) কনফিগার করার মাধ্যমে, Varnish ব্যাকগ্রাউন্ডে নিঃশব্দে ক্যাশ রিফ্রেশ করার সময় পুরনো বা স্টেল ফ্র্যাগমেন্টটি প্রদান করা চালিয়ে যায়। ব্যবহারকারীরা কোনো বিরতি অনুভব করেন না; ব্যাকএন্ড একটি স্থিতিশীল এবং নিয়ন্ত্রণযোগ্য রিকোয়েস্ট রেট দেখতে পায়।
২. বেনামী ফ্র্যাগমেন্টের জন্য কুকি রিমুভ করা প্রতিটি রিকোয়েস্টের সাথে যুক্ত কুকিগুলো Varnish-কে প্রতিটি রিকোয়েস্টকে অনন্য হিসেবে বিবেচনা করতে বাধ্য করে, যা ক্যাশ হিটকে অকার্যকর করে দেয়। টিম ভিডিও গ্রিড এবং ল্যাঙ্গুয়েজ সুইচারের জন্য কুকি রিমুভ করে দেয়, যা সেই ফ্র্যাগমেন্টগুলোকে ব্যাপকভাবে (aggressively) ক্যাশ করার সুযোগ করে দেয়। শুধুমাত্র হেডার ফ্র্যাগমেন্টটি কুকি বহন করে, যা ক্যাশ দক্ষতা বিসর্জন না দিয়েই পার্সোনালাইজেশন বজায় রাখে।
৩. সারোগেট কী (Surrogate keys) তাৎক্ষণিক পার্জিং নিশ্চিত করে কখনও কখনও একটি ভিডিও অবিলম্বে সরিয়ে ফেলা প্রয়োজন হতে পারে—যেমন কপিরাইট সংক্রান্ত কারণে। ৬০ সেকেন্ডের TTL শেষ হওয়ার জন্য অপেক্ষা করা গ্রহণযোগ্য নয়। প্রতিটি ক্যাশ করা ফ্র্যাগমেন্টকে একটি সারোগেট কী দিয়ে ট্যাগ করার মাধ্যমে, যা অন্তর্নিহিত ভিডিও আইডিগুলোকে প্রতিফলিত করে, টিম একটি মাত্র পার্জ কমান্ড ইস্যু করতে পারে যা প্রতিটি এজ নোডে একটি নির্দিষ্ট ভিডিওর সমস্ত কপি তাৎক্ষণিকভাবে বাতিল করে দেয়। এটি সম্পূর্ণ ক্যাশ সুইপ এড়িয়ে চলে এবং সাইটটিকে কমপ্লায়েন্ট রাখে।
সারকথা: Varnish এবং ESI ব্যবহার করে ফ্র্যাগমেন্ট ক্যাশিং একটি মনোলিথিক এবং ডেটাবেস-নির্ভর পেজকে কতগুলো হালকা এবং পুনরায় ব্যবহারযোগ্য অংশে রূপান্তরিত করে, যা ব্যবহারকারীর পার্সোনালাইজেশন বজায় রেখে ব্যাকএন্ড লোড এবং ল্যাটেন্সি ব্যাপকভাবে কমিয়ে দেয়।
