Part 1 · নেটওয়ার্কিং 📖 ১৪ মিনিট পড়া 📝 ২০টি কুইজ

ক্যাশিং

দ্রুত response পেতে এবং সিস্টেম-এর লোড কমাতে অপরিহার্য কৌশল।

📝 কুইজে যান

আপনি প্রতিদিন একই পথে অফিস যান। প্রতিদিন কি Google Maps খুলে রুট খোঁজেন? না — কারণ আপনার মস্তিষ্কে রুটটা মুখস্থ হয়ে গেছে। মস্তিষ্ক প্রতিবার নতুন করে চিন্তা না করে আগের উত্তর দ্রুত বের করে দেয়। এটাই caching

Caching কী?

Caching মানে frequently accessed data-কে এমন একটি দ্রুত storage-এ রেখে দেওয়া যেখানে পরের বার চাইলেই দ্রুত পাওয়া যায় — মূল source-এ আবার যাওয়া লাগে না।

💡 সহজ উদাহরণ: YouTube-এ কোনো জনপ্রিয় ভিডিও বারবার অনেকে দেখলে — প্রতিবার YouTube মূল server থেকে আনে না। Browser cache + CDN cache + edge cache — সব জায়গায় copy থাকে। তাই বাংলাদেশ থেকে দেখলেও দ্রুত আসে।

Caching কেন দরকার?

  • Performance: RAM থেকে data পড়া disk-এর চেয়ে ১০০× দ্রুত। Cache সাধারণত memory-তে।
  • Scalability: Database-এ রিকোয়েস্ট কমে — DB কম চাপে থাকে।
  • Cost: কম DB query = কম compute cost।
  • User experience: Page load < ১ সেকেন্ড — user satisfaction বাড়ে।
  • Network bandwidth: CDN cache user-এর কাছাকাছি — bandwidth বাঁচে।

Cache কোথায় কোথায় থাকে?

একটি web request যাত্রাপথে অনেক স্তরে cache পেতে পারে:

  1. Browser cache: CSS, JS, image — browser disk-এ store।
  2. CDN cache: Edge server-এ static asset।
  3. Reverse proxy cache: NGINX/Varnish যেখানে full HTML page cache।
  4. Application cache: অ্যাপের মেমরিতে (in-process)।
  5. Distributed cache: Redis/Memcached — শেয়ার্ড।
  6. Database cache: Query result cache (PostgreSQL, MySQL-এ)।
  7. Disk cache: OS level — read/write buffer।
  8. CPU cache: L1/L2/L3 — হার্ডওয়্যার level।

Caching Strategies

১. Cache-Aside (Lazy Loading)

App প্রথমে cache check করে। না পেলে DB থেকে আনে এবং cache-এ রাখে।

App → Cache (miss) → DB → cache.set(key) → return
  • সুবিধা: শুধু চাওয়া data cache হয় (memory efficient)।
  • অসুবিধা: First request slow। Stale data সম্ভব।
  • ব্যবহার: Read-heavy app — সবচেয়ে কমন pattern।

২. Write-Through

Write হলে DB এবং cache দুটোতেই একসাথে আপডেট।

  • সুবিধা: Cache সবসময় fresh।
  • অসুবিধা: Write latency বেশি (দুই জায়গায় write)।

৩. Write-Behind (Write-Back)

Cache-এ write হয়, DB-তে async write।

  • সুবিধা: Write fast।
  • অসুবিধা: Cache crash হলে data lost হতে পারে।

৪. Read-Through

Cache নিজেই DB থেকে data fetch করে; app শুধু cache-এর সাথে interact করে।

৫. Refresh-Ahead

Expire হওয়ার আগেই cache async refresh হয়। Latency-sensitive app-এ ভালো।

Eviction Policies

Cache memory সীমিত — পুরাতন data সরাতে হয়। Eviction policy নির্ধারণ করে কে যাবে।

LRU (Least Recently Used)

  • সবচেয়ে কম recent access হওয়া item বের করে দেয়
  • সবচেয়ে কমন
  • Redis-এ default option

LFU (Least Frequently Used)

  • সবচেয়ে কম frequently access হওয়া item সরায়
  • Hot data-কে রাখে
  • সমস্যা: cold-start hot items বঞ্চিত

FIFO (First In First Out)

  • আগে যে এসেছে আগে যাবে
  • সরল কিন্তু কম optimal

TTL (Time To Live)

  • Time-based expiry
  • সব strategy-এর সাথে combine হয়

Distributed Cache (Redis/Memcached)

একটিমাত্র server-এ cache রাখলে — সেটা scale বা HA হয় না। Distributed cache cluster-এ data partition হয়।

  • Redis: Data structure (list, hash, set, sorted set), persistence, pub/sub, replication। সবচেয়ে জনপ্রিয়।
  • Memcached: শুধু key-value, simpler, কম feature, তবে কিছু case-এ দ্রুত।

Cache-এর সমস্যা

Cache Stampede (Thundering Herd)

হঠাৎ একটি cache key expire — হাজারো request একসাথে DB-তে যায়। সমাধান: locking, request coalescing, refresh-ahead।

Cache Penetration

Attacker non-existent key বারবার চায় — cache miss → DB hit → DB-এ pressure। সমাধান: bloom filter, negative caching।

Cache Avalanche

একসাথে অনেক key expire → DB-তে spike। সমাধান: random TTL jitter।

বাস্তব উদাহরণ

  • Twitter timeline: Redis-এ precomputed timeline।
  • Facebook newsfeed: Memcached + Redis।
  • YouTube thumbnails: CDN cache।
  • Wikipedia: Varnish reverse proxy cache।

সাধারণ ভুল ধারণা

  1. "Cache সবসময় fast": Network latency থাকলে remote cache local DB-এর চেয়েও slow হতে পারে।
  2. "যত cache তত ভালো": Cache invalidation কঠিন — stale data সমস্যা।
  3. "Cache infinite memory": Eviction policy ছাড়া cache fill হয়ে crash।

Best Practices

  • Cache key naming convention মেনে চলুন: user:123:profile
  • TTL সবসময় সেট করুন — অন্তত fallback হিসেবে।
  • TTL-এ jitter যোগ করুন — avalanche থেকে বাঁচতে।
  • Cache hit ratio monitor করুন — ৮০%+ ভালো।
  • Sensitive data cache করার আগে security ভাবুন।

📌 চ্যাপ্টার সারমর্ম

  • Cache দ্রুত access-এর জন্য data-র copy রাখা।
  • Cache-Aside সবচেয়ে কমন strategy।
  • LRU সবচেয়ে কমন eviction policy।
  • Redis/Memcached distributed caching-এর জন্য।
  • Stampede, Penetration, Avalanche — তিনটি cache problem।