استكشاف أخطاء الاتصال الصادرة المتقطعة وإصلاحها في Azure App Service

تساعدك هذه المقالة في استكشاف أخطاء الاتصال المتقطع ومشكلات الأداء ذات الصلة في Azure App Service وإصلاحها. ويوفر المزيد من المعلومات حول منهجيات استكشاف الأخطاء وإصلاحها لاستنفاد منافذ ترجمة عناوين الشبكة المصدر (SNAT). إذا كنت بحاجة إلى مزيد من المساعدة في أي وقت من هذه المقالة، فتواصل مع خبراء Azure عبر منتديات MSDN Azure وStack Overflow. بدلاً من ذلك، يمكن تقديم حدث دعم Azure. انتقل إلى موقع Azure Support وحدد Get Support.

العلامات

قد تظهر التطبيقات والوظائف المستضافة على خدمة تطبيق Azure واحداً أو أكثر من الأعراض التالية:

  • أوقات الاستجابة البطيئة على كل أو بعض المثيلات في خطة الخدمة.
  • أخطاء متقطعة في 5xx أو بوابة غير صحيحة
  • رسائل وجود أخطاء في المهلة
  • تعذر الاتصال بنقاط النهاية الخارجية (مثل SQLDB وService Fabric وخدمات التطبيقات الأخرى وما إلى ذلك)

السبب

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

  • الاتصال TCP: هناك حد لعدد الاتصالات الصادرة التي يمكن إجراؤها. يرتبط الحد الأقصى للاتصالات الصادرة بحجم العامل المستخدم.
  • منافذ SNAT: الاتصالات الصادرة في Azure تصف قيود منفذ SNAT وكيفية تأثيرها على الاتصالات الصادرة. يستخدم Azure ترجمة عناوين الشبكة المصدر (SNAT) وموازنات التحميل (غير معرضة للعملاء) للاتصال بعناوين IP العامة. يتم إعطاء كل مثيل في خدمة Azure App في البداية عددا مخصصا مسبقا من 128 منفذ SNAT. يؤثر حد منفذ SNAT على فتح الاتصالات إلى نفس تركيبة العنوان والمنفذ. إذا كان تطبيقك ينشئ اتصالات بمزيج من مجموعات العناوين والمنفذ، فلن تستخدم منافذ SNAT. يتم استخدام منافذ SNAT حتى عند تكرار المكالمات إلى نفس العنوان و تركيبة المنفذ. بمجرد إصدار منفذ، يكون المنفذ متاحاً لإعادة استخدامه حسب الحاجة. يستعيد موازن تحميل شبكة Azure منفذ SNAT من الاتصالات المغلقة فقط بعد الانتظار لمدة 4 دقائق.

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

تجنب المشكلة

هناك بعض الحلول التي تتيح لك تجنب قيود منفذ SNAT. يشمل ذلك ما يلي:

  • تجمعات الاتصال: من خلال تجميع اتصالاتك، يمكنك تجنب فتح اتصالات شبكة اتصال جديدة للمكالمات إلى نفس العنوان والمنفذ.
  • نقاط نهاية الخدمة: ليست لديك قيود على منفذ SNAT للخدمات المؤمنة بنقاط نهاية الخدمة.
  • نقاط النهاية الخاصة: ليست لديك قيود على منفذ SNAT للخدمات المؤمنة بنقاط النهاية الخاصة.
  • بوابة NAT: باستخدام بوابة NAT، لديك 64 ألفًا من منافذ SNAT الصادرة، والتي يمكن استخدامها بواسطة الموارد التي ترسل نسبة استخدام الشبكة من خلالها.

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

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

إذا كانت وجهتك نقطة نهاية خارجية خارج Azure، فإن استخدام بوابة NAT يمنحك منافذ SNAT الصادرة البالغة 64 ألفًا. كما يوفر لك عنواناً صادراً مخصصاً لا تشاركه مع أي شخص.

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

تتم مناقشة الاستراتيجيات العامة للتخفيف من استنفاد منفذ SNAT في قسم حل المشكلات في وثائق الاتصالات الصادرة لـ Azure. من بين هذه الاستراتيجيات، ينطبق ما يلي على التطبيقات والوظائف المستضافة على Azure App service.

