ما استهلكته الحادثة فعلاً
لا يختبر سرب الوكلاء طويل الأمد الويب المفتوح كخزان مستندات. بل يختبره كجدول بحث بعدد هائل من الصفوف، معظمها خلف نقاط نهاية يملكها شخص آخر. عندما يُطلب من السرب حل حقائق غامضة على مدى أسابيع أو أشهر، فإن المورد المهيمن الذي يستهلكه ليس الاستدلال. بل حجم الطلبات الموجّهة إلى بنية تحتية تابعة لطرف ثالث.
النتيجة الهندسية هي أن ميزانية إجمالية واحدة لا تستطيع التعبير عن القيد الذي يهم فعلاً. "هذا المضيف يتحمّل N طلباً في الدقيقة ولا أكثر" عبارة تخصّ هدفاً بعينه. أما سقف الرموز الإجمالي أو سقف الإنفاق الإجمالي فهو عبارة عن استهلاك السرب نفسه، وهو غير قادر بنيوياً على تمثيل حدّ يقيم في محدّد معدل يملكه شخص آخر.
لماذا تفشل الميزانيات الإجمالية كأداة ضبط
سقوف الرموز وسقوف التكلفة مؤشرات متأخرة. تُحسب من عمل أنجزه السرب بالفعل. بحلول اللحظة التي تنطلق فيها ميزانية إجمالية، تكون الطلبات الخارجية قد أُرسلت بالفعل، ويكون الهدف قد استوعبها بالفعل، وأي ضرر ناتج — تدهور الخدمة لعملاء آخرين، حجب دفاعي، تقرير إساءة — قد وقع بالفعل. تنطلق الميزانية بعد الحدث الذي كان يُفترض أن تمنعه.
هذه ليست مشكلة ضبط. إنها خطأ في التصنيف. الميزانية الإجمالية تجيب عن سؤال "كم يُسمح لنا أن نستهلك؟" أما حدّ المعدل لكل هدف فيجيب عن سؤال "كم يُسمح لنا أن نرسل هنا، الآن؟" السؤال الثاني وحده له إجابة محدودة يمكن أن يتضرر طرف ثالث بتجاوزها.
يتضخّم الفشل بالتفرّع. لنفترض أن سرباً يشغّل وكلاء كثيرين، كل منهم يرسل طلبات بمعدل يعتبره أي مشغّل معقول مهذباً. معدل الوكيل الواحد متواضع. أما المعدل الإجمالي ضد هدف واحد فهو معدل الوكيل الواحد مضروباً في عدد الوكلاء العاملين على ذلك الهدف حالياً، وليس لدى المجدول سبب جوهري لإبقاء هذا الحاصل صغيراً. الوكلاء مُحسَّنون عادةً لإحراز تقدّم، لا للحفاظ على مورد خارجي مشترك لا يستطيعون رؤيته. بدون رؤية مشتركة للهدف، يتصرف كل وكيل بشكل صحيح ويتصرف النظام ككل بشكل سيئ.

المضخّم الثاني هو سلوك إعادة المحاولة. عندما يبدأ هدف برفض الطلبات، يعيد الوكلاء الذين يعاملون الرفض كخطأ عابر المحاولة، غالباً بتراجع زمني محلي لكل وكيل. التراجع المحلي عبر وكلاء كثيرين لا يقلّل الضغط الإجمالي؛ بل يعيد تشكيله إلى حمل أكثر سلاسة واستمرارية يصعب على الهدف التخلص منه.
تصميم ميزانية معدل لكل هدف
الضبط الذي ينجح هو ظرف معدل مرتبط بكل معرّف مورد خارجي — المخطط، والمضيف، وعند الاقتضاء صنف مسار أو استعلام — بدلاً من ارتباطه بالسرب ككل.
افرض عند نقطة الخروج، لا في التوجيهات. التعليمات في توجيه النظام استشارية. الوكيل الذي هو في منتصف مسار، أو تحت موعد نهائي، أو ببساطة غير متوافق مع التعليمات سيصدر الطلب على أي حال. الفرض ينتمي إلى طبقة الخروج: نقطة اختناق واحدة تمرّ عبرها كل طلبات الصادرة، تحمل دلو رموز لكل هدف وترفض أو تُصفّ الطلبات التي تتجاوز الظرف. يمكن للتوجيهات أن تصف النية؛ طبقة الخروج هي التي تقرّر.
آلية ملموسة: احتفظ بدلو رموز مفتاحه معرّف هدف مُوحَّد، يُعاد ملؤه بالمعدل الذي يتحمّله الهدف، مع سماح اندفاع بحجم يطابق التحمل الملاحَظ للهدف لا شهية السرب. كل نداء HTTP صادر يحصل على رمز قبل أن يغادر العملية. إذا لم يتوفر رمز، لا يفشل النداء بصمت ولا يدور؛ بل يعيد تأجيلاً منظّماً إلى المستدعي.
امنح المجدول رؤية الميزانية المتبقية. التأجيل لا يفيد إلا إذا استطاع المنسّق التصرف بناءً عليه. ينبغي أن يستطيع المجدول الاستعلام عن الرموز المتبقية لكل هدف واستخدام ذلك لإعادة ترتيب العمل: نفّذ خطوات المسار التي تلمس أهدافاً غير مقيّدة الآن، وأجّل الخطوات التي تستهدف هدفاً مستنفداً. هذا يحوّل تحديد المعدل من توقف إلى مُدخل جدولة. بدون هذه الرؤية، يبدو ظرف مستنفد مطابقاً لهدف معطّل، وسيحرق الوكلاء ميزانيتهم المتبقية في سبره.
عامل التراجع الزمني كحالة جدولة من الدرجة الأولى. معظم الأنظمة تنمذج التراجع كمسار خطأ: حدث خطأ ما، انتظر، حاول مجدداً. هذا التأطير خاطئ بالنسبة لمورد خارجي مشترك. الهدف في تراجع ليس فاشلاً؛ إنه هدف ظرفه فارغ حالياً، والاستجابة الصحيحة هي خفض أولوية كل العمل الموجّه إليه حتى يُعاد ملء الظرف. نمذجة التراجع كحالة في المجدول — إلى جانب مُصفّ، قيد التشغيل، ومكتمل — تتيح للمنسّق الالتفاف حوله بدلاً من تكديس إعادات المحاولة ضده.
المقايضة الصادقة هي الإنتاجية. ظرف لكل هدف سيترك سعة غير مستخدمة عندما يكون هدف مستنفداً لحظياً بينما لدى السرب عمل يمكن إنجازه. كانت الميزانية الإجمالية ستنفق تلك السعة؛ والظرف لا يفعل ذلك عن قصد. الفرق التي تتبنّى هذا التصميم تختار استغلالاً ناقصاً لوكلائها من أجل البقاء ضمن تحمّل شخص آخر، ولهذا الاختيار تكلفة حقيقية في الزمن الفعلي للمهام الط

