"ধীর কাজের জন্য user কে অপেক্ষা করানোর দরকার নেই: কাজটা এখন নিন, পরে করুন।"
স্টেজ ০৪ শেষে আমাদের system অনেক দিক থেকেই scalable। Read ভাগ হয়ে যাচ্ছে, write shard হচ্ছে, content সারা পৃথিবীতে পৌঁছে যাচ্ছে। কিন্তু একটা জিনিস এখনো বদলায়নি: প্রতিটা request এখনো synchronous। মানে user একটা কাজ চাইলে, কাজটা পুরো শেষ না হওয়া পর্যন্ত তাকে বসে অপেক্ষা করতে হয়।
কিছু কাজ স্বভাবতই ধীর (video encode করা, email পাঠানো, report বানানো)। এসব কাজের জন্য user কে আটকে রাখার কোনো মানে নেই। এই স্টেজে আমরা Message Queue দিয়ে “কাজ নেওয়া” আর “কাজ করা” কে আলাদা করবো। User সাথে সাথে জানবে যে কাজটা নেওয়া হয়েছে, আর ধীর কাজটা পরে background এ চলতে থাকবে। স্টেজ শেষে আপনি বুঝবেন, কখন একটা কাজ queue তে রাখা উচিত, আর তার জন্য কী cost দিতে হয়।
০১ এই স্টেজে যা শিখবো
| সেশন | শিরোনাম | এই সেশনের লক্ষ্য |
|---|---|---|
| সেশন ০৮ | Message Queue | Synchronous এর সীমা, কাজ এখন নেওয়া আর পরে করা, producer/queue/consumer, ACK আর visibility timeout, at-least-once delivery আর idempotency, আর টানা overload এ backpressure। |
| সেশন ০৯ | Background Jobs ও Worker Pool | Job এর চার রকম আর cron, worker pool আর CPU-bound বনাম IO-bound মাপ, concurrency limit, exponential backoff আর jitter, timeout আর job status, graceful shutdown, আর distributed lock দিয়ে একই cron দুইবার চলা ঠেকানো। |
| সেশন ১০ | Event-Driven Architecture | Command বনাম event, queue বনাম pub/sub, Kafka log এর partition, offset, consumer group আর replay, key দিয়ে ক্রম, choreography, schema বদলানো, event sourcing, আর কখন event নয়। |
০২ স্টেজ শেষে যা যা করতে পারবেন
- Synchronous model এর সীমা চিনতে পারবেন: কখন user কে অপেক্ষা করানো সমস্যা হয়ে দাঁড়ায়।
- Asynchronous processing ব্যাখ্যা করতে পারবেন: সাথে সাথে acknowledge করে আসল কাজটা পরে করা।
- Producer / Queue / Consumer model, আর এভাবে আলাদা করার সুবিধা বোঝাতে পারবেন।
- Load leveling ব্যাখ্যা করতে পারবেন: হঠাৎ বাড়তি traffic এলে queue কীভাবে সেটা জমিয়ে রেখে ধীরে ধীরে কাজ করায়।
- Ack + visibility timeout দিয়ে কীভাবে crash এর পরও কাজ টিকে থাকে, সেটা বলতে পারবেন।
- Delivery guarantee গুলো (at-most-once, at-least-once, exactly-once) আলাদা করতে পারবেন।
- Idempotency দিয়ে কীভাবে duplicate processing নিরাপদ করা যায়, সেটা বলতে পারবেন।
- Backpressure, autoscaling, priority, shedding দিয়ে লম্বা সময়ের overload সামলাতে পারবেন।
- Background job (scheduled, delayed, recurring) চালাতে পারবেন, আর কাজের ধরন দেখে worker pool এর size ঠিক করতে পারবেন।
- Exponential backoff আর jitter দিয়ে কেন retry করতে হয়, সেটা বোঝাতে পারবেন।
- Event আর command এর পার্থক্য, আর pub/sub দিয়ে একটা event অনেক জায়গায় পৌঁছানো বোঝাতে পারবেন।
- Kafka এর partition, offset আর consumer group কীভাবে কাজ করে, সেটা বলতে পারবেন।
০৩ এর পর যা আসছে...
এই স্টেজে আমরা একটা system এর ভেতরেই কাজগুলো আলাদা করেছি: queue দিয়ে, background worker দিয়ে, আর event দিয়ে। স্টেজ ০৬ এ আমরা আরো এক ধাপ এগোবো, পুরো monolith টাকেই ভাঙবো। Microservices কখন ও কেন দরকার, service গুলো একে অপরের সাথে কীভাবে কথা বলে, API Gateway, আর service discovery: এগুলোই আসছে।