GraphQL / المتقدم: التنفيذ المحدود والموزع / الدرس 16
الاتحاد والتركيب وحدود الخدمات
قيم الرسم المركب باعتباره نظاماً موزعاً، وحدد فيه ملكية الكيانات وحدود الثقة والفشل قبل اعتماد التركيب.
في هذه الصفحة
أهداف الدرس
- افصل مواصفة اللغة ولهجة التركيب وسلوك البوابة.
- تتبع الهوية والصلاحية وتفرع الخطة بين الخدمات.
وازن استقلال ملكية المجالات بكلفة الاتحاد
يجمع الرسم الاتحادي قدرات تملكها خدمات متعددة خلف عقد موحد يراه العميل. قد يساعد ذلك على استقلال ملكية المجالات، لكنه يضيف أيضاً قواعد لتركيب المخططات، وتخطيطاً للاستعلامات، وانتقالات عبر الشبكة، وحاجة إلى تنسيق الإصدارات. لا يصبح الاتحاد ضرورياً لمجرد أن المخطط كبير؛ فقد تحقق خدمة واحدة مقسمة إلى وحدات حدوداً أوضح بكلفة تشغيل أقل. قبل اختيار منتج الاتحاد أو صياغته، حدد الفرق المالكة لمعاني Course وAuthor وEnrollment، وكيف تراجع تغييراتها، وأي خدمة تعد المصدر المعتمد لكل حقل. ينبغي أن يبرر تقسيم المسؤولية هذا التعقيد الإضافي.
وضح ملكية الحقول ولهجة الاتحاد المختارة
تستخدم تنفيذات الاتحاد لهجات محددة للتوجيهات وبروتوكولات لتبادل هويات الكيانات. لا تصبح هذه الصيغ قابلة للتبادل لمجرد أن منتجاتها تعرض GraphQL. سجل JSON التالي ملاحظة تصميم محلية، وليس SDL تقبله بوابة بعينها. يميز السجل ملكية هوية المقرر عن ملكية حقل يوفره مجال آخر. يحتاج مفتاح المقرر المتبادل بين الخدمات نطاقاً وتمثيلاً مستقرين، ولا يعني امتلاك المفتاح امتلاك صلاحية قراءة بيانات التسجيل. قبل تحويل هذا التصميم إلى إعدادات فعلية، تحقق من تنفيذ الاتحاد المختار وإصداره وقواعد التركيب التي يطبقها، بدلاً من مزج توجيهات منتجات مختلفة.
{
"entity": "Course",
"identityOwner": "catalog",
"keyScope": ["tenantId", "courseId"],
"fields": {"title": "catalog", "eligibleEnrollmentCount": "enrollment"},
"authorization": "enforced-by-owning-domain"
}
يسجل المستند المسؤوليات ونطاق المفتاح. لا يعرف بروتوكول بوابة، ولا يمنح من يحمل معرف المقرر صلاحية الوصول إلى التسجيلات.
مرر هوية موثوقة مع أقل صلاحية لازمة
قد تمرر البوابة سياق الطلب إلى الخدمات التابعة، لكن إعادة إرسال ترويسات يختارها العميل من دون تحقق لا تنشئ هوية موثوقة. تحتاج كل خدمة إلى حد ثقة مصادق عليه بين الخدمات، وإلى تمثيل متحقق منه لنطاق المستخدم النهائي الذي يجوز لها العمل نيابة عنه. يجب أن يبقى تفويض المجال قابلاً للفرض في الخدمة المالكة، لا معتمداً حصراً على مرشح في البوابة. لا تعرض مداخل البحث الداخلي عن الكيانات لمستدعين غير موثوقين بلا سياسة مكافئة. وعندما تشارك عدة خدمات في عملية واحدة، راجع كيف تمنع الأخطاء والمخابئ وسجلات التتبع اختلاط بيانات المستأجرين أو كشف بيانات أحدهم للآخر.
اقرأ خطة الاستعلام كسلسلة اعتماد بين الخدمات
افترض أن catalog يعيد أولاً مفاتيح المقررات المسموح بها وعناوينها، ثم يستخدم enrollment تلك المفاتيح لحساب عدد التسجيلات المؤهلة. تشكل المرحلتان سلسلة اعتماد، حتى إن بدت حقول الأشقاء في وثيقة العميل قابلة للتنفيذ بالتوازي. اجمع عمليات البحث عن الكيانات لتجنب اتصال بعيد لكل مقرر، مع الحفاظ على حدود المصدر. السجل التالي شرح لخطة مفترضة، وليس خرج أداة تخطيط شغلت فعلياً. يثبت نجاح تركيب المخطط توافق قواعده البنيوية في أداة محددة، لكنه لا يثبت أن الخدمات المنشورة متاحة أو أن الاتصال بها مفوض أو أن زمنها يفي باحتياجات العملية.
{
"operation": "CourseEnrollmentCards",
"steps": [
{"service": "catalog", "returns": ["courseKeys", "title"]},
{"service": "enrollment", "dependsOn": "courseKeys", "mode": "bounded-batch", "returns": ["eligibleEnrollmentCount"]}
]
}
تعتمد خطوة enrollment على المفاتيح التي تعيدها catalog. يجب أن تراعي الميزانية الزمنية السلسلة بأكملها، بدلاً من منح كل انتقال مهلة جديدة قد تتجاوز الموعد الكلي.
نسق التركيب مع الإطلاق التدريجي والتراجع
تحقق من تغييرات مخططات الخدمات الجزئية مقابل المخطط المركب المقصود والعمليات المدعومة قبل النشر. قد تعرف البوابة حقلاً جديداً بينما لا يعرفه مثيل أقدم من الخدمة أثناء الإطلاق التدريجي، ولذلك يلزم توافق الإصدارات المتداخلة. أدرج ملاحظات الخطة وسلوك الفشل الجزئي وآثار التراجع ضمن المراجعة. إذا تعذر مجال التسجيل، فقد يسمح حقل العدد الذي يقبل null ببقاء بطاقة المقرر؛ أما الوعد بعدم قبولها فقد ينشر الفشل إلى نطاق أوسع. حافظ على استقلال حدود فشل المجالات، ولا تحول ميزة بعيدة اختيارية إلى اعتماد إلزامي لكل قراءة محلية نافعة في ذاتها.
الأخطاء الشائعة وإصلاحها
يمنح مفتاح المقرر قراءة أعداد خاصة
- لماذا يحدث؟
- اختلطت الهوية بين الخدمات بالتفويض.
- كيف تصلحه؟
- افرض نطاق المستخدم بمجال التسجيل.
- كيف تتجنب تكراره؟
- اختبر البحث بهويات ممنوعة.
ينجح التركيب وتفشل الطلبات أثناء الإطلاق
- لماذا يحدث؟
- لا توافق إصدارات الخدمات العقد المخطط.
- كيف تصلحه؟
- أعد التداخل وانشر آثاراً متوافقة.
- كيف تتجنب تكراره؟
- تحقق من مزائج الإطلاق والتراجع.
تجري قائمة بطاقات اتصالات بعيدة كثيرة
- لماذا يحدث؟
- لم يجمع إكمال الكيانات ويقيد.
- كيف تصلحه؟
- افحص الخطة واجمع الكيانات بحدود مدعومة.
- كيف تتجنب تكراره؟
- تتبع الاتصالات ومدة السلسلة لكل عملية.
اختبر فهمك
1. لماذا لا يقتصر الاتحاد على دمج ملفات SDL؟
اعرض الحل المشروح
يجب أن تتفق الخدمات على هوية الكيان، وملكية الحقول، وتوافق التركيب، وتخطيط الاستعلامات، وتمرير الثقة، وسلوك النشر. لا ينفذ جمع نصوص المخطط هذه البروتوكولات ولا يعالج أعطال النظام الموزع. اختر تنفيذاً موثقاً، ثم تحقق من أثر التركيب ومن خطة الوصول الفعلية المحدودة للخدمات التي تستخدمها العمليات المدعومة. كلاهما دليل مستقل يحتاج إلى مراجعة.
2. كيف يؤثر عدد تسجيلات بعيد اختياري في قبول null؟
اعرض الحل المشروح
راجع أولاً هل ينبغي لفقد مصدر العدد أن يجعل كائن Course كله غير متاح. إذا ظلت الهوية والعنوان مفيدين، فقد يحفظ حقل عدد يقبل null بطاقة المقرر مع سياسة خطأ واضحة. لا تعد بعدم قبول null لمجرد تسهيل كود العميل حين يكون للمجال البعيد نمط فشل مستقل. اختبر مسار الخطأ الناتج عبر الرسم المركب، وليس داخل مخطط الخدمة وحده.
أهم ما تعلمته
- يضيف الاتحاد عقود ملكية وتنفيذ موزعة.
- لا تثبت صحة التركيب الموثوقية أو الصلاحية المنشورة.