TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #384 218
🎯 الگوریتم Token Bucket


🚦 چرا Rate Limiting مهم است؟
هر API یا سیستم، محدودیت‌هایی دارد.
اگر هیچ کنترلی نباشد، ممکن است یک کاربر با ارسال درخواست‌های بیش از حد، سرور را از کار بیندازد.

✅ Rate Limiting
این مشکل را حل می‌کند. با کنترل تعداد درخواست‌هایی که در بازه‌ی زمانی مشخص اجازه‌ی عبور دارند.

الگوریتم‌های متعددی برای این کار وجود دارند:
📍 Fixed Window
📍 Sliding Window
📍 Leaky Bucket
📍 Token Bucket

در میان آن‌ها، Token Bucket یکی از پرکاربردترین‌هاست،
چون تعادل خوبی بین کنترل پایدار ترافیک و امکان ارسال «Burst»‌های کوتاه از درخواست‌ها ایجاد می‌کند.

💡 Token Bucket چیست؟

فرض کنید یک سطل (bucket) دارید که داخل آن توکن‌ها ریخته می‌شوند:

🪙 توکن‌ها با نرخ ثابتی اضافه می‌شوند (مثلاً ۵ توکن در هر ثانیه)

هر درخواست برای عبور، باید یک توکن مصرف کند

اگر توکن در دسترس باشد → ✅ درخواست مجاز است

اگر سطل خالی باشد → ❌ درخواست رد (یا معلق) می‌شود

سطل ظرفیت محدودی دارد، پس تعداد توکن‌ها نمی‌تواند بی‌نهایت زیاد شود

🔁 نتیجه؟

این روش اجازه می‌دهد سیستم برای مدت کوتاهی درخواست‌های بیشتری بپذیرد (burst)،
اما در بازه‌ی بلندمدت، نرخ کلی همچنان کنترل‌شده باقی بماند.

🧮 فرمول ریاضی پشت Token Bucket

🪣 C = ظرفیت سطل
⚡️ R = نرخ پر شدن (تعداد توکن در هر ثانیه)
⏱️ T = مدت‌زمان سپری‌شده از آخرین پر شدن

در هر لحظه، تعداد توکن‌ها برابر است با:
tokens = min(C, tokens + R * T)

وقتی درخواستی وارد می‌شود:
if tokens > 0 → allow and tokens -= 1
else → reject


📊 مثال اجرا

• ظرفیت سطل = 10
• نرخ پر شدن = 1 توکن در ثانیه

🕒 زمان‌بندی رخدادها:
• در زمان 0s → سطل پر است (10 توکن)
• کاربر 5 درخواست فوری می‌فرستد → 5 توکن باقی می‌ماند
• پس از 5 ثانیه → 5 توکن جدید اضافه می‌شود → سطل دوباره پر (10 توکن)
• کاربر 15 درخواست می‌فرستد → فقط 10 درخواست مجاز، 5 درخواست رد می‌شوند

الگوریتم Token Bucket اجازه‌ی ارسال ناگهانی درخواست‌ها (burst) را تا سقف ظرفیت سطل می‌دهد،
اما در بلندمدت، نرخ کلی ارسال درخواست‌ها را محدود نگه می‌دارد.
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →