মন্টু মিয়াঁর সিস্টেম ডিজাইন
CDN এর জাদু

Push নাকি Pull?

CDN এর কনসেপ্ট বোঝার পর মন্টুর মাথায় একটা নতুন প্যাঁচ লাগল। সে জিজ্ঞেস করল, "আচ্ছা বল্টু ভাই, আমার অরিজিন সার্ভারে তো হাজার হাজার ভিডিও আছে। এখন এই হাজার হাজার ভিডিও কি আমি নিজে গিয়ে গিয়ে সারা দুনিয়ার সব CDN সার্ভারে কপি করে দিয়ে আসব? এটা তো গাধার খাটনি!"

বল্টু ভাই হেসে বললেন, "আরে না! তুই দিবি কেন? এখানে দুইটা সিস্টেম আছে। একটাতে সিডিএন নিজে এসে তোর থেকে নিয়ে যাবে (Pull), আরেকটাতে তুই জোর করে সিডিএনকে দিয়ে আসবি (Push)।"

ব্যাপারটা খোলসা করার জন্য বল্টু ভাই চাইনিজ রেস্টুরেন্ট আর তেহারির দোকানের এর উদাহরণ টানলেন।

১. Pull CDN

অলস কিন্তু স্মার্ট ওয়েটার

বর্তমান যুগের বেশিরভাগ সিডিএন (যেমন: Cloudflare, AWS CloudFront) ডিফল্টভাবে এই Pull মেথডে কাজ করে।

ব্যাপারটা অনেকটা চাইনিজ রেস্টুরেন্টে গিয়ে স্যুপ অর্ডার করার মতো:

  • অর্ডার: প্রথম কাস্টমার (ইউজার) এসে স্যুপ চাইল।
  • চেক: ওয়েটার (CDN) দেখল তার কাছে স্যুপ রেডি নেই।
  • পুল (Pull): ওয়েটার দৌড়ে কিচেনে (Origin Server) গেল, স্যুপ বানিয়ে নিয়ে এল।
  • সার্ভ ও ক্যাশ: কাস্টমারকে স্যুপ দিল এবং বুদ্ধি করে এক হাড়ি স্যুপ কাউন্টারে রেখে দিল (Cache)।
  • পরবর্তী কাস্টমার: এরপরে যেই স্যুপ চাইবে, ওয়েটার আর কিচেনে যাবে না। কাউন্টার থেকেই দিয়ে দেবে।

বৈশিষ্ট্য:

  • এখানে বাই ডিফল্ট CDN-এর কাছে কিছুই থাকে না। প্রথম ইউজার যখন কোনো ফাইল চায়, CDN তখন অরিজিন সার্ভার থেকে সেটা টেনে (Pull) আনে।
  • সমস্যা: যে প্রথম ইউজার, তাকে একটু বেশিক্ষণ অপেক্ষা করতে হয় (কারণ তখন ফাইলটা অরিজিন থেকে আনা হচ্ছে)। একে বলে First Request Penalty
  • আপডেট (TTL): সিডিএন ফাইলটা চিরকাল রাখে না। একটা নির্দিষ্ট সময় পর (যাকে বলে Time-to-Live বা TTL), সে ফাইলটা ফেলে দেয়। এরপর আবার কেউ চাইলে সে নতুন করে অরিজিন থেকে ফ্রেশ কপি নিয়ে আসে।

মন্টুর জন্য লাভ: মন্টুকে কিছুই করতে হবে না। সিডিএন অটোমেটিক বুঝবে কোন ভিডিওটা পপুলার আর কোনটা ক্যাশ করতে হবে। সেটআপ করাও পানির মতো সহজ।

২. Push CDN

আগে থেকেই রেডি

এটা হলো পুরাণ ঢাকার বিরিয়ানি বা তেহারির দোকানের মতো। কোন কাস্টমার আসার আগেই দোকানদার ডেকচি ভরে ভরে তেহারি, মোরগ পোলাও ইত্যাদি সাজিয়ে রেখেছে। কাস্টোমার এসে সাথে সাথে খাবার পাবে, কোনো ওয়েটিং টাইম নেই।

push cdn

বৈশিষ্ট্য:

  • এখানে ইউজার চাওয়ার অপেক্ষায় বসে থাকা হয় না। তুই (ডেভেলপার) নিজেই ফাইলগুলো আপলোড করে সিডিএন-এর সব সার্ভারে পুশ (Push) করে দিবি।
  • সুবিধা: প্রথম ইউজারও সুপার ফাস্ট স্পিড পাবে। কোনো ল্যাটেন্সি নেই।
  • অসুবিধা: এটা মেইনটেইন করা ঝামেলার। কন্টেন্ট পাল্টালে তোকে আবার ম্যানুয়ালি সব জায়গায় আপডেট করতে হবে। তাছাড়া অহেতুক ফাইল স্টোর করে রাখলে স্টোরেজ খরচও বাড়ে।

কোথায় লাগে? সাধারণত বিশাল বড় ফাইল (যেমন গেমের ইন্সটলার বা সফটওয়্যার আপডেট) বা এমন ফাইল যা সচরাচর চেঞ্জ হয় না, সেখানে Push CDN ব্যবহার করা হয়।

মন্টুর সিদ্ধান্ত: সব শুনে মন্টু বলল, "ভাই, আমার বিড়ালটিউবে তো প্রতি মিনিটে ভিডিও আপলোড হচ্ছে। আমি ম্যানুয়ালি পুশ করতে গেলে পাগল হয়ে যাব। তার ওপর আমার বেশিরভাগ কন্টেন্টই ভাইরাল টাইপ। তাই আমার জন্য Pull CDN-ই বেস্ট!"

বল্টু ভাই পিঠ চাপড়ে দিলেন, "গুড ডিসিশন! বেশিরভাগ মডার্ন অ্যাপের জন্য Pull CDN-ই সেরা। সেটআপ কর, আর নাকে তেল দিয়ে ঘুমা!"

On this page