أفضل ممارسات Durable Functions وأدوات التشخيص

توضح هذه المقالة تفاصيل بعض أفضل الممارسات عند استخدام Durable Functions. كما يصف أدوات مختلفة للمساعدة في تشخيص المشكلات أثناء التطوير والاختبار واستخدام الإنتاج.

أفضل الممارسات

استخدام أحدث إصدار من ملحق Durable Functions وSDK

هناك مكونان يستخدمهما تطبيق الوظائف لتنفيذ Durable Functions. أحدهما هو Durable Functions SDK الذي يسمح لك بكتابة وظائف المنسق والنشاط والكيان باستخدام لغة البرمجة المستهدفة. والآخر هو الملحق الدائم، وهو مكون وقت التشغيل الذي ينفذ التعليمات البرمجية فعليا. باستثناء تطبيقات .NET قيد المعالجة، يتم إصدار SDK والملحق بشكل مستقل.

يضمن البقاء على اطلاع بأحدث الملحقات وSDK استفادة تطبيقك من أحدث تحسينات الأداء والميزات وإصلاحات الأخطاء. تضمن الترقية إلى أحدث الإصدارات أيضا أن Microsoft يمكنها جمع أحدث بيانات تتبع الاستخدام التشخيصية للمساعدة في تسريع عملية التحقيق عند فتح حالة دعم باستخدام Azure.

  • راجع ترقية إصدار ملحق الوظائف الدائمة للحصول على إرشادات حول الحصول على أحدث إصدار ملحق.
  • للتأكد من أنك تستخدم أحدث إصدار من SDK، تحقق من مدير الحزم للغة التي تستخدمها.

الالتزام بقيود التعليمات البرمجية ل Durable Functions

ينشئ سلوك إعادة تشغيل للتعليمة البرمجية للمنسق قيود على نوع التعليمات البرمجية التي يمكنك كتابتها في وظيفة المنسق. مثال على القيد هو أن دالة المنسق يجب أن تستخدم واجهات برمجة التطبيقات الحتمية بحيث تنتج نفس النتيجة في كل مرة يتم فيها إعادة تشغيلها.

إشعار

Durable Functions Roslyn Analyzer هو محلل تعليمات برمجية مباشر يوجه مستخدمي C# للالتزام بقيود التعليمات البرمجية المحددة ل Durable Functions. راجع Durable Functions Roslyn Analyzer للحصول على إرشادات حول كيفية تمكينه على Visual Studio وVisual Studio Code.

تعرف على إعدادات أداء Azure Functions الخاصة بلغة البرمجة

باستخدام الإعدادات الافتراضية، قد يفرض وقت تشغيل اللغة الذي تحدده قيودا صارمة على التزامن على وظائفك. على سبيل المثال: السماح فقط بتنفيذ دالة واحدة في كل مرة على جهاز ظاهري معين. يمكن عادة تخفيف هذه القيود عن طريق ضبط إعدادات التزامن والأداء للغة الخاصة بك. إذا كنت تبحث عن تحسين أداء تطبيق Durable Functions، فستحتاج إلى التعرف على هذه الإعدادات.

فيما يلي قائمة غير شاملة ببعض اللغات التي غالبا ما تستفيد من ضبط إعدادات الأداء والتزامن الخاصة بها، وإرشاداتها للقيام بذلك.

ضمان أسماء مركز المهام الفريدة لكل تطبيق

يمكن لتطبيقات Durable Function المتعددة مشاركة نفس حساب التخزين. بشكل افتراضي، يتم استخدام اسم التطبيق كاسم مركز المهام، مما يضمن عدم حدوث مشاركة عرضية لمراكز المهام. إذا كنت بحاجة إلى تكوين أسماء مراكز المهام لتطبيقاتك بشكل صريح في host.json، يجب التأكد من أن الأسماء فريدة. وإلا، ستتنافس التطبيقات المتعددة على الرسائل، مما قد يؤدي إلى سلوك غير معرف، بما في ذلك التزامنات التي تصبح "عالقة" بشكل غير متوقع في حالة معلقة أو قيد التشغيل.

الاستثناء الوحيد هو إذا قمت بنشر نسخ من نفس التطبيق في مناطق متعددة؛ في هذه الحالة، يمكنك استخدام مركز المهام نفسه للنسخ.

اتبع الإرشادات عند نشر تغييرات التعليمات البرمجية لتشغيل المنسقين

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

الحفاظ على مدخلات ومخرجات الدالة صغيرة قدر الإمكان

يمكنك أن تواجه مشكلات في الذاكرة إذا قمت بتوفير مدخلات ومخرجات كبيرة من وإلى واجهات برمجة تطبيقات Durable Functions.