تعديل التطبيق لاستخدام تجمّع الاتصال

فيما يلي مجموعة من الارتباطات لتنفيذ تجميع الاتصال حسب مكدس حلول مختلف.

العقدة

بشكل افتراضي، لا يتم الاحتفاظ باتصالات NodeJS على قيد الحياة. فيما يلي قواعد البيانات والحزم الشائعة لتجميع الاتصال التي تحتوي على أمثلة حول كيفية تنفيذها.

نشاط HTTP

Java

فيما يلي المكتبات الشائعة المستخدمة لتجميع اتصال JDBC التي تحتوي على أمثلة حول كيفية تنفيذها: تجميع اتصال JDBC.

تجميع اتصال HTTP

PHP

على الرغم من أن PHP لا يدعم تجميع الاتصال، يمكنك محاولة استخدام اتصالات قاعدة البيانات الثابتة إلى الخادم الخلفي.

Python

فيما يلي قواعد البيانات والوحدات النمطية الشائعة لتجميع الاتصال التي تحتوي على أمثلة لكيفية تنفيذها.

تجميع اتصال HTTP

  • يتم تمكين تجميع اتصال البقاء على قيد الحياة وHTTP بشكل افتراضي في وحدة الطلبات .
  • Urllib3

تعديل التطبيق لإعادة استخدام الاتصال

تعديل التطبيق لاستخدام منطق إعادة المحاولة أقل عدوانية

  • لمزيد من الإرشادات والأمثلة، راجع نمط إعادة المحاولة.

استخدام keepalives لإعادة تعيين مهلة الخمول الصادرة

المزيد من الإرشادات الخاصة بخدمة التطبيقات:

  • يجب أن يحاكي اختبار التحميل بيانات العالم الحقيقي بسرعة تغذية ثابتة. يمكن أن يؤدي اختبار التطبيقات والوظائف تحت ضغط العالم الحقيقي إلى تحديد مشكلات استنفاد منفذ SNAT وحلها في وقت مبكر.
  • تأكد من أن الخدمات الخلفية يمكنها إرجاع الاستجابات بسرعة. لاستكشاف مشكلات الأداء وإصلاحها باستخدام قاعدة بيانات Azure SQL، راجع استكشاف مشكلات أداء قاعدة بيانات Azure SQL وإصلاحها باستخدام Intelligent Insights.
  • توسيع نطاق خطة App Service إلى المزيد من المثيلات. لمزيدٍ من المعلومات حول التحجيم، راجع تغيير حجم تطبيق في Azure App Service. يتم تخصيص عدد من منافذ SNAT لكل مثيل عامل في خطة App Service. إذا قمت بنشر استخدامك عبر المزيد من المثيلات، فقد تحصل على استخدام منفذ SNAT لكل مثيل أقل من الحد الموصى به وهو 100 اتصال صادر، لكل نقطة نهاية بعيدة فريدة.
  • ضع في اعتبارك الانتقال إلى App Service Environment (ASE)، حيث يتم تخصيص عنوان IP صادر واحد، وتكون حدود الاتصالات ومنافذ SNAT أعلى. في ASE، يعتمد عدد منافذ SNAT لكل مثيل على جدول التخصيص المسبق لموازن تحميل Azure. على سبيل المثال، يحتوي ASE مع 1-50 مثيل عامل على 1024 منفذا مخصصا مسبقا لكل مثيل، بينما يحتوي ASE مع 51-100 مثيل عامل على 512 منفذا مسبقا لكل مثيل.

من الأسهل حل تجنب حدود TCP الصادرة، حيث يتم تعيين الحدود حسب حجم العامل الخاص بك. يمكنك مشاهدة الحدود في الحدود الرقمية للجهاز الظاهري عبر بيئة الاختبار المعزولة - اتصالات TCP

اسم الحد ‏‏الوصف صغير (A1) متوسط (A2) كبير (A3) مستوى معزول (ASE)
الاتصالات عدد الاتصالات عبر الجهاز الظاهري بأكمله 1920 3968 8064 16,000