المقايضة الثانية هي كلفة التنسيق. يجب مشاركة دلاء الرموز لكل هدف عبر جميع الوكلاء والعمليات، ما يعني مخزناً مشتركاً له خصائصه الخاصة في الاتساق والزمن الاستجابة. الدلو المحلي لكل وكيل أرخص وخاطئ؛ فهو يعيد إدخال مشكلة التفرّع على مستوى المحدّد نفسه.
القياس الذي يجعله قابلاً للتدقيق
ميزانية المعدل ليست أداة ضبط إلا إذا كان استهلاكها قابلاً للملاحظة بعد وقوعه.
سجّل أعداد الطلبات لكل هدف لكل نافذة، واربطها بخطوة المسار التي أنتجت كل طلب. الربط هو ما يجعل السجل مفيداً. عدد الطلبات ضد مضيف يخبرك أن ضغطاً وقع؛ وخطوة المسار تخبرك أي وكيل، وأي هدف، وأي خطوة استدلال أنتجته، وهذا ما تحتاجه لتغيير السلوك لا لمجرد ملاحظته.
نبّه على استنفاد الظرف، لا على الإنفاق الإجمالي. تنبيه الإنفاق الإجمالي ينطلق عندما يكون السرب مكلفاً، وقد يكون ذلك مشروعاً تماماً. أما تنبيه الاستنفاد فينطلق عندما يكون هدف معيّن عند معدله المتحمَّل أو قريباً منه، وهو الشرط الذي يسبق الضرر الخارجي. التنبيه الثاني قابل للتنفيذ؛ الأول إشارة فواتير.
تتبّع التأجيلات كمقياس من الدرجة الأولى. ارتفاع معدل التأجيل ضد هدف مؤشر مبكر على أن طلب السرب على ذلك الهدف يتجاوز ما سيتحمّله الهدف — مرئي قبل أن يستجيب الهدف نفسه بالرفض، وقبل وقت طويل من انطلاق أي ميزانية إجمالية. تكشف التأجيلات أيضاً جودة الجدولة: سرب يؤجّل كثيراً ضد هدف بينما أهداف أخرى خاملة لا يجدول جيداً، والمقياس يجعل ذلك مرئياً.
أخيراً، سجّل الظرف نفسه إلى جانب حركة المرور. عندما يُعدَّل تحمّل هدف — لأن المشغّل جرى الاتصال به، أو لأن السلوك الملاحَظ تغيّر — فإن أعداد الطلبات التاريخية لا تكون قابلة للتفسير إلا مقابل الظرف الذي كان سارياً وقتها. بدون ذلك، لا تستطيع مراجعة ما بعد الحادثة التمييز بين سرب احترم ميزانيته وسرب كان يعمل في ظل ميزانية لم تكن صحيحة قط.
النقطة الأوسع هي أن أسر الوكلاء العاملة على آفاق طويلة ليست في المقام الأول مستهلكة لحوسبتها الخاصة. إنها مستهلكة لخدمات الآخرين، والمورد النادر هو المعدل الذي ستقبل به تلك الخدمات الطلبات. التنسيق الذي يجدول وفق سقوف إجمالية يحسّن الكمية الخاطئة. أما الجدولة وفق ميزانيات معدل لكل هدف، مفروضة عند نقطة الخروج ومرئية للمجدول، فهي الضبط الذي يطابق القيد الفعلي.
