مشاركة عبر


استكشاف المشاكل عند استخدام Azure Cosmos DB Python SDK مع API لحسابات NoSQL

مهم

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

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

ابدأ بهذه القائمة:

  • ألق نظرة على قسم المشكلات الشائعة والحلول في هذه المقالة.
  • انظر إلى مجموعة تطوير تطوير Python في المستودع المركزي Azure Cosmos DB، وهو متوفر مفتوح المصدر على GitHub. يحتوي على قسم للمشاكل يتم مراقبته بنشاط. تحقق لمعرفة ما إذا تم بالفعل تقديم أي مشكلة مماثلة مع حل بديل. نصيحة مفيدة هي تصفية المشاكل حسب الوسم *Cosmos* .
  • راجع نصائح الأداء لحزمة تطوير Azure Cosmos DB Python، واتبع الممارسات المقترحة.
  • اقرأ بقية هذا المقال، إذا لم تجد حلا. ثم قدم مشكلة على GitHub. إذا كان هناك خيار لإضافة وسوم إلى مشكلة GitHub الخاصة بك، أضف وسمة *Cosmos* .

تسجيل وتسجيل التشخيصات

مهم

نوصي باستخدام أحدث إصدار من حزمة تطوير تطوير بايثون. يمكنك مراجعة سجل الإصدارات هنا

تستخدم هذه المكتبة مكتبة التسجيل القياسية لتسجيل التشخيصات. يتم تسجيل المعلومات الأساسية عن جلسات HTTP (الروابط، الرؤوس، إلخ) على مستوى INFO.

يمكن تفعيل تسجيل مفصل على مستوى التصحيح، بما في ذلك أجسام الطلب/الاستجابة والرؤوس غير المحجوبة، على العميل باستخدام الوسيط:logging_enable

import sys
import logging
from azure.cosmos import CosmosClient

# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# This client will log detailed information about its HTTP sessions, at DEBUG level
client = CosmosClient(URL, credential=KEY, logging_enable=True)

وبالمثل، logging_enable يمكن تمكين تسجيل مفصل لعملية واحدة، حتى عندما لا يتم تمكين للعميل:

database = client.create_database(DATABASE_NAME, logging_enable=True)

بدلا من ذلك، يمكنك التسجيل باستخدام ، CosmosHttpLoggingPolicyالذي يمتد من النواة HttpLoggingPolicyالأزرق ، عن طريق تمرير المسجل إلى الوسيط logger . افتراضيا، سيستخدم السلوك من HttpLoggingPolicy. تمرير الحجة enable_diagnostics_logging سيتيح ، CosmosHttpLoggingPolicyوسيحتوي على معلومات إضافية في الرد المتعلقة بتصحيح مشاكل Cosmos.

import logging
from azure.cosmos import CosmosClient

#Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a file output
handler = logging.FileHandler(filename="azure")
logger.addHandler(handler)

# This client will log diagnostic information from the HTTP session by using the CosmosHttpLoggingPolicy.
# Since we passed in the logger to the client, it will log information on every request.
client = CosmosClient(URL, credential=KEY, logger=logger, enable_diagnostics_logging=True)

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

# This example enables the `CosmosHttpLoggingPolicy` and uses it with the `logger` passed in to the `create_database` request.
client = CosmosClient(URL, credential=KEY, enable_diagnostics_logging=True)
database = client.create_database(DATABASE_NAME, logger=logger)

أعد محاولة التصميم

راجع دليلنا لتصميم تطبيقات مرنة باستخدام Azure Cosmos DB SDKs للحصول على إرشادات حول كيفية تصميم التطبيقات المرنة ومعرفة دلالات إعادة المحاولة ل SDK.

المشكلات الشائعة والحلول

اقتراحات عامة

لأفضل أداء:

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

تحقق من مقاييس المدخل

سيساعد التحقق من مقاييس المدخل في تحديد ما إذا كانت مشكلة من جانب العميل أو إذا كانت هناك مشكلة في الخدمة. على سبيل المثال، إذا كانت المقاييس تحتوي على معدل مرتفع للطلبات محدودة المعدل (رمز حالة HTTP 429) مما يعني أنه يتم تقييد الطلب، فتحقق من قسم معدل الطلب كبير جداً.

تقليل الربط

يمكن أن يحدث تقليل الاتصال إما بسبب [حد الاتصال على جهاز مضيف] أو [استنفاد منفذ Azure SNAT (PAT)].

حد الاتصال على جهاز مضيف

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

ulimit -a

الحد الأقصى لعدد الملفات المفتوحة المسموح بها، والتي تعرف بأنها "بدون ملف"، يجب أن يكون على الأقل ضعف حجم مجموعة الاتصال الخاصة بك. لمزيد من المعلومات، راجع نصائح الأداء للعبة Azure Cosmos DB Python SDK.

Azure SNAT (PAT) port exhaustion

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

تستخدم منافذ Azure SNAT فقط عندما يكون لدى جهازك الافتراضي عنوان IP خاص وتحاول عملية من الجهاز الافتراضي الاتصال بعنوان IP عام. هناك حالتان لتجنب قيود Azure SNAT:

  • أضف نقطة نهاية خدمة Azure Cosmos DB إلى الشبكة الفرعية لشبكة Azure Virtual Machines الخاصة بك. لمزيد من المعلومات، راجع نقاط نهاية خدمة الشبكة الظاهرية Azure.

    عند تمكين نقطة نهاية الخدمة، لن يتم إرسال الطلبات من عنوان IP عام إلى Azure Cosmos DB. بدلاً من ذلك، يتم إرسال هوية الشبكة الافتراضية والشبكة الفرعية. قد يؤدي هذا التغيير إلى سقوط جدار الحماية إذا تم السماح بعناوين IP العامة فقط. إذا كنت تستخدم جدار حماية، فعند تمكين نقطة نهاية الخدمة، أضف شبكة فرعية إلى جدار الحماية باستخدام Virtual Network ACLs.

  • قم بتعيين عنوان IP عام لجهاز Azure الافتراضي الخاص بك.

لا يمكن الوصول إلى الخدمة - جدار حماية

azure.core.exceptions.ServiceRequestError: يشير إلى أن مجموعة تطوير البرمجيات لا يمكنها الوصول إلى الخدمة. اتبع حد الاتصال على جهاز مضيف.

فشل في الاتصال بمحاكي Azure Cosmos DB

شهادة Azure Cosmos DB Emulator HTTPS موقعة ذاتيا. لكي يعمل SDK بايثون مع المحاكي، استورد شهادة المحاكي. لمزيد من المعلومات، راجع تصدير شهادات Azure Cosmos DB Emulator.

وكيل HTTP

إذا كنت تستخدم وكيل HTTP، فتأكد من أنه يمكنه دعم عدد الاتصالات التي تم تكوينها في SDK ConnectionPolicy. خلاف ذلك، ستواجه مشكلات في الاتصال.

مشاكل الاستعلام الشائعة

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

الخطوات التالية