0Pricing
Go Academy · درس

مفهوم دلو الرموز

حدّد معدلات الطلبات

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

لماذا نحدد المعدل

يحد تحديد المعدل عدد العمليات التي تحدث في وحدة زمنية معينة. فهو يحمي واجهات API من إساءة الاستخدام، ويحترم حصص الجهات الخارجية، ويحافظ على استقرار الأنظمة تحت الحمل.

  • يمنع التحميل الزائد
  • يفرض الاستخدام العادل
  • يحترم حدود الجهة السابقة

نموذج دلو الرموز

تخيّلوا دلوًا يحتوي على رموز. يجب أن يأخذ كل طلب رمزًا كي يتابع التنفيذ. وتُعاد تعبئة الرموز بمعدل ثابت. فإذا كان الدلو فارغًا، ينتظر الطلب أو يُرفض.

المعدل والاندفاع

يحدّد معاملان دلو الرموز: المعدل (عدد الرموز المضافة في الثانية) والاندفاع (سعة الدلو). ويسمح الاندفاع بارتفاعات قصيرة تتجاوز المعدل الثابت.

إعادة التعبئة بمرور الوقت

إذا كان المعدل 5 رموز في الثانية، يظهر رمز واحد تقريبًا كل 200 ميلي ثانية. ولا يحتوي الدلو أبدًا على رموز أكثر من سعة الاندفاع، لذلك لا تتراكم السعة غير المستخدمة إلى الأبد.

السماح بالاندفاعات

يعني اندفاع بحجم 10 إمكانية تنفيذ ما يصل إلى 10 طلبات فورًا إذا كان الدلو ممتلئًا. وبعد ذلك تُنظَّم الطلبات وفق المعدل الثابت. ويوازن ذلك بين سرعة الاستجابة والتحكم.

فحص بسيط قائم على الوقت

يمكنكم تقريب تحديد المعدل باستخدام ticker يحرّر الإذن على فواصل زمنية ثابتة. وينتظر كل طلب الإشارة الزمنية التالية.

ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
    <-ticker.C
    fmt.Println("request", i)
}

دلو الرموز مقابل الدلو المتسرب

يُفرّغ الدلو المتسرب محتواه بمعدل ثابت ويُنعّم المخرجات بالكامل، مانعًا الاندفاعات. أما دلو الرموز فيسمح باندفاعات تصل إلى سعته. ويُعد دلو الرموز أكثر شيوعًا لتحديد معدلات واجهات API.

محاكاة دنيا لدلو الرموز

يحاكي هذا المثال القابل للتشغيل دلو رموز سعته 3، يُعاد ملؤه كل 100ms، ويوضح الطلبات المسموح بها.

package main

import (
    "fmt"
    "time"
)

func main() {
    tokens := 3
    last := time.Now()
    rate := 100 * time.Millisecond
    for i := 0; i < 6; i++ {
        elapsed := time.Since(last)
        refill := int(elapsed / rate)
        if refill > 0 {
            tokens += refill
            if tokens > 3 {
                tokens = 3
            }
            last = time.Now()
        }
        if tokens > 0 {
            tokens--
            fmt.Println("request", i, "allowed")
        } else {
            fmt.Println("request", i, "rejected")
        }
        time.Sleep(40 * time.Millisecond)
    }
}

Allow أم Wait أم Reserve

توفر محددات المعدل عادةً ثلاثة سلوكيات: يعيد Allow فورًا القيمة true أو false، ويوقف Wait التنفيذ حتى يتوفر رمز، ويخبركم Reserve بمدة الانتظار. اختاروا السلوك وفقًا لإمكانية إيقاف التنفيذ من عدمها.

أين توضع الحدود

يمكن أن تكون حدود المعدل لكل عميل، أو لكل نقطة نهاية، أو عامة. ويفرض جدول يربط المحددات بعناوين IP للعملاء حصصًا لكل عميل، بينما يحدد محدد مشترك واحد إجمالي معدل النقل.

اختيار المعاملات

طابقوا المعدل مع حصة الجهة اللاحقة. فإذا كانت واجهة API تسمح بـ 600 طلب في الدقيقة، فاضبطوا المعدل على 10 طلبات في الثانية. واضبطوا الاندفاع لاستيعاب الارتفاعات المتوقعة دون تجاوز المتوسط.

اختبار سريع

اختبروا مدى فهمكم لدلو الرموز.

مراجعة

تعلّمتم مفهوم دلو الرموز:

  • تُستهلك الرموز لكل طلب وتُعاد تعبئتها بمعدل معين
  • الاندفاع هو سعة الدلو لاستيعاب الارتفاعات
  • يسمح دلو الرموز بالاندفاعات، بينما لا يسمح بها الدلو المتسرب
  • تُعد Allow وWait وReserve واجهات API الشائعة

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

هل درس «مفهوم دلو الرموز» مجاني؟

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

ماذا ستتعلم في «مفهوم دلو الرموز»؟

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

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

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

كم من الوقت يستغرق درس «مفهوم دلو الرموز»؟

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

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

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

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

  1. مفهوم دلو الرموز
  2. golang.org/x/time/rate
  3. خنق Goroutines
  4. التراجع وإعادة المحاولة
← العودة إلى Go Academy