Backpressure ও Load Shedding: অতিরিক্ত চাপ নিয়ন্ত্রণ
Backpressure, Load Shedding, and Batching
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- Queue buffering বনাম unlimited accumulation
- Backpressure ও load shedding
- Bounded batching ও producer feedback
সমস্যা দিয়ে শুরু
Image worker প্রতি সেকেন্ডে দশটি job শেষ করে, কিন্তু API একশটি job নিচ্ছে। Queue response দ্রুত দিলেও backlog ক্রমে বাড়ছে; user কয়েক ঘণ্টা পরে result পান। Queue capacity সৃষ্টি করে না, arrival ও service rate-এর mismatch কিছু সময় শোষণ করে। Producer-কে সীমার খবর দিতে না পারলে overload শুধু পরে ঠেলে দেওয়া হয়।
সহজ করে বুঝি
Backpressure downstream saturation-এর signal upstream-এ ফিরিয়ে demand ধীর করে। Load shedding capacity ছাড়ালে কম গুরুত্বপূর্ণ কাজ reject/drop করে। Batching একসঙ্গে বহু item process করে per-item overhead কমাতে পারে; batch fill অপেক্ষা latency বাড়ায়। Bounded queue, maximum item size, deadline ও admission control overload-এর basic tools। HTTP 202 accepted মানে কাজ শেষ নয়; durable accepted job tracking ও expiry policy client-কে জানাতে হবে।
পরিচিত একটি উপমা
কুরিয়ার গুদামে সীমিত shelf আছে। কাউন্টারে শুধু receipt দিয়ে অসীম parcel নিলে পরে delivery time বেড়ে যায়। গুদাম ভর্তি হলে নতুন booking কমানো, জরুরি parcel অগ্রাধিকার এবং নির্দিষ্ট batch-এ sorting করা বাস্তব backpressure-এর মতো।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart TD
P[Producer request] --> A{Admission budget available}
A -->|No| R[429 or 503 and retry guidance]
A -->|Yes| Q[(Bounded work queue)]
Q --> B[Workers process bounded batches]
B --> M[Queue age and saturation signal]
M --> AAdmission policy queue-এর আগে চলে। Queue age ও worker saturation feedback দেয়। শুধুমাত্র approximate queue size read করে decision নিলে concurrent producers race করতে পারে; strict bound চাইলে atomic reservation বা broker capacity contract দরকার। Diagram-এর bounded queue একটি requirement, Laravel dispatch নিজে hard capacity bound enforce করে না।
PHP ও Laravel-এ প্রয়োগ
Controller fragment request-level submission throttle দেখায়, hard global queue cap নয়। Authenticated user, GenerateReport job ও async backend configured। Job accepts a user ID এবং result authorization আলাদা আছে ধরে নেওয়া হয়েছে। RateLimiter store shared configure করুন; ২০২ response-এ production job ID/status URL যোগ করুন।
use App\Jobs\GenerateReport;
use Illuminate\Support\Facades\RateLimiter;
$userId = auth()->id();
abort_unless($userId !== null, 401);
$key = "report-submit:{$userId}";
$accepted = RateLimiter::attempt($key, 2, function () use ($userId) {
GenerateReport::dispatch($userId);
return true;
}, 60);
if ($accepted === false) {
return response()->json(['message' => 'পরে আবার চেষ্টা করুন'], 429)
->header('Retry-After', '60');
}
return response()->json(['status' => 'accepted'], 202);সুবিধা, সীমাবদ্ধতা ও trade-off
Admission control user-কে early clear failure দেয় এবং latency collapse কমায়। Reject করলে availability কমে, কিন্তু পুরো system slow হওয়া থেকে বাঁচতে পারে। Priority queue গুরুত্বপূর্ণ কাজ আগে করে, lower-priority starvation risk রাখে। Batching throughput বাড়াতে পারে, কিন্তু failure-এ partial success ও retry granularity জটিল। Max batch size এবং max wait দুই সীমাই দিন।
সাধারণ ভুল
- Queue depth unlimited রেখে user-কে instant completion promise করা।
- সব rejected client-কে একই millisecond-এ retry করতে বলা।
- Per-user rate limiter-কে strict global queue capacity বলা।
আরও একটু গভীরে
Queueing model-এ sustained arrival rate service rate-এর বেশি হলে backlog অনির্দিষ্ট বাড়ে। Autoscaling-এর max worker downstream database capacity দিয়ে bounded। Deadline পেরোনো stale job skip করা যাবে কি না business policy ঠিক করে। Per-tenant fair scheduling বড় tenant-এর noisy-neighbor effect কমাতে পারে। Consumer prefetch বেশি হলে এক worker বহু job reserve করে fairness ও recovery দেরি করতে পারে; broker-specific setting পরীক্ষা করুন।
মনে রাখুন
Buffer finite এবং waiting time measurable রাখুন। Producer feedback ছাড়া queue overload লুকায়। Batch size, admission policy ও job deadline একসঙ্গে plan করুন।
নিজে চেষ্টা করুন
Arrival ৫০ jobs/second ও service ৩০ jobs/second ধরে দুই মিনিটে backlog growth হিসাব করুন। তারপর সর্বোচ্চ acceptable queue age থেকে admission threshold-এর design দিন। একই সঙ্গে worker crash ও client retries হলে fairness কী হবে লিখুন।
নিজের বোঝা যাচাই করুন
1. Queue দিলে overload শেষ?
না। Sustained demand capacity ছাড়ালে backlog বাড়ে। Queue সাময়িক burst শোষণ করে, কাজের capacity বানায় না।
2. Backpressure আর drop একই?
Backpressure upstream demand ধীর করার feedback। Shedding reject/drop policy; দুটো একসঙ্গে ব্যবহার করা যায়।
3. 202 কী নিশ্চিত করে?
Contract অনুযায়ী accepted for processing; completion নয়। Durable receipt ও tracking semantics স্পষ্ট করতে হবে।
4. Batch সবসময় ভালো?
না। Per-item overhead কমলেও fill wait, memory ও retry blast radius বাড়ে। Bounded size/time এবং partial failure handling দরকার।
5. Snippet hard queue limit?
না। এটি per-user submission throttle। Strict global admission-এর জন্য atomic reservation বা broker-enforced capacity আলাদা করতে হবে।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।