TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #385 248
📌مزایا و معایب


✅️مزایا:
🔹️ امکان ارسال ناگهانی چند درخواست (burst) را فراهم می‌کند، ولی میانگین نرخ را محدود نگه می‌دارد.

🔹️ باعث شکل‌دهی روان‌تر به ترافیک می‌شود (smooth traffic shaping).

🔹️ به‌طور گسترده در شبکه‌ها و APIها استفاده می‌شود.

❌️معایب:
🔹️کمی پیچیده‌تر از روش Fixed Window Counter است.

🔹️در سیستم‌های توزیع‌شده، نیاز به همگام‌سازی دقیق دارد.

مثال کد :
using System;

public class TokenBucket
{
private readonly int _capacity; // حداکثر تعداد توکن‌ها
private readonly double _refillRate; // نرخ پر شدن (توکن در هر ثانیه)
private double _tokens; // تعداد توکن‌های فعلی
private DateTime _lastRefill; // آخرین زمان پر شدن

public TokenBucket(int capacity, double refillRate)
{
_capacity = capacity;
_refillRate = refillRate;
_tokens = capacity;
_lastRefill = DateTime.UtcNow;
}

private void Refill()
{
var now = DateTime.UtcNow;
var elapsedSeconds = (now - _lastRefill).TotalSeconds;
var addedTokens = elapsedSeconds * _refillRate;

if (addedTokens >= 1)
{
_tokens = Math.Min(_capacity, _tokens + addedTokens);
_lastRefill = now;
}
}

public bool AllowRequest()
{
Refill();
if (_tokens >= 1)
{
_tokens -= 1;
return true;
}
return false;
}
}

public class Program
{
public static void Main()
{
var bucket = new TokenBucket(10, 1); // 10 توکن، پر شدن 1 توکن در هر ثانیه

// شبیه‌سازی درخواست‌ها در بازه‌های 200 میلی‌ثانیه
var timer = new System.Timers.Timer(200);
timer.Elapsed += (s, e) =>
{
Console.WriteLine($"Request allowed? {bucket.AllowRequest()}");
};
timer.Start();

Console.WriteLine("Press any key to stop...");
Console.ReadKey();
}
}


🚀 کاربردهای واقعی Token Bucket Algorithm

🔸 دروازه‌های API مثل AWS API Gateway، Nginx، Envoy از نسخه‌های مختلف این الگوریتم برای کنترل نرخ درخواست‌ها استفاده می‌کنند.

🔸 روترهای شبکه (Network Routers) برای Traffic Shaping یا همون تنظیم و کنترل جریان ترافیک به کار می‌ره تا از شلوغی شبکه جلوگیری بشه.

🔸 صف‌های پیام (Message Queues) برای جلوگیری از بار بیش‌ازحد روی مصرف‌کننده‌ها (Consumers) استفاده می‌شه.

⚖️ مقایسه با سایر روش‌ها

🪟 Fixed Window Counter →
ساده‌تره، ولی در مرز بازه‌ها ممکنه رفتار غیرمنصفانه نشون بده و اجازه‌ی Burst زیاد بده.

💧 Leaky Bucket →
نرخ خروج داده رو ثابت نگه می‌داره، اما انعطاف‌پذیری کمتری برای Burst داره.

🎯 Token Bucket →
ترکیبیه از نرخ ثابت و پشتیبانی از Burst کوتاه‌مدت — یعنی بهترین تعادل برای کنترل ترافیک در APIها.

🏁 نتیجه‌گیری

🔹 الگوریتم Token Bucket یکی از کاربردی‌ترین و مؤثرترین روش‌ها برای پیاده‌سازی Rate Limiting در سیستم‌هاست.
🔹 پیاده‌سازی اون سادهه، از ترافیک ناگهانی پشتیبانی می‌کنه و استفاده‌ی منصفانه از منابع رو تضمین می‌کنه.
🔹 اگر در حال ساخت API یا سیستم توزیع‌شده هستی،
حتماً این الگوریتم باید یکی از گزینه‌های اصلی تو باشه.

🔖هشتگ‌ها‌:
#TokenBucket #RateLimiting #SystemDesign #API #Networking
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 →