لتجنب حدود TCP الصادرة، يمكنك إما زيادة حجم العاملين لديك، أو توسيع النطاق أفقياً.

استكشاف الأخطاء وإصلاحها

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

إذا كنت لا تعرف سلوك التطبيق بما يكفي لتحديد السبب بسرعة، فهناك بعض الأدوات والتقنيات المتوفرة في App Service للمساعدة في هذا التحديد.

البحث عن معلومات تخصيص منفذ SNAT

يمكنك استخدام تشخيصات App Service للعثور على معلومات تخصيص منفذ SNAT، ومراقبة مقياس تخصيص منافذ SNAT لموقع App Service. للعثور على معلومات تخصيص منفذ SNAT، اتبع الخطوات التالية:

  1. للوصول إلى تشخيصات App Service، انتقل إلى تطبيق ويب App Service أو بيئة App Service في مدخل Azure. في التنقل الأيسر حدد «تشخيص المشكلات وحلها».
  2. حدد فئة «التوفر» و«الأداء»
  3. حدد لوحة «استنفاد منفذ SNAT» في قائمة الإطارات المتجانبة المتوفرة ضمن الفئة. تتمثل الممارسة في إبقاء الحد دون 128. إذا كنت بحاجة إليها، فلا يزال بإمكانك فتح تذكرة دعم، وسيحصل مهندس الدعم على المقياس من النهاية الخلفية نيابة عنك.

نظرا لأن استخدام منفذ SNAT غير متوفر كمقياس، فلا يمكن إما التحجيم التلقائي استنادا إلى استخدام منفذ SNAT، أو تكوين مقياس تلقائي استنادا إلى مقياس تخصيص منافذ SNAT.

اتصالات TCP ومنافذ SNAT

لا ترتبط اتصالات TCP ومنافذ SNAT مباشرة. يتم تضمين كاشف استخدام اتصالات TCP في صفحة إدارة تشخيص وحل المشكلات لأي تطبيق App Service. ابحث عن عبارة "اتصالات TCP" للعثور عليها.

  • يتم استخدام منافذ SNAT فقط لتدفقات الشبكة الخارجية، بينما يتضمن إجمالي اتصالات TCP اتصالات التكرار المحلية.
  • يمكن مشاركة منفذ SNAT بواسطة تدفقات مختلفة، إذا كانت التدفقات مختلفة في البروتوكول أو عنوان IP أو المنفذ. تحسب مقاييس اتصالات TCP كل اتصال TCP.
  • يحدث حد اتصالات TCP على مستوى مثيل العامل. لا تستخدم موازنة التحميل الصادرة لشبكة Azure مقياس اتصالات TCP للحد من منفذ SNAT.
  • يتم وصف حدود اتصالات TCP في الحدود الرقمية للأجهزة الظاهرية عبر بيئة الاختبار المعزولة - اتصالات TCP
  • تفشل جلسات عمل TCP الحالية عند إضافة جلسات TCP الصادرة الجديدة من منفذ مصدر Azure App Service. يمكنك إما استخدام IP واحد أو إعادة تكوين أعضاء تجمع الخلفية لتجنب التعارضات.
اسم الحد ‏‏الوصف صغير (A1) متوسط (A2) كبير (A3) مستوى معزول (ASE)
الاتصالات عدد الاتصالات عبر الجهاز الظاهري بأكمله 1920 3968 8064 16,000

اتصالات WebJobs وقاعدة البيانات

إذا استنفدت منافذ SNAT، ولم يتمكن WebJobs من الاتصال بقاعدة بيانات SQL، فلا يوجد مقياس لإظهار عدد الاتصالات التي يتم فتحها بواسطة كل عملية تطبيق ويب فردية. للعثور على WebJob المسبب للمشاكل، انقل العديد من WebJobs إلى خطة App Service أخرى لمعرفة ما إذا كان الوضع قد تحسن، أو ما إذا كانت هناك مشكلة لا تزال في إحدى الخطط. كرر العملية حتى تجد WebJob المسبب للمشاكل.

معلومات إضافية