الأساسيات
عادةً ما يضيف محدد المعدل الموزع الذي تم تنفيذه بشكل صحيح (العد الذري، ذاكرة التخزين المؤقت الاحتياطية المحلية) أقل من مللي ثانية لكل طلب وفقًا للعديد من المصادر المتخصصة. تتبع بوابة Aurabase هذا النمط بالضبط: صندوق governor لبرامج مكافحة DoS المحلية، ونص Lua Redis الذري للعد الموزع بين المثيلات، وذاكرة تخزين مؤقت احتياطية moka إذا كان Redis غير متاح. تعمل دائرة القطع على تقليل زمن الوصول المتصور في حالة الفشل بدلاً من إضافته - فهي تعمل على تقصير فترة الانتظار حتى انتهاء المهلة الكاملة. لم يتم نشر أي أرقام لزمن وصول Aurabase حتى الآن: وإليك السبب، وكيف تعمل الآلية فعليًا.
مكافحة حجب الخدمة والفشل المتتالي، مشكلتان متميزتان
يعمل تحديد المعدل على حماية الواجهة الخلفية لديك من حركة المرور الزائدة، سواء كانت مشروعة أم لا - فهو يجيب على السؤال "هل يحق لهذا المتصل إرسال هذا الطلب الآن؟" ". يقوم قاطع الدائرة بحماية الواجهة الخلفية لديك من خدمة المصب بالفعل - فهو يستجيب لسؤال "هل أظهرت هذه الخدمة أنها أصبحت غير مستجيبة، هل يجب علينا حتى أن نحاول؟" ". الخلط بينهما يؤدي إلى تصغير حجم أحدهما أو الآخر.
على بوابة Aurabase، يعيش كلاهما في نفس حزمة البرامج الوسيطة ولكن في طوابق مختلفة: يتم تشغيل تحديد معدل IP قبل المصادقة (مكافحة DoS تمامًا، ولا يتم إصدار استعلامات SQL الخاصة بالفوترة لحركة المرور غير المصادق عليها)، بينما يحمي قاطع الدائرة المكالمات الصادرة إلى الخدمات الداخلية أو موفري LLM.
التكلفة تعتمد كليا على التنفيذ، وليس على المبدأ
وفقًا لأدلة النظام البيئي Tyk وAPISIX، يضيف العد الموزع المصمم جيدًا على Redis (العمليات الذرية، نص Lua، TTL الأصلي) عادةً 1-3 مللي ثانية من زمن الوصول، مع تأثير p99 أقل من مللي ثانية في أفضل الحالات المحسنة. على العكس من ذلك، توثق Zuplo أن محدد المعدل المركزي الذي تم وضعه بشكل سيئ يمكن أن يضيف عشرات المللي ثانية إلى كل طلب - وينعكس هذا التناقض مباشرة في p99 الخاص بك.
تأتي هذه النطاقات من الأدلة الفنية العامة (النظام البيئي Tyk وZuplo وApache APISIX)، وليس من بروتوكول قياس مشترك. إنها تشير إلى ترتيب من حيث الحجم ومبدأ معماري - العد الذري والمحلي بدلاً من العد المتزامن والمركزي - وليس رقمًا يمكن إعادة إنتاجه كما هو الحال في بنية تحتية مختلفة.
كيف يعمل تحديد المعدل فعليًا في بوابة الهالة
تستخدم بوابة Aurabase الصندوق governor (خوارزمية دلو الرمز المميز) كمحدد احتياطي محلي، إلى جانب العد الموزع عبر Redis لمشاركة الحالة بين عدة مثيلات للبوابة. يتم العد الموزع من خلال برنامج Lua النصي الذي يتم تنفيذه ذريًا على جانب Redis (INCRBY + EXPIRE في عملية شبكة واحدة)، وليس من خلال رحلة ذهابًا وإيابًا للقراءة ثم الكتابة والتي من شأنها تقديم نافذة التزامن.
إذا أصبح Redis غير متاح، فإن البوابة تتحول تلقائيًا إلى المحدد المحلي governor، مع ذاكرة تخزين مؤقت moka (بحد أقصى 1,000,000 إدخال، وتنتهي صلاحيتها عند 300 ثانية من عدم النشاط) لتجنب إعادة إنشاء المحدد في كل طلب. يمكن ملاحظة هذا التراجع: يؤدي كل تبديل إلى زيادة عداد Prometheus المخصص، بحيث يعرف الفريق متى يصبح الحد الفعال عدد N من المثيلات × الحد مرة أخرى (خلاف ذلك، تدهور العزل الصامت بين المثيلات).
تميز البوابة بين تحديد معدل مكافحة حجب الخدمة بواسطة IP (قبل المصادقة) وبين تحديد المعدل بواسطة مفتاح المشروع/واجهة برمجة التطبيقات/حصة المستخدم (بعد المصادقة، مع توفر مطالبات JWT) - برنامجان وسيطان منفصلان في المكدس، ولكل منهما تفاصيله الخاصة.
قاطع الدائرة: ثلاث حالات، نافذة منزلقة
تتبع دائرة قاطع Aurabase (aura_core::circuit_breaker، المشتركة بين البوابة و aura-ai للرجوع بين موفري LLM) ثلاث حالات كلاسيكية - Closed، Open، HalfOpen - مع عدد حالات الفشل عبر نافذة زمنية متدرجة بدلاً من عداد لا تتم إعادة ضبطه أبدًا.
تفاصيل التنفيذ المهمة في الإنتاج: التبديل إلى HalfOpen يسمح فقط بطلب اختبار واحد في كل مرة (مكافحة القطيع الرعد) - بدون هذا الحارس، ستندفع جميع الطلبات المعلقة في وقت واحد إلى الخدمة التي أعيد فتحها للتو، مما يؤدي على الفور إلى إعادة إنشاء الفشل الذي كنا نحاول تجنبه.
حيث تعمل هذه البرامج الوسيطة في البوابة
تتبع مجموعة البرامج الوسيطة لبوابة Aurabase ترتيبًا دقيقًا، تم التحقق منه في التعليمات البرمجية: معرف الطلب ← سجل الوصول ← تحديد المعدل بواسطة IP ← المصادقة ← تحديد المعدل بواسطة الممثل/الحصة ← قاطع الدائرة ← الوكيل للخدمة المستهدفة. ترفض كل مرحلة حركة المرور غير المرغوب فيها في أقرب وقت ممكن، قبل تحمل تكلفة معالجة أعلى.
اقرأ المقال كاملاً: مستوى البيانات مقابل مستوى الإدارة في بوابة Aurabase
لماذا لا يتم نشر أرقام Aurabase هنا
يتم التحقق من التنفيذ سطرًا تلو الآخر في كود مصدر البوابة. ولكن لم يتم حتى الآن تشغيل أي بروتوكول قياس قابل للتكرار ونشره على هذه البنية التحتية المحددة - فنشر رقم غير قابل للقياس سيكون بمثابة تكرار لخطأ الأرقام التسويقية غير المصدرية التي نرفض إعادة إنتاجها. راجع منهجية قياس الأداء الكاملة للتعرف على ما نطلبه قبل إصدار رقم الأداء.