0Pricing
Lua Academy · درس

تحديد معدل الطلبات باستخدام Lua

نفّذ محددات معدل الطلبات بالنافذة المنزلقة ذريًا في Redis Lua

تحديد معدل الطلبات باستخدام Lua درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

لماذا Redis لتحديد معدل الطلبات؟

يوفر Redis عمليات ذرّية وسرعة الذاكرة والمشاركة في الحالة بين خوادم تطبيقات متعددة، مما يجعله مناسبًا لتحديد معدل الطلبات الموزع.

عداد نافذة زمنية ثابتة بسيط

احسب عدد الطلبات في كل نافذة زمنية باستخدام INCR وEXPIRE.

EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local count = redis.call('INCR', key)
if count == 1 then
  redis.call('EXPIRE', key, window)
end
if count > limit then
  return 0  -- rejected
end
return 1  -- allowed
" 1 rate:user:123 100 60

نافذة منزلقة باستخدام المجموعات المرتبة

يستخدم محدِّد معدل طلبات أكثر دقة مجموعة مرتبة تعتمد على الطابع الزمني. أزل الإدخالات القديمة، وأضف الطلب الحالي، ثم احسب حجم المجموعة.

EVAL "
local key = KEYS[1]
local now = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local limit = tonumber(ARGV[3])
redis.call('ZREMRANGEBYSCORE', key, 0, now - window * 1000)
redis.call('ZADD', key, now, now .. math.random())
redis.call('EXPIRE', key, window)
local count = redis.call('ZCARD', key)
if count > limit then return 0 end
return 1
" 1 slidingRate:user:123 1706000000000 60 100

خوارزمية دلو الرموز

يتيح دلو الرموز استقبال دفعات من الطلبات مع الحفاظ على معدل متوسط. أعد ملء الرموز بمرور الوقت؛ إذ يستهلك كل طلب رمزًا واحدًا.

خوارزمية الدلو المتسرّب

يفرض الدلو المتسرّب معدلًا ثابتًا صارمًا. توضع الطلبات في قائمة انتظار (الدلو) وتُعالَج بمعدل تصريف ثابت. وتُرفض الطلبات التي تتجاوز السعة.

الحدود لكل مستخدم ولكل IP

حدّد مفتاح محدِّد معدل الطلبات باستخدام معرّف المستخدم أو مفتاح API أو عنوان IP: rate:{userId}، rate:{ip}، rate:{apiKey}.

حدود معدلات الطلبات المتدرجة

طبّق حدودًا مختلفة بناءً على فئة المستخدم (مجاني مقابل احترافي). تحقّق من فئة المستخدم قبل اختيار الحد الذي ستفرضه.

EVAL "
local tier = redis.call('HGET', 'user:tier', ARGV[1])
local limit = tier == 'pro' and 10000 or 1000
-- ... rest of rate limit check
" 0 "userId123"

إرجاع الترويسات

أعد من السكريبت عدد الطلبات المتبقية ووقت إعادة الضبط، حتى يتمكن التطبيق من تعيين ترويسات X-RateLimit في استجابة HTTP.

return {allowed, limit - count, resetTime}

الضمان الذري الموزع

بما أن فحص حد معدل الطلبات بالكامل موجود في سكريبت EVAL واحد، فإنه يكون ذريًا عبر جميع مثيلات خوادم التطبيق التي تشارك عنقود Redis.

ملاحظة حول Redis Cluster

في وضع Redis Cluster، يجب أن تجزّئ جميع KEYS المستخدمة في السكريبت إلى الفتحة نفسها. استخدم علامات التجزئة: rate:{user123}:requests لفرض وضعها في الموقع نفسه.

مراقبة حدود معدلات الطلبات

سجّل الطلبات المرفوضة مع معلومات المستخدم أو IP. أنشئ تنبيهات عند ارتفاع معدلات الرفض ارتفاعًا مفاجئًا (فهذا يشير إلى هجوم أو إعداد غير صحيح).

سؤال حول تحديد معدل الطلبات

لماذا يكون سكريبت Lua في Redis أفضل لتحديد معدل الطلبات من العدادات الموجودة في التطبيق؟

مراجعة: تحديد معدل الطلبات باستخدام Lua

نفّذ محددات معدلات الطلبات في Redis Lua باستخدام INCR+EXPIRE (النافذة الثابتة) أو المجموعات المرتبة (النافذة المنزلقة). يضمن السكريبت الذري صحة النتائج عبر خوادم التطبيقات الموزعة. أعد الحصة المتبقية لاستخدامها في ترويسات HTTP.

الأسئلة الشائعة

هل درس «تحديد معدل الطلبات باستخدام Lua» مجاني؟

نعم — نص درس «تحديد معدل الطلبات باستخدام Lua» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «تحديد معدل الطلبات باستخدام Lua»؟

نفّذ محددات معدل الطلبات بالنافذة المنزلقة ذريًا في Redis Lua تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تحديد معدل الطلبات باستخدام Lua»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بيئة EVAL وRedis Lua
  2. العمليات الذرية والمعاملات
  3. تحديد معدل الطلبات باستخدام Lua
  4. ‏SCRIPT LOAD وEVALSHA
← العودة إلى Lua Academy