بازگشت به کتابخانهکتابخانه4.4Rate Limiting: سقف دم در
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 4.4فصل ۴Cache، Queue و جریان

Rate Limiting: سقف دم در

  • ~۱۰ دقیقه
  • ۴ پرسش
  • متن را انتخاب کن تا هایلایت شود

رستوران شیک دم در یک میزبان دارد. هر میز در هر ساعت فقط چند مهمان می‌پذیرد. اگر یک گروه عجول — یا یک اپ باگ‌دار — بخواهد هر دقیقه ده بار بیاید، میزبان می‌گوید «الان جا نیست؛ بیست دقیقه دیگر بیا». در وب به این سقف می‌گویند Rate Limiting. جواب رد معمولاً 429 است، با هدر Retry-After.

شغل Rate Limiter این است که هر کلاینت در هر بازه چند درخواست حق دارد. سپر است برابر سوءاستفاده، باگ کلاینت، و صورتحساب سرسام‌آور ابر. بدون آن، یک اپ خراب کل فروشگاه را می‌خواباند.

میزبان رستوران و سطل ژتون
میزبان دم در از سطل ژتون می‌دهد. صف کوتاه است؛ یکی را برمی‌گرداند که بعداً بیاید. همان شغل Rate Limiter و پاسخ 429.

چهار الگوریتم، چهار شغل

همه «سقف می‌گذارند». فرق‌شان این است Burst کوتاه را راه می‌دهند یا له می‌کنند، و در مرز پنجره دروغ می‌گویند یا نه.

الگوریتمایدهنکته
Token Bucketسطلی که با نرخ ثابت پر می‌شود؛ هر درخواست یک ژتون می‌خرداجازه Burst کوتاه + نرخ میانگین کنترل‌شده؛ محبوب‌ترین
Leaky Bucketخروجی با نرخ ثابت چکه می‌کندخروجی صاف؛ Burst را له می‌کند
Fixed Windowشمارنده هر پنجره — مثلاً هر دقیقهساده؛ در مرز پنجره‌ها تا ۲ برابر حد رد می‌شود
Sliding Windowپنجره روی زمان می‌لغزد — لاگ یا تقریب وزنیدقیق‌تر، کمی گران‌تر

وقتی چند سرور داری

اگر هر Server شمارنده خودش را داشته باشد، سقف دروغ است: ده سرور یعنی ده برابر حد. شمارنده باید مشترک باشد — معمولاً Redis با اسکریپت اتمی Lua که «بخوان، کم کن، جواب بده» را یک‌جا انجام می‌دهد تا race نشود.

  • کلید شمارش را لایه‌لایه بگذار: per-user ،per-IP ،per-API-key — و یک سقف کلی برای کل سیستم.
  • همیشه هدر بده: X-RateLimit-Limit ،X-RateLimit-Remaining ،Retry-After. کلاینت خوب خودش عقب می‌نشیند.
  • در لبه اعمال کن — API Gateway — نه در عمق سیستم. درخواست ردشده نباید CPU و DB بسوزاند.
  • برای مهمان سخت‌گیر، برای مشتری پولی سخاوتمند. Limit بخشی از مدل تجاری است، نه فقط دفاع فنی.

به زبان ساده

میزبان دم در ژتون می‌دهد؛ اگر سطل خالی شد می‌گوید بعداً بیا. همان Rate Limiting و پاسخ 429.

مثال واقعی

اپ باگ‌دار هزار درخواست در ثانیه می‌فرستد؛ Gateway با سقف per-API-key جلویش را می‌گیرد تا بقیه آسیب نبینند.

دانش‌سنجی

آزمون درس

۴ Q
01
کدام الگوریتم Burst کوتاه را مجاز ولی نرخ میانگین را کنترل می‌کند؟
02
ضعف مشهور Fixed Window چیست؟
03
چرا شمارنده Rate Limit چند-سروری در Redis با اسکریپت اتمی می‌رود؟
04
پاسخ استاندارد به عبور از حد چیست؟