خوارزميات تحديد معدل الطلبات
قارنوا بين المحددات الثابتة والمنزلقة ومحدّدات الرموز والتزامن
خوارزميات تحديد معدل الطلبات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
لماذا نحدد معدل الطلبات؟
يحدّد تحديد معدل الطلبات عدد الطلبات التي يمكن للعميل إرسالها خلال فترة زمنية. وهو يحمي واجهة API من إساءة الاستخدام، والعملاء الذين يرسلون طلبات مفرطة، والارتفاعات المفاجئة غير المقصودة في حركة المرور، ويحافظ على عدالة توزيع السعة بين المستخدمين.
// e.g. allow 100 requests per minute per API keyتحديد معدل الطلبات المدمج
منذ .NET 7، تتضمن ASP.NET Core middleware أصليًا ومتكاملًا لتحديد معدل الطلبات في Microsoft.AspNetCore.RateLimiting، مع أربع خوارزميات مدمجة.
// Algorithms: Fixed Window, Sliding Window,
// Token Bucket, Concurrencyالنافذة الثابتة
تسمح خوارزمية النافذة الثابتة بعدد N من الطلبات في كل كتلة زمنية ثابتة. وعند انتهاء الكتلة، يُعاد ضبط العداد إلى الصفر.
إنها بسيطة، لكن الارتفاعات المفاجئة عند حدود النافذة قد تضاعف المعدل الفعلي مؤقتًا.
// 10 requests per 60s window
// All 10 used at 0:59, 10 more at 1:00 -> 20 in 2 secondsالنافذة المنزلقة
تخفف النافذة المنزلقة مشكلة الحدود بتقسيم النافذة إلى مقاطع وترحيل المقاطع المنتهية تدريجيًا، بحيث ينطبق الحد على أي نافذة زمنية متصلة.
// 10 requests per 60s, 6 segments of 10s each
// The count slides as each segment expiresدلو الرموز
يحتوي دلو الرموز على مجموعة من الرموز. يستهلك كل طلب رمزًا واحدًا، وتُعاد تعبئة الرموز بمعدل ثابت. ويسمح ذلك بارتفاعات قصيرة في عدد الطلبات تصل إلى سعة الدلو، مع فرض متوسط طويل الأمد.
// Bucket = 10 tokens, refill 5 tokens / 10s
// Burst of 10 allowed, then 5 every 10 secondsمحدِّد التزامن
يختلف محدِّد التزامن: فهو يحد عدد الطلبات قيد المعالجة في الوقت نفسه، وليس عددها خلال وحدة زمنية. وهو مثالي لحماية العمليات المكلفة.
// At most 5 concurrent requests in flight
// The 6th waits in the queue or is rejectedقائمة الانتظار
يمكن لكل محدِّد وضع الطلبات التي تتجاوز الحد في قائمة انتظار بدلًا من رفضها فورًا. وتحدد QueueLimit حجم قائمة الانتظار، بينما تحدد QueueProcessingOrder ترتيب العدالة (الأقدم أولًا أو الأحدث أولًا).
// QueueLimit = 2, OldestFirst
// Over-limit requests wait if a slot exists, else get 503/429اختيار الخوارزمية
طابق الخوارزمية مع الهدف:
- النافذة الثابتة: الأبسط، وكافية في كثير من الحالات.
- النافذة المنزلقة: أكثر سلاسة وتتجنب الارتفاعات المفاجئة عند الحدود.
- دلو الرموز: يسمح بارتفاعات مفاجئة مضبوطة.
- التزامن: يحد الحمل المتزامن، وليس المعدل.
// Bursty clients -> token bucket
// Expensive endpoint -> concurrencyالتقسيم
تُطبّق الحدود لكل مفتاح تقسيم - عادةً ما يكون المستخدم أو مفتاح API أو عنوان IP - حتى لا يستنفد عميل واحد كثير الطلبات حصة الجميع. أما التقسيم المشترك الواحد فيفرض حدًا على كل حركة المرور معًا.
// Partition by user id, IP, or API key
// Each partition gets its own independent counterما يراه العميل
يعيد الطلب المرفوض حالة HTTP 429 Too Many Requests. كما تعيد واجهة API المصممة جيدًا ترويسة Retry-After لتخبر العميل بموعد المحاولة مجددًا.
// HTTP/1.1 429 Too Many Requests
// Retry-After: 30تحديد معدل الطلبات مقابل الإبطاء والحصص
هذه مفاهيم مترابطة: يحد تحديد معدل الطلبات تكرار الطلبات على المدى القصير، وتحد الحصص الإجمالي على المدى الأطول (لكل يوم أو شهر)، بينما يؤدي الإبطاء إلى إبطاء الطلبات بدلًا من رفضها. يركّز middleware على تحديد معدل الطلبات.
// rate limit: 100/min quota: 10000/dayتحقق سريع
اختبر مدى استيعابك للخوارزميات.
مراجعة
لقد تعلمت مفاهيم تحديد معدل الطلبات:
- أربع خوارزميات: النافذة الثابتة والنافذة المنزلقة ودلو الرموز والتزامن.
- يسمح دلو الرموز بالارتفاعات المفاجئة، بينما يحد التزامن الحمل المتزامن.
- تُطبّق الحدود لكل مفتاح تقسيم، وتخفف قوائم الانتظار من فائض الطلبات.
- تحصل الطلبات المرفوضة على الحالة 429 مع الترويسة
Retry-After.
التالي: ضبط middleware.
الأسئلة الشائعة
هل درس «خوارزميات تحديد معدل الطلبات» مجاني؟
نعم — نص درس «خوارزميات تحديد معدل الطلبات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «خوارزميات تحديد معدل الطلبات»؟
قارنوا بين المحددات الثابتة والمنزلقة ومحدّدات الرموز والتزامن تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «خوارزميات تحديد معدل الطلبات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- خوارزميات تحديد معدل الطلبات
- تهيئة Middleware تحديد معدل الطلبات
- أساسيات التخزين المؤقت للمخرجات
- سياسات التخزين المؤقت وإبطالها