تحديد المعدّل (Rate Limiting) أساسي لحماية الواجهات البرمجية من إساءة الاستخدام وضمان الاستخدام العادل والحفاظ على استقرار النظام. في 2026، أصبحت استراتيجيات تحديد المعدّل المتطورة شرطاً أساسياً لواجهات الإنتاج.
خوارزميات تحديد المعدّل
دلو الرموز (Token Bucket)
يسمح بالدفعات مع الحفاظ على متوسط المعدّل. تُضاف الرموز بمعدّل ثابت وتُستهلَك لكل طلب.
النافذة المنزلقة (Sliding Window)
أنعم من النوافذ الثابتة، إذ يحسب الطلبات في فترة زمنية متدحرجة.
الدلو المُسرّب (Leaky Bucket)
يعالج الطلبات بمعدّل ثابت، مع وضع الطلبات الزائدة في طابور.
التطبيق باستخدام Redis
// Sliding window rate limiter
async function checkRateLimit(userId, limit, windowMs) {
const key = `ratelimit:${userId}`
const now = Date.now()
const windowStart = now - windowMs
await redis.zremrangebyscore(key, 0, windowStart)
const count = await redis.zcard(key)
if (count >= limit) {
return { allowed: false, retryAfter: windowMs / 1000 }
}
await redis.zadd(key, now, `${now}`)
await redis.expire(key, Math.ceil(windowMs / 1000))
return { allowed: true, remaining: limit - count - 1 }
}
رؤوس تحديد المعدّل
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1640995200
Retry-After: 60
استراتيجيات متقدمة
- حدود متدرّجة: حدود مختلفة لكل خطة
- حدود نقاط النهاية: حدود أصرم على العمليات المكلفة
- حدود تكيّفية: تتعدّل بناءً على حِمل النظام
- سمعة المستخدم: حدود أعلى للمستخدمين الموثوقين
المعالجة من جانب العميل
طبّق التراجع التدريجي الأُسّي واحترم رؤوس Retry-After لتجنّب إغراق نقاط النهاية محدودة المعدّل.
التعليقات (0)
اترك تعليقًا
لا توجد تعليقات بعد. كن أول من يشارك أفكاره!