پاسخ چالش:
فرض کنیم:
• تعداد پرداختها: 20,000
• مدت زمان هر درخواست: 500ms
• بازه زمانی: 1 ساعت (3600 ثانیه)
حداقل نرخ موردنیاز:
20,000 ÷ 3600 ≈ 5.56 RPS
──────────────────────────────────────────────
سناریوهای مختلف
──────────────────────────────────────────────
┌────────────┬─────────────┬────────────────────┬────────┐
│ ریت لیمیت│ Throughput │ زمان اتمام │ وضعیت │
├────────────┼─────────────┼────────────────────┼────────┤
│ 5 RPS │ 5 req/sec │ 66.7 دقیقه │ ❌ │
│ 10 RPS │ 10 req/sec │ 33.3 دقیقه │ ✅ │
│ 20 RPS │ 20 req/sec │ 16.7 دقیقه │ ✅ │
│ 50 RPS │ 50 req/sec │ 6.7 دقیقه │ ✅ │
│ 100 RPS │ 100 req/sec │ 3.3 دقیقه │ ✅ │
└────────────┴─────────────┴────────────────────┴────────┘
──────────────────────────────────────────────
نکته مهم
──────────────────────────────────────────────
اگر هر درخواست به طور متوسط 500ms طول بکشد،
هر Worker حداکثر میتواند:
1 ÷ 0.5 = 2 Request/sec
ارسال کند.
در نتیجه:
Workers ≈ RateLimit × ResponseTime
که با ResponseTime = 0.5s میشود:
Workers ≈ RateLimit × 0.5
مثال:
┌────────────┬────────────────┐
│ Rate Limit │ ورکر موردنیاز │
├────────────┼────────────────┤
│ 10 RPS │ 5 │
│ 20 RPS │ 10 │
│ 50 RPS │ 25 │
│ 100 RPS │ 50 │
└────────────┴────────────────┘
اگر Worker بیشتری ایجاد کنید،
افزایش کارایی نخواهید داشت؛
زیرا همه پشت Rate Limiter منتظر میمانند.
──────────────────────────────────────────────
نتیجه
──────────────────────────────────────────────
اگر بانک Rate Limit = 5 RPS داشته باشد:
5 × 3600 = 18,000 پرداخت
بنابراین انجام 20,000 پرداخت در بازه
9 تا 10 صبح از نظر ریاضی غیرممکن است.
اما اگر Rate Limit حداقل 6 RPS باشد:
6 × 3600 = 21,600 پرداخت
در این حالت ظرفیت کافی برای انجام همه
20,000 پرداخت وجود دارد.
البته در عمل بهتر است مقداری ظرفیت
برای Retry، Timeout و خطاهای موقتی
در نظر گرفته شود؛ بنابراین Rate Limit
حدود 8 تا 10…
خواندن کامل ←