Backpressure یا بک پرشر به معنی کنترل فشار ورودی زمانی است که سرعت تولید کار از ظرفیت پردازش بیشتر میشود. هدف جلوگیری از افزایش نامحدود صف، مصرف حافظه و افزایش تاخیر است. این مفهوم در Stream Processing، شبکه، صف پیام و سرور HTTP به کار میرود.
مثال عملی در فروشگاه
فرض کنید سرویس عکس محصول در ثانیه ۱۰۰۰ درخواست دریافت میکند ولی فقط توان پردازش ۱۰۰ تصویر را دارد. بدون محدودیت، صف و زمان انتظار رشد میکند. بک پرشر باعث میشود تولیدکننده آهسته شود، درخواست رد شود یا ظرفیت بهصورت کنترلشده افزایش یابد.
| راهکار | نتیجه | ملاحظه |
|---|---|---|
| Bounded Queue | کنترل تعداد کار منتظر | باید رفتار هنگام پر بودن مشخص شود |
| Rate Limiting | کنترل ورودی در مرز API | 429 و Retry-After |
| Concurrency Limit | محدودکردن کارهای همزمان | خطر افزایش زمان صف |
| Load Shedding | رد کردن بار اضافی | باید اولویت درخواستها معلوم باشد |
| Consumer Pull / Demand | مصرف براساس ظرفیت | نیازمند پروتکل سازگار |
نمونه Go با Channel ظرفیتدار
jobs := make(chan Job, 100)
select {
case jobs <- job:
// accepted
default:
// return 429 or enqueue to a durable broker
}
نمونه Python با asyncio
import asyncio
queue = asyncio.Queue(maxsize=100)
async def submit(order):
await queue.put(order) # producer waits when full
async def consume():
while True:
order = await queue.get()
try:
await process(order)
finally:
queue.task_done()
نکته فنی
Scale out بدون محدود کردن فشار روی دیتابیس همیشه کافی نیست. بک پرشر، Timeouts، ریت لیمیتر و Circuit Breaker باید هماهنگ طراحی شوند.
اصطلاحات مرتبط: صف، ورکر پول، ریت لیمیتینگ، مقیاسپذیری افقی، مهلت زمانی، قطعکننده مدار، تاخیر.