يتم تسلسل المدخلات والمخرجات إلى واجهات برمجة تطبيقات Durable Functions في محفوظات التزامن. وهذا يعني أن المدخلات والمخرجات الكبيرة يمكن أن تساهم، بمرور الوقت، بشكل كبير في نمو محفوظات المنسق دون قيود، ما قد يتسبب في استثناءات الذاكرة أثناء إعادة التشغيل.

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

ومع ذلك، فإن أفضل ممارسة للتعامل مع البيانات الكبيرة هي الاحتفاظ بها في التخزين الخارجي وتجسيد تلك البيانات داخل الأنشطة فقط، عند الحاجة. عند اتباع هذا النهج، بدلا من توصيل البيانات نفسها كمدخلات و/أو مخرجات لواجهات برمجة تطبيقات Durable Functions، يمكنك تمرير بعض المعرف الخفيف الذي يسمح لك باسترداد تلك البيانات من التخزين الخارجي عند الحاجة في أنشطتك.

الاحتفاظ ببيانات الكيان صغيرة

تماما مثل المدخلات والمخرجات إلى واجهات برمجة تطبيقات Durable Functions، إذا كانت الحالة الصريحة للكيان كبيرة جدا، فقد تواجه مشكلات في الذاكرة. على وجه الخصوص، يجب تسلسل حالة الكيان وإلغاء تسلسلها من التخزين على أي طلب، لذا تضيف الحالات الكبيرة زمن انتقال التسلسل إلى كل استدعاء. لذلك، إذا كان الكيان بحاجة إلى تعقب البيانات الكبيرة، فمن المستحسن إلغاء تحميل البيانات إلى التخزين الخارجي وتعقب بعض المعرف الخفيف في الكيان الذي يسمح لك بتجسيد البيانات من التخزين عند الحاجة.

ضبط إعدادات تزامن Durable Functions

يمكن لمثيل عامل واحد تنفيذ عناصر عمل متعددة بشكل متزامن لزيادة الكفاءة. ومع ذلك، فإن معالجة العديد من عناصر العمل بشكل متزامن تخاطر باستنفاد الموارد مثل سعة وحدة المعالجة المركزية واتصالات الشبكة وما إلى ذلك. في كثير من الحالات، لا ينبغي أن يكون هذا مصدر قلق لأن التحجيم والحد من عناصر العمل يتم التعامل معها تلقائيا نيابة عنك. ومع ذلك، إذا كنت تواجه مشكلات في الأداء (مثل يستغرق المنسقون وقتا طويلا للانتهاء، أو عالقين في الانتظار، وما إلى ذلك) أو تقوم باختبار الأداء، فيمكنك تكوين حدود التزامن في ملف host.json.

إشعار

هذا ليس بديلا لضبط إعدادات الأداء والتزامن لوقت تشغيل اللغة في Azure Functions. تحدد إعدادات تزامن Durable Functions فقط مقدار العمل الذي يمكن تعيينه إلى جهاز ظاهري معين في كل مرة، ولكنه لا يحدد درجة التوازي في المعالجة التي تعمل داخل الجهاز الظاهري. يتطلب هذا الأخير ضبط إعدادات أداء وقت تشغيل اللغة.

استخدام أسماء فريدة للأحداث الخارجية

كما هو الحال مع وظائف النشاط، تتمتع الأحداث الخارجية بضمان تسليم مرة واحدة على الأقل. وهذا يعني أنه في ظل ظروف نادرة معينة (والتي قد تحدث أثناء إعادة التشغيل والتحجيم والأعطال وما إلى ذلك)، قد يتلقى التطبيق الخاص بك تكرارات لنفس الحدث الخارجي. لذلك، نوصي بأن تحتوي الأحداث الخارجية على معرف يسمح بإزالة تكرارها يدويا في المنسقين.

إشعار

يستهلك موفر تخزين MSSQL الأحداث الخارجية ويحدث حالة المنسق بشكل معاملات، لذلك في تلك الخلفية يجب ألا يكون هناك خطر من تكرار الأحداث، على عكس موفر تخزين Azure Storage الافتراضي. ومع ذلك، لا يزال من المستحسن أن يكون للأحداث الخارجية أسماء فريدة بحيث تكون التعليمات البرمجية محمولة عبر الخلفيات.

الاستثمار في اختبار الإجهاد

كما هو الحال مع أي شيء متعلق بالأداء، فإن إعدادات التزامن المثالية والتقنية الأصلية لتطبيقك تعتمد في النهاية على حمل عمل التطبيق الخاص بك. لذلك، يوصى بأن يستثمر المستخدمون في اختبار الأداء الذي يحاكي حمل العمل المتوقع واستخدامه لتشغيل تجارب الأداء والموثوقية لتطبيقهم.

