CDN ও Edge Computing: কাছের server থেকে content
CDN and Edge Computing
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- CDN hit, miss ও origin behavior
- Public/private caching boundary
- Versioned assets ও edge execution
সমস্যা দিয়ে শুরু
ঢাকার user দূরের region থেকে প্রতিবার একই বইয়ের cover image download করছেন। Database fast হলেও network round trip বেশি। CDN user-এর কাছাকাছি edge location-এ reusable response রাখে। কিন্তু cart বা account page ভুলভাবে share হলে performance optimization data leak-এ পরিণত হয়।
সহজ করে বুঝি
CDN হলো geographically distributed delivery layer। Cache key অনুযায়ী response থাকলে hit, না থাকলে origin থেকে এনে policy অনুযায়ী cache করে। Key সাধারণত host/path ও configured query/header variation নিয়ে গঠিত; exact behavior provider-specific। Edge computing-এ request routing, lightweight transformation বা selected logic origin-এর আগেই চলে। CDN database replication-এর সমার্থক নয়। Personalized business state authoritative store-এ validate করতে হয়।
পরিচিত একটি উপমা
প্রকাশক প্রতিটি পাঠককে central warehouse থেকে বই না পাঠিয়ে এলাকার দোকানে জনপ্রিয় বই রাখে। দোকানে না থাকলে warehouse থেকে আসে। ব্যক্তিগত চিঠি সেই সাধারণ shelf-এ রাখা যায় না। একইভাবে public cover image আর customer invoice-এর cache policy আলাদা।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart TD
U[Reader] --> E{Edge cache hit}
E -->|Yes| H[Cached public asset]
E -->|No| O[Origin Laravel or Object Store]
O --> C[Store allowed response]
C --> U
H --> UEdge প্রথমে configured key খোঁজে। Miss-এ origin response-এর cache directives ও provider rules বিচার করে। Response reusable হলে পরের user hit পেতে পারেন। Query বা cookie key থেকে বাদ দিলে ভুল representation share হতে পারে। CDN purge-এর propagation instant ধরে নেবেন না; content-hashed URL দিয়ে asset version বদলানো অনেক ক্ষেত্রে সহজ।
PHP ও Laravel-এ প্রয়োগ
নিচের routes/web.php fragment শুধু public, nonpersonal catalog metadata ফেরায়। Product model-এর data public ধরে নেওয়া হয়েছে। s-maxage shared cache ও max-age browser-এর freshness বোঝায়; provider override থাকলে actual behavior বদলাবে। Price/stock-এর final checkout validation cache থেকে করবেন না।
use App\Models\Product;
use Illuminate\Support\Facades\Route;
Route::get('/public-catalog/{product}', function (Product $product) {
return response()->json([
'id' => $product->id,
'name' => $product->name,
'cover_url' => $product->cover_url,
])->header('Cache-Control', 'public, max-age=60, s-maxage=300');
});সুবিধা, সীমাবদ্ধতা ও trade-off
CDN origin load ও geographic latency কমাতে পারে, কিন্তু invalidation, billing ও vendor policy যোগ হয়। Short TTL দ্রুত update দেখায় কিন্তু miss বাড়ায়। Long TTL bandwidth বাঁচায় কিন্তু পুরোনো response দীর্ঘক্ষণ থাকে। Private invoice-এ authorization, no-store policy এবং signed access-এর সঠিক boundary দরকার; signed URL নিজেও bearer credential, leak হলে expiry পর্যন্ত access মিলতে পারে।
সাধারণ ভুল
- Authorization header বা session cookie আছে তবু public caching করা।
- Cache key-তে locale বা tenant variation ভুলে যাওয়া।
- CDN hit ratio বেশি মানেই checkout fast বলা।
আরও একটু গভীরে
Cache poisoning এড়াতে origin routing ও header trust পরিষ্কার রাখুন। Unbounded query variation cache cardinality বাড়ায়; সব query ignore করলে correctness ভাঙতে পারে। Stale-while-revalidate latency কমাতে পারে, কিন্তু freshness requirement অনুযায়ী ব্যবহার করুন। Edge function-এ secret, compute limit ও data residency-এর constraint থাকে; heavy checkout transaction edge-এ সরালেই consistency সহজ হয় না। Origin failure-এ stale serve হবে কি না explicit policy রাখুন।
মনে রাখুন
Reusable public response edge-এ রাখুন। Cache key-কে representation identity হিসেবে ভাবুন। Personalized content ও correctness-sensitive writes-এর boundary আলাদা যাচাই করুন।
নিজে চেষ্টা করুন
একটি staging catalog endpoint-এ Cache-Control এবং CDN cache-status headers দেখুন। দুটি locale ও দুটি customer session দিয়ে ভুল content share হচ্ছে কি না পরীক্ষা করুন। Asset filename version বদলে purge ছাড়া deployment-এর আচরণ লিখুন।
নিজের বোঝা যাচাই করুন
1. CDN কি database replica?
না। সাধারণত response বা object delivery cache করে। Database transaction, constraints বা authoritative write semantics সরাসরি দেয় না।
2. s-maxage কেন আলাদা?
Shared cache-এর freshness browser-এর থেকে আলাদা হতে পারে। Browser max-age ও edge override বাস্তবে পরীক্ষা করা দরকার।
3. Purge সঙ্গে সঙ্গে হয়?
সব edge-এ instant ধরে নেওয়া উচিত নয়। Provider guarantee দেখুন; immutable versioned assets পুরোনো content overwrite-এর জটিলতা কমায়।
4. Signed URL public করা যাবে?
এটি access capability। অনুমোদিত user-কে সীমিত expiry-সহ দিন; logs, referrer ও sharing-এ leak হতে পারে।
5. কী মাপব?
Hit/miss, origin request rate, regional latency, stale response ও bandwidth cost। Hit ratio-এর সঙ্গে correctness ও user performance-ও দেখুন।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।