استكشاف أخطاء الاتصال الصادر المتقطع وإصلاحها في Azure App Service
تساعدك هذه المقالة على استكشاف أخطاء الاتصال المتقطع ومشكلات الأداء ذات الصلة وإصلاحها في Azure App Service. سيوفر هذا الموضوع مزيدا من المعلومات حول منهجيات استنفاد منافذ ترجمة عناوين الشبكة المصدر (SNAT) ومنهجيات استكشاف الأخطاء وإصلاحها الخاصة بها. إذا كنت بحاجة إلى مزيد من المساعدة في أي وقت من هذه المقالة، فاتصل بخبراء Azure في منتديات MSDN Azure وStack Overflow. بدلا من ذلك، قم بتسجيل حادث دعم Azure. انتقل إلى موقع دعم Azure وحدد الحصول على الدعم.
الأعراض
قد تظهر التطبيقات والوظائف المستضافة على خدمة Azure App واحدا أو أكثر من الأعراض التالية:
- أوقات استجابة بطيئة على كل أو بعض المثيلات في خطة الخدمة.
- أخطاء 5xx أو Bad Gateway المتقطعة
- رسائل وجود أخطاء في المهلة
- تعذر الاتصال بنقاط النهاية الخارجية (مثل SQLDB و Service Fabric وخدمات التطبيقات الأخرى وما إلى ذلك)
السبب
السبب الرئيسي لمشكلات الاتصال المتقطع هو الوصول إلى حد معين أثناء إجراء اتصالات صادرة جديدة. تتضمن الحدود التي يمكنك الوصول إليها ما يلي:
- اتصالات TCP: هناك حد لعدد الاتصالات الصادرة التي يمكن إجراؤها. يرتبط الحد الأقصى للاتصالات الصادرة بحجم العامل المستخدم.
- منافذ SNAT: تصف الاتصالات الصادرة في Azure قيود منفذ SNAT وكيفية تأثيرها على الاتصالات الصادرة. يستخدم Azure ترجمة عناوين الشبكة المصدر (SNAT) وموازنات التحميل (غير المعرضة للعملاء) للاتصال بعناوين IP العامة. يتم إعطاء كل مثيل على خدمة Azure App في البداية رقما مخصصا مسبقا من منافذ SNAT البالغ عددها 128 منفذا. يؤثر حد منفذ SNAT على فتح الاتصالات بنفس العنوان ومجموعة المنافذ. إذا أنشأ تطبيقك اتصالات بمزيج من مجموعات العناوين والمنافذ، فلن تستخدم منافذ SNAT. يتم استخدام منافذ SNAT عند إجراء مكالمات متكررة إلى نفس العنوان ومجموعة المنافذ. بمجرد إصدار المنفذ، يصبح المنفذ متاحا لإعادة استخدامه حسب الحاجة. يستعيد موازن تحميل شبكة Azure منفذ SNAT من الاتصالات المغلقة فقط بعد الانتظار لمدة 4 دقائق.
عندما تفتح التطبيقات أو الوظائف اتصالا جديدا بسرعة ، يمكنها بسرعة استنفاد حصتها المخصصة مسبقا من المنافذ البالغ عددها 128 منفذا. ثم يتم حظرها حتى يتوفر منفذ SNAT جديد، إما من خلال تخصيص منافذ SNAT إضافية ديناميكيا، أو من خلال إعادة استخدام منفذ SNAT مستصلح. إذا نفد تطبيقك من منافذ SNAT، فسيواجه مشكلات متقطعة في الاتصال الصادر.
تجنب المشكلة
هناك بعض الحلول التي تتيح لك تجنب قيود منفذ SNAT. وهي تتضمن:
- تجمعات الاتصال: من خلال تجميع اتصالاتك، يمكنك تجنب فتح اتصالات شبكة جديدة للمكالمات إلى نفس العنوان والمنفذ.
- نقاط نهاية الخدمة: ليس لديك قيود على منفذ SNAT على الخدمات المؤمنة بنقاط نهاية الخدمة.
- نقاط النهاية الخاصة: ليس لديك قيود منفذ SNAT على الخدمات المضمونة باستخدام نقاط النهاية الخاصة.
- بوابة NAT: باستخدام بوابة NAT، لديك 64k منفذ SNAT صادر يمكن استخدامه بواسطة الموارد التي ترسل حركة المرور عبره.
تجنب مشكلة منفذ SNAT يعني تجنب إنشاء اتصالات جديدة بشكل متكرر إلى نفس المضيف والمنفذ. تعد تجمعات الاتصال واحدة من الطرق الأكثر وضوحا لحل هذه المشكلة.
إذا كانت وجهتك هي خدمة Azure تدعم نقاط نهاية الخدمة، فيمكنك تجنب مشكلات استنفاد منفذ SNAT باستخدام تكامل VNet الإقليمي ونقاط نهاية الخدمة أو نقاط النهاية الخاصة. عند استخدام تكامل VNet الإقليمي ووضع نقاط نهاية الخدمة على الشبكة الفرعية للتكامل، لن يكون لحركة مرور تطبيقك الصادرة إلى هذه الخدمات قيود منفذ SNAT الصادرة. وبالمثل ، إذا كنت تستخدم تكامل VNet الإقليمي ونقاط النهاية الخاصة ، فلن تواجه أي مشكلات في منفذ SNAT الصادر إلى تلك الوجهة.
إذا كانت وجهتك نقطة نهاية خارجية خارج Azure، فإن استخدام بوابة NAT يمنحك منافذ SNAT صادرة بدقة 64 كيلو بايت. كما يمنحك عنوانا مخصصا للبريد الصادر لا تشاركه مع أي شخص.
إذا كان ذلك ممكنا، قم بتحسين التعليمات البرمجية الخاصة بك لاستخدام تجمعات الاتصال وتجنب الموقف بأكمله. ليس من الممكن دائما تغيير التعليمات البرمجية بسرعة كافية للتخفيف من هذا الموقف. بالنسبة للحالات التي لا يمكنك فيها تغيير التعليمات البرمجية الخاصة بك في الوقت المناسب ، استفد من الحلول الأخرى. أفضل حل للمشكلة هو الجمع بين جميع الحلول بأفضل ما يمكنك. حاول استخدام نقاط نهاية الخدمة ونقاط النهاية الخاصة لخدمات Azure وبوابة NAT للبقية.
تتم مناقشة الاستراتيجيات العامة للتخفيف من استنفاد منفذ SNAT في قسم حل المشكلات من الاتصالات الصادرة لوثائق Azure . من بين هذه الاستراتيجيات، ينطبق ما يلي على التطبيقات والوظائف المستضافة على خدمة Azure App.
تعديل التطبيق لاستخدام تجمّع الاتصال
- لتجميع اتصالات HTTP، راجع اتصالات HTTP للتجمع مع HttpClientFactory.
- للحصول على معلومات حول تجميع اتصال SQL Server، راجع تجميع الاتصال SQL Server (ADO.NET).
- لتنفيذ التجميع مع تطبيقات إطار عمل الكيان، راجع تجميع DbContext.
فيما يلي مجموعة من الروابط لتنفيذ تجميع الاتصال بواسطة مكدس حلول مختلف.
Node
بشكل افتراضي ، لا يتم الاحتفاظ باتصالات NodeJS على قيد الحياة. فيما يلي قواعد البيانات والحزم الشائعة لتجميع الاتصالات التي تحتوي على أمثلة لكيفية تنفيذها.
HTTP البقاء على قيد الحياة
Java
فيما يلي المكتبات الشائعة المستخدمة لتجميع اتصال JDBC والتي تحتوي على أمثلة لكيفية تنفيذها: تجميع اتصال JDBC.
تجميع اتصال HTTP
PHP
على الرغم من أن PHP لا يدعم تجميع الاتصال ، يمكنك محاولة استخدام اتصالات قاعدة البيانات المستمرة إلى الخادم الخلفي الخاص بك.
خادم MySQL
- اتصالات MySQLi للإصدارات الأحدث
- mysql_pconnect للإصدارات القديمة من PHP
مصادر البيانات الأخرى
تعديل التطبيق لإعادة استخدام الاتصال
- للحصول على مؤشرات وأمثلة إضافية حول إدارة الاتصالات في وظائف Azure، راجع إدارة الاتصالات في وظائف Azure.
تعديل التطبيق لاستخدام منطق إعادة المحاولة أقل عدوانية
- للحصول على إرشادات وأمثلة إضافية، راجع نمط إعادة المحاولة.
استخدام keepalives لإعادة تعيين مهلة الخمول الصادرة
- لتنفيذ عمليات الاحتفاظ بالتطبيقات Node.js، راجع تطبيق العقدة الخاص بي الذي يجري مكالمات صادرة مفرطة.
إرشادات إضافية خاصة بخدمة التطبيقات:
- يجب أن يحاكي اختبار الحمل بيانات العالم الحقيقي بسرعة تغذية ثابتة. يمكن لاختبار التطبيقات والوظائف تحت ضغط العالم الحقيقي تحديد مشكلات استنفاد منفذ SNAT وحلها في وقت مبكر.
- تأكد من أن الخدمات الخلفية يمكنها إرجاع الاستجابات بسرعة. لاستكشاف مشكلات الأداء وإصلاحها باستخدام قاعدة بيانات Azure SQL، راجع استكشاف مشكلات أداء قاعدة بيانات Azure SQL وإصلاحها باستخدام Insights الذكي.
- قم بتوسيع نطاق خطة خدمة التطبيقات إلى المزيد من المثيلات. لمزيد من المعلومات حول تغيير الحجم، راجع تغيير حجم تطبيق في Azure App Service. يتم تخصيص عدد من منافذ SNAT لكل مثيل عامل في خطة خدمة تطبيق. إذا قمت بتوزيع استخدامك عبر المزيد من المثيلات، فقد تحصل على استخدام منفذ SNAT لكل مثيل أقل من الحد الموصى به البالغ 100 اتصال صادر، لكل نقطة نهاية بعيدة فريدة.
- فكر في الانتقال إلى بيئة خدمة التطبيقات (ASE) ، حيث يتم تخصيص عنوان IP واحد صادر لك ، وتكون حدود الاتصالات ومنافذ SNAT أعلى بكثير. في بورصة عمان، يعتمد عدد منافذ SNAT لكل مثيل على جدول التخصيص المسبق لموازن تحميل Azure - لذلك على سبيل المثال، تحتوي بورصة عمان التي تحتوي على 1-50 مثيلا عاملا على 1024 منفذا مخصصا مسبقا لكل مثيل، في حين أن بورصة عمان التي تحتوي على مثيلات عامل 51-100 لديها 512 منفذا مخصصا مسبقا لكل مثيل.
من الأسهل حل تجنب حدود TCP الصادرة ، حيث يتم تعيين الحدود حسب حجم العامل. يمكنك رؤية الحدود في Sandbox Cross VM الحدود العددية - اتصالات TCP
| اسم الحد | الوصف | صغير (A1) | متوسط (A2) | كبير (A3) | الطبقة المعزولة (ASE) |
|---|---|---|---|---|---|
| الاتصالات | عدد الاتصالات عبر الجهاز الظاهري بأكمله | 1920 | 3968 | 8064 | 16,000 |
لتجنب حدود TCP الصادرة، يمكنك إما زيادة حجم العاملين لديك أو التوسع أفقيا.
استكشاف الأخطاء وإصلاحها
إن معرفة نوعين من حدود الاتصال الصادر، وما يفعله تطبيقك، من شأنه أن يسهل استكشاف الأخطاء وإصلاحها. إذا كنت تعرف أن تطبيقك يجري العديد من المكالمات إلى حساب التخزين نفسه، فقد تشك في وجود حد SNAT. إذا أنشأ تطبيقك عددا كبيرا من المكالمات إلى نقاط النهاية في جميع أنحاء الإنترنت ، فستشك في أنك تصل إلى حد VM.
إذا كنت لا تعرف سلوك التطبيق بما يكفي لتحديد السبب بسرعة، فهناك بعض الأدوات والتقنيات المتوفرة في App Service للمساعدة في هذا التحديد.
البحث عن معلومات تخصيص منفذ SNAT
يمكنك استخدام تشخيصات خدمة التطبيقات للعثور على معلومات تخصيص منفذ SNAT، ومراقبة مقياس تخصيص منافذ SNAT لموقع خدمة التطبيق. للعثور على معلومات تخصيص منفذ SNAT، اتبع الخطوات التالية:
- للوصول إلى تشخيصات خدمة التطبيق، انتقل إلى تطبيق ويب خدمة التطبيقات أو بيئة خدمة التطبيق في مدخل Azure. في التنقل الأيسر حدد «تشخيص المشكلات وحلها».
- حدد فئة التوفر والأداء
- حدد لوحة استنفاد منفذ SNAT في قائمة اللوحات المتوفرة ضمن الفئة. الممارسة هي إبقائه أقل من 128. إذا كنت بحاجة إليها ، فلا يزال بإمكانك فتح تذكرة دعم وسيحصل مهندس الدعم على المقياس من الواجهة الخلفية لك.
نظرا لأن استخدام منفذ SNAT غير متوفر كمقياس، فلا يمكن القياس التلقائي استنادا إلى استخدام منفذ SNAT أو تكوين المقياس التلقائي استنادا إلى مقياس تخصيص منافذ SNAT.
اتصالات TCP ومنافذ SNAT
لا ترتبط اتصالات TCP ومنافذ SNAT مباشرة. يتم تضمين كاشف استخدام اتصالات TCP في الشفرة النصلية لتشخيص المشكلات وحلها في أي موقع من مواقع App Service. ابحث عن عبارة "اتصالات TCP" للعثور عليها.
- يتم استخدام منافذ SNAT فقط لتدفقات الشبكة الخارجية، بينما يتضمن إجمالي اتصالات TCP اتصالات الاسترجاع المحلية.
- يمكن مشاركة منفذ SNAT بواسطة تدفقات مختلفة، إذا كانت التدفقات مختلفة في البروتوكول أو عنوان IP أو المنفذ. يحسب مقياس اتصالات TCP كل اتصال TCP.
- يحدث حد اتصالات TCP على مستوى مثيل العامل. لا تستخدم موازنة التحميل الصادر لشبكة Azure مقياس اتصالات TCP لتحديد منفذ SNAT.
- يتم وصف حدود اتصالات TCP في Sandbox Cross VM الحدود العددية - اتصالات TCP
- ستفشل جلسات عمل TCP الحالية عند جلسات TCP الصادرة الجديدة من منفذ مصدر خدمة تطبيقات Azure. يمكنك إما استخدام عنوان IP واحد أو إعادة تكوين أعضاء تجمع الواجهة الخلفية لتجنب التعارضات
| اسم الحد | الوصف | صغير (A1) | متوسط (A2) | كبير (A3) | الطبقة المعزولة (ASE) |
|---|---|---|---|---|---|
| الاتصالات | عدد الاتصالات عبر الجهاز الظاهري بأكمله | 1920 | 3968 | 8064 | 16,000 |
وظائف الويب واتصالات قاعدة البيانات
إذا تم استنفاد منافذ SNAT، حيث يتعذر على WebJobs الاتصال بقاعدة بيانات SQL، فلا يوجد مقياس لإظهار عدد الاتصالات التي يتم فتحها بواسطة كل عملية تطبيق ويب فردية. للعثور على WebJob الإشكالي ، انقل العديد من WebJobs إلى خطة خدمة تطبيق أخرى لمعرفة ما إذا كان الوضع يتحسن ، أو إذا بقيت مشكلة في إحدى الخطط. كرر العملية حتى تجد WebJob الإشكالية.