ক্যাশিং
দ্রুত response পেতে এবং সিস্টেম-এর লোড কমাতে অপরিহার্য কৌশল।
আপনি প্রতিদিন একই পথে অফিস যান। প্রতিদিন কি Google Maps খুলে রুট খোঁজেন? না — কারণ আপনার মস্তিষ্কে রুটটা মুখস্থ হয়ে গেছে। মস্তিষ্ক প্রতিবার নতুন করে চিন্তা না করে আগের উত্তর দ্রুত বের করে দেয়। এটাই caching।
Caching কী?
Caching মানে frequently accessed data-কে এমন একটি দ্রুত storage-এ রেখে দেওয়া যেখানে পরের বার চাইলেই দ্রুত পাওয়া যায় — মূল source-এ আবার যাওয়া লাগে না।
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 পেতে পারে:
- Browser cache: CSS, JS, image — browser disk-এ store।
- CDN cache: Edge server-এ static asset।
- Reverse proxy cache: NGINX/Varnish যেখানে full HTML page cache।
- Application cache: অ্যাপের মেমরিতে (in-process)।
- Distributed cache: Redis/Memcached — শেয়ার্ড।
- Database cache: Query result cache (PostgreSQL, MySQL-এ)।
- Disk cache: OS level — read/write buffer।
- CPU cache: L1/L2/L3 — হার্ডওয়্যার level।
Caching Strategies
১. Cache-Aside (Lazy Loading)
App প্রথমে cache check করে। না পেলে DB থেকে আনে এবং cache-এ রাখে।
- সুবিধা: শুধু চাওয়া 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।
সাধারণ ভুল ধারণা
- "Cache সবসময় fast": Network latency থাকলে remote cache local DB-এর চেয়েও slow হতে পারে।
- "যত cache তত ভালো": Cache invalidation কঠিন — stale data সমস্যা।
- "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।