تجنب البيانات الحساسة في المدخلات والمخرجات والاستثناءات

تستمر المدخلات والمخرجات (بما في ذلك الاستثناءات) من وإلى واجهات برمجة تطبيقات Durable Functions بشكل دائم في موفر التخزين الذي تختاره. إذا كانت هذه المدخلات أو المخرجات أو الاستثناءات تحتوي على بيانات حساسة (مثل الأسرار سلسلة الاتصال ومعلومات التعريف الشخصية وما إلى ذلك) فسيتمكن أي شخص لديه حق الوصول للقراءة إلى موارد موفر التخزين من الحصول عليها. للتعامل بأمان مع البيانات الحساسة، يوصى للمستخدمين بإحضار تلك البيانات داخل وظائف النشاط إما من Azure Key Vault أو متغيرات البيئة، ولا يتم توصيل تلك البيانات مباشرة إلى المنسقين أو الكيانات. من المفترض أن يساعد ذلك في منع تسرب البيانات الحساسة إلى موارد التخزين الخاصة بك.

إشعار

ينطبق هذا التوجيه أيضا على CallHttp واجهة برمجة تطبيقات المنسق، والتي تستمر أيضا في حمولات الطلب والاستجابة الخاصة بها في التخزين. إذا كانت نقاط نهاية HTTP الهدف تتطلب مصادقة، والتي قد تكون حساسة، فمن المستحسن أن يقوم المستخدمون بتنفيذ استدعاء HTTP بأنفسهم داخل نشاط، أو لاستخدام دعم الهوية المدارة المضمن الذي يقدمه CallHttp، والذي لا يستمر في أي بيانات اعتماد للتخزين.

تلميح

وبالمثل، تجنب تسجيل البيانات التي تحتوي على أسرار كأي شخص لديه حق الوصول للقراءة إلى سجلاتك (على سبيل المثال في Application Insights)، سيكون قادرا على الحصول على تلك الأسرار.

أدوات التشخيص

هناك العديد من الأدوات المتاحة لمساعدتك في تشخيص المشكلات.

Durable Functions وسجلات إطار عمل المهام الدائمة

ملحق Durable Functions

يصدر الملحق الدائم أحداث تعقب تسمح لك بتتبع التنفيذ الشامل للتنسيق. يمكن العثور على أحداث التعقب هذه والاستعلام عنها باستخدام أداة Application Insights Analytics في مدخل Azure. يمكن تكوين إسهاب بيانات التعقب المنبعثة في logger قسم (Functions 1.x) أو logging (Functions 2.0) من ملف host.json. راجع تفاصيل التكوين.

إطار عمل المهام الدائمة

بدءاً من v2.3.0 لملحق Durable، السجلات التي تم إصدارها بواسطة Durable Task Framework الأساسي متوفرة أيضاً للمجموعة. راجع تفاصيل حول كيفية تمكين هذه السجلات.

مدخل Azure

تشخيص المشكلات وحلها

تعد Azure Function App Diagnostics موردا مفيدا على مدخل Microsoft Azure لمراقبة المشكلات المحتملة في تطبيقك وتشخيصها. كما يوفر اقتراحات للمساعدة في حل المشكلات بناء على التشخيص. راجع تشخيصات تطبيق Azure Function.

تتبعات تزامن الدوال الدائمة

يوفر مدخل Microsoft Azure تفاصيل تتبع التزامن لمساعدتك على فهم حالة كل مثيل تزامن وتتبع التنفيذ الشامل. عند إلقاء نظرة على قائمة الوظائف داخل تطبيق Azure Functions، سترى عمود Monitor الذي يحتوي على ارتباطات إلى التتبعات. تحتاج إلى تمكين Applications Insights لتطبيقك للحصول على هذه المعلومات.

ملحق Durable Functions Monitor

هذا ملحق Visual Studio Code يوفر واجهة مستخدم لمراقبة مثيلات التزامن وإدارتها وتصحيحها.

محلل Roslyn

Durable Functions Roslyn Analyzer هو محلل تعليمات برمجية مباشر يوجه مستخدمي C# للالتزام بقيود التعليمات البرمجية المحددة ل Durable Functions. راجع Durable Functions Roslyn Analyzer للحصول على إرشادات حول كيفية تمكينه على Visual Studio وVisual Studio Code.

يدعم

للأسئلة والدعم، يمكنك فتح مشكلة في أحد مستودعات GitHub أدناه. عند الإبلاغ عن خطأ في Azure، بما في ذلك معلومات مثل معرفات المثيل المتأثرة، والنطاقات الزمنية في UTC التي تعرض المشكلة، وسيسرع اسم التطبيق (إن أمكن) ومنطقة التوزيع إلى حد كبير من التحقيقات.