GraphQL / المتقدم: التنفيذ المحدود والموزع / الدرس 13
ضبط الطلب والكلفة والوثائق الموثوقة
اضبط مقدار العمل الذي تسمح به العملية بمجموعة ضوابط متكاملة، وميز تخزين الوثائق مسبقاً عن اعتمادها ضمن قائمة سماح موثوقة.
في هذه الصفحة
أهداف الدرس
- قدر نمو القوائم المتداخلة ولماذا لا يكفي العمق.
- اجمع حدود الوثيقة والوسائط والتنفيذ والهوية.
اضبط ميزانية العمل الفعلي وراء كل عملية
قد يستقبل عنوان GraphQL واحد عمليتين تختلفان جذرياً في الكلفة: بحثاً صغيراً عن بطاقة مقرر، واجتيازاً عميقاً لمجموعات وعلاقات كثيرة. لذلك لا يكفي عد طلبات HTTP لمنح العمليتين ميزانية موارد واحدة. اضبط حجم جسم الطلب، وعدد العمليات، والأسماء البديلة، ووسائط القوائم، وعمق الاختيار، والكلفة المقدرة، ومدة التنفيذ، وعدد اتصالات المصدر المتزامنة وفق احتياجات التطبيق الفعلية. لا يوجد حد عددي عالمي يناسب كل مخطط. اشتق الحدود من أدلة أحمال العمل المأذون بقياسها ومن متطلبات العمل، واجعل رفض العملية المتجاوزة يحدث قبل بدء الوصول المكلف إلى المصادر كلما أمكن.
افهم نمو العمل عند تداخل القوائم
يحسب النموذج التالي الحد الأعلى لعدد بطاقات المقررات النهائية عندما تطلب العملية عشرين قسماً، وعشرة مؤلفين في كل قسم، وخمسة مقررات لكل مؤلف. نتجاهل عمداً اشتراك السجلات بين المسارات، وتجميع الطلبات، والتصفية المبكرة حتى يظهر أثر الضرب بوضوح. النتيجة ليست زمناً مقاساً للتنفيذ ولا خوارزمية مكتملة لحساب التعقيد. يحتاج المقدر العملي إلى فهم أوزان الحقول، وحدود القوائم، والأجزاء المنشورة، والأسماء البديلة، وقيم المتغيرات. وقد يظل استعلام قليل العمق مكلفاً إذا احتوى أسماء بديلة كثيرة أو عملية تجميع واحدة ذات كلفة مرتفعة على المصدر.
const bounds = {departments:20, authors:10, courses:5};
const leafCards = bounds.departments * bounds.authors * bounds.courses;
console.assert(leafCards === 1000);
const capped = {...bounds, courses:2};
console.assert(capped.departments * capped.authors * capped.courses === 400);
تنتج الحدود المفترضة 1000 موضع نهائي، وتنخفض إلى 400 عند تقليل مقررات كل مؤلف إلى اثنين. هذا حساب للمواضع المحتملة، ولا يقيس صفوف قاعدة البيانات أو إزالة التكرار أو زمن التنفيذ.
ميز حفظ الوثيقة عن اعتمادها وثيقة موثوقة
تسمح الوثائق المحفوظة بإرسال معرف، غالباً قيمة تجزئة، بدلاً من تكرار نص الوثيقة في كل طلب. لكن آلية تسجل أي وثيقة جديدة تلقائياً لا تعادل قائمة سماح لا تضم إلا عمليات راجعها الفريق. في تطبيق يخدم عملاءه المطورين داخلياً، يمكن لسجل موثوق أن يقصر التنفيذ على وثائق معتمدة وحدود معروفة لمتغيراتها. أما الواجهة العامة التي يؤلف عملاؤها عملياتهم فتحتاج سياسة مختلفة. وحتى الوثيقة المعتمدة قد تصبح مكلفة عند تمرير حجم صفحة ضخم؛ لذلك افحص حدود الإدخال وميزانية المستدعي بعد استرجاع الوثيقة، ولا تعتبر معرفها وحده ضماناً لضبط الكلفة.
اجعل سياسة القبول قابلة للمراجعة
تسمي وثيقة JSON التالية مجموعة فحوص متكاملة من دون فرض أرقام اعتباطية على بيئة إنتاج. قيمها بنود مراجعة اصطناعية، وليست إعدادات يفهمها خادم بعينه. إذا كانت سياسة النشر تقصر التنفيذ على الوثائق الموثوقة، فعلى التنفيذ رفض المعرف المجهول، مع إبقاء مسار تسجيل الوثائق أثناء التطوير مضبوطاً ومنفصلاً. نسق تحديث السجل مع إطلاق العميل وإمكان التراجع عنه. وينبغي أن تتفق أدوات البناء على المحتوى المرجعي الدقيق الذي تحسب له التجزئة؛ فقد يؤدي اختلاف طريقة تطبيع المسافات مثلاً إلى فشل العثور على الوثيقة، مع أن المخطط نفسه لا يحتوي أي خطأ.
{
"mode": "reviewed-first-party-documents",
"unknownDocument": "reject",
"checks": ["body-bound", "single-selected-operation", "variable-bounds", "expanded-cost", "principal-budget", "source-deadline"],
"registryChange": "review-with-client-artifact"
}
هذه وثيقة تصميم محلية تسمي الضوابط المطلوبة. لا تضبط بوابة تشغيل، ولا تقدم حدوداً عددية جرى قياس سلامتها في بيئة إنتاج.
أكمل التقدير بحدود أثناء التنفيذ
قد تصبح تقديرات ما قبل التنفيذ غير دقيقة إذا تغير سلوك المصدر أو أخفى أحد الحقول عملاً مكلفاً. أكملها بحدود لتزامن اتصالات المصدر، ومواعيد نهائية، وتمرير الإلغاء عندما يدعم ذلك التنفيذ وبرنامج التشغيل المستخدم. انتهاء انتظار العميل وحده لا يعني توقف عمل الخادم؛ لذا تحقق من تحرير الموارد فعلياً. طبق ميزانيات لكل هوية إلى جانب الحماية العامة، حتى لا يستهلك مستخدم واحد كامل السعة المشتركة. أثناء إعداد المادة اختبر الرفض بوثائق وعدادات اصطناعية معزولة، ولا تستخدم حركة عدائية أو اختبارات حمل مرتفعة ضد عنوان خدمة حقيقية.
الأخطاء الشائعة وإصلاحها
يستنزف استعلام سطحي المصدر
- لماذا يحدث؟
- قيد العمق وحده.
- كيف تصلحه؟
- راجع الاتساع والأوزان والوسائط والتزامن.
- كيف تتجنب تكراره؟
- احتفظ بعينات سطحية مكلفة ممثلة.
تقبل التجزئة المحفوظة عمليات عشوائية
- لماذا يحدث؟
- سمي التسجيل التلقائي قائمة موثوقة.
- كيف تصلحه؟
- افصل اعتماد التسجيل عن البحث وقت التشغيل.
- كيف تتجنب تكراره؟
- اختبر المجهول وفق النمط المقصود.
يترك العميل المنتهي عملاً مكلفاً
- لماذا يحدث؟
- لم يصل الإلغاء لمهام المصدر.
- كيف تصلحه؟
- مرر الإلغاء المدعوم وحرر الموارد.
- كيف تتجنب تكراره؟
- راقب التنظيف باختبارات دمج معزولة.
اختبر فهمك
1. لماذا تحتاج وثيقة معتمدة حدود متغيرات؟
اعرض الحل المشروح
قد تسمح البنية المختارة بطلب عنصرين أو مليوني عنصر إذا لم يقيد المخطط والمحلل وسيط العدد. تراجع الوثيقة شكل العملية، لكنها لا تعتمد تلقائياً كل قيمة قد تصل أثناء التشغيل. لذلك افرض حدود التصفح وقواعد المجال، وأدخل قيم المتغيرات بعد إكراهها في تقدير الكلفة حين يلزم، وأبق موعداً نهائياً للتنفيذ. فقد يتجاوز عمل المصدر تقديره حتى عندما تكون بنية العملية معتمدة.
2. ماذا لا ينمذج ضرب التفرع؟
اعرض الحل المشروح
لا يحسب النموذج السجلات المشتركة التي تزال تكراراتها، أو تجميع الاتصالات، أو فهارس المصدر، أو تصفية الصلاحيات، أو حجم البايتات، أو الزمن، أو كلفة المعالج لكل حقل. إنه حساب تعليمي لحد عدد المواضع النهائية وفق حدود معلنة للقوائم. استخدمه لاكتشاف البنية المضاعفة، ثم طور مقدر التطبيق بأدلة أحمال عمل مأذون بها وبالدلالات الفعلية للحقول. لا تفسر العدد الناتج على أنه ميلي ثانية أو عدد اتصالات قاعدة البيانات.
أهم ما تعلمته
- يجمع ضبط الطلب البنية والقيم والهوية وفرض التنفيذ.
- تصبح الوثيقة موثوقة بسياسة مراجعة وقبول.