تشخيص واستكشاف أخطاء توفر Azure Cosmos DB SDKs في البيئات متعددة المناطق وإصلاحها
ينطبق على: NoSQL
توضح هذه المقالة سلوك أحدث إصدار من Azure Cosmos DB SDKs عندما ترى مشكلة في الاتصال بمنطقة معينة أو عند حدوث تجاوز فشل منطقة.
تمنحك جميع Azure Cosmos DB SDKs خيارا لتخصيص التفضيل الإقليمي. تُستخدم الخصائص التالية في حزم SDK مختلفة:
- الخاصية ConnectionPolicy.PreferredLocations في .NET V2 SDK.
- خصائص CosmosClientOptions.ApplicationRegion أو CosmosClientOptions.ApplicationPreferredRegions في .NET V3 SDK.
- طريقة CosmosClientBuilder.preferredRegions في Java V4 SDK.
- المعلمة CosmosClient.preferred_locations في Python SDK.
- المعلمة CosmosClientOptions.ConnectionPolicy.preferredLocations في JS SDK.
عندما تتم تهيئة SDK بتكوين يحدد التفضيل الإقليمي، فإنه سيحصل أولا على معلومات الحساب بما في ذلك المناطق المتوفرة من نقطة النهاية العمومية. ثم سيتم تطبيق تقاطع التفضيل الإقليمي المكون والمناطق المتاحة للحساب واستخدام الترتيب في التفضيل الإقليمي لتحديد أولويات النتيجة.
إذا كان تكوين التفضيل الإقليمي يحتوي على مناطق ليست منطقة متوفرة في الحساب، تجاهل القيم. إذا تمت إضافة هذه المناطق غير الصالحة لاحقا إلى الحساب، فستستخدمها SDK إذا كانت أعلى في تكوين التفضيل.
نوع الحساب | القراءات | الكتابات |
---|---|---|
منطقة كتابة فردية | المنطقة المفضلة ذات الترتيب الأعلى | المنطقة الأساسية |
مناطق كتابة متعددة | المنطقة المفضلة ذات الترتيب الأعلى | المنطقة المفضلة ذات الترتيب الأعلى |
إذا لم تقم بتعيين منطقة مفضلة، فسيتم تعيين عميل SDK افتراضيّاً على المنطقة الأساسية:
نوع الحساب | القراءات | الكتابات |
---|---|---|
منطقة كتابة فردية | المنطقة الأساسية | المنطقة الأساسية |
مناطق كتابة متعددة | المنطقة الأساسية | المنطقة الأساسية |
إشعار
تشير المنطقة الأساسية إلى المنطقة الأولى في قائمة منطقة حساب Azure Cosmos DB. إذا كانت القيم المحددة كتفضيل إقليمي لا تتطابق مع أي مناطق Azure موجودة، فسيتم تجاهلها. إذا كانت تتطابق مع منطقة موجودة ولكن لم يتم نسخ الحساب إليها، فسيقوم العميل بالاتصال بالمنطقة المفضلة التالية المطابقة أو بالمنطقة الأساسية.
تحذير
يمكن تعطيل منطق تجاوز الفشل والتوافر الموضح في هذا المستند في تكوين العميل، وهو أمر لا ينصح به إلا إذا كان تطبيق المستخدم سيعالج أخطاء التوفر بنفسه. يمكن تحقيق ذلك من خلال:
- إعداد خاصية ConnectionPolicy.EnableEndpointDiscovery في NET. V2 SDK على false.
- تعيين خاصية CosmosClientOptions.LimitToEndpoint في .NET V3 SDK على true.
- تعيين طريقة CosmosClientBuilder.endpointDiscoveryEnabled في Java V4 SDK على false.
- تعيين معلمة CosmosClient.enable_endpoint_discovery في Python SDK على false.
- تعيين معلمة CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery في JS SDK على false.
في ظل الظروف العادية، سيتصل عميل SDK بالمنطقة المفضلة (إذا تم تعيين تفضيل إقليمي) أو بالمنطقة الأساسية (إذا لم يتم تعيين تفضيل)، وستقتصر العمليات على تلك المنطقة، ما لم يكن هناك أي من السيناريوهات التالية تحدث.
في هذه الحالات، يعرض العميل الذي يستخدم Azure Cosmos DB SDK السجلات ويتضمن معلومات إعادة المحاولة كجزء من معلومات تشخيص العملية:
- الخاصية RequestDiagnosticsString على الاستجابات في .NET V2 SDK.
- خاصية التشخيص في الاستجابات والاستثناءات في .NET V3 SDK.
- طريقة getDiagnostics () في الاستجابات والاستثناءات في Java V4 SDK.
عند تحديد المنطقة التالية بترتيب التفضيل، سيستخدم عميل SDK قائمة منطقة الحساب، مع إعطاء الأولوية للمناطق المفضلة (إن وجدت).
للحصول على تفاصيل شاملة حول ضمانات اتفاقية مستوى الخدمة (SLA) أثناء هذه الأحداث، راجع اتفاقيات مستوى الخدمة للتوفر.
إزالة منطقة من الحساب
عند إزالة منطقة من حساب Azure Cosmos DB، سيكتشف أي عميل SDK يستخدم الحساب بنشاط إزالة المنطقة من خلال رمز استجابة الخلفية. يقوم العميل بعد ذلك بوضع علامة على نقطة النهاية الإقليمية على أنها غير متوفرة. يقوم العميل بإعادة محاولة العملية الحالية ويتم توجيه جميع العمليات المستقبلية بشكل دائم إلى المنطقة التالية بترتيب التفضيل. في حالة احتواء قائمة التفضيلات على إدخال واحد فقط (أو كانت فارغة) ولكن الحساب به مناطق أخرى متاحة، فسيتم توجيهها إلى المنطقة التالية في قائمة الحسابات.
إضافة منطقة إلى حساب
كل 5 دقائق، يقرأ عميل Azure Cosmos DB SDK تكوين الحساب ويحدث المناطق التي يدركها.
إذا قمت بإزالة منطقة وإضافتها مرة أخرى إلى الحساب لاحقاً، إذا كان للمنطقة المضافة ترتيب تفضيل إقليمي أعلى في تكوين SDK من المنطقة المتصلة الحالية، فستتحول SDK مرة أخرى لاستخدام هذه المنطقة بشكل دائم. بعد اكتشاف المنطقة المضافة، يتم توجيه جميع الطلبات المستقبلية إليها.
إذا قمت بتكوين العميل ليفضل الاتصال بمنطقة لا يمتلكها حساب Azure Cosmos DB، يتم تجاهل المنطقة المفضلة. إذا أضفت هذه المنطقة لاحقاً، يكتشفها العميل وسيتحول إلى تلك المنطقة بشكل دائم.
فشل في منطقة الكتابة في حساب منطقة كتابة واحدة
إذا بدأت تجاوز فشل منطقة الكتابة الحالية، فسيفشل طلب الكتابة التالي مع استجابة خلفية معروفة. عند اكتشاف هذه الاستجابة، سيقوم العميل بالاستعلام عن الحساب لمعرفة منطقة الكتابة الجديدة والمتابعة لإعادة محاولة العملية الحالية وتوجيه جميع عمليات الكتابة المستقبلية بشكل دائم إلى المنطقة الجديدة.
الانقطاع الإقليمي
إذا كان الحساب عبارة عن منطقة كتابة فردية وحدث الانقطاع الإقليمي أثناء عملية الكتابة، يكون السلوك مشابهاً لـ تجاوز الفشل اليدوي. بالنسبة لطلبات القراءة أو حسابات مناطق الكتابة المتعددة، يكون السلوك مشابهاً لـ إزالة منطقة.
ضمانات تناسق الجلسة
عند استخدام تناسق الجلسة، يحتاج العميل إلى ضمان أنه يمكنه قراءة ما يكتبه بنفسه. في حسابات منطقة الكتابة الفردية حيث يختلف تفضيل منطقة القراءة عن منطقة الكتابة، قد تكون هناك حالات يصدر فيها المستخدم كتابة ثم يقوم بقراءة من منطقة محلية، ولم تتلق المنطقة المحلية النسخ المتماثل للبيانات (سرعة القيد الخفيف). في مثل هذه الحالات، يتلقى SDK فشلا محددا من الخدمة في عملية القراءة ويعيد محاولة القراءة على المنطقة الأساسية لضمان تناسق الجلسة. بالنسبة للحسابات ذات مناطق الكتابة المتعددة، تنطبق دلالات الجلسة نفسها ولكن نظرا لوجود مناطق كتابة متعددة متوفرة، يتم إصدار عمليات إعادة المحاولة باستخدام قائمة المنطقة المفضلة أو ترتيب منطقة الحساب.
مشكلات الاتصال العابرة على بروتوكول تحكم الإرسال
في السيناريوهات التي يتم فيها تكوين عميل Azure Cosmos DB SDK لاستخدام بروتوكول TCP، لطلب معين، قد تكون هناك حالات تؤثر فيها ظروف الشبكة مؤقتا على الاتصال بنقطة نهاية معينة. يمكن أن تظهر حالات الشبكة المؤقتة هذه على أنها انتهاء مهلة بروتوكول تحكم الإرسال وأخطاء الخدمة غير متوفرة (بروتوكول نقل نص تشعبي 503). سيعيد العميل، إن أمكن، محاولة الطلب محلياً على نفس نقطة النهاية لبضع ثوانٍ.
إذا قام المستخدم بتكوين قائمة منطقة مفضلة مع أكثر من منطقة واحدة واستنفد العميل جميع عمليات إعادة المحاولة المحلية، فيمكنه محاولة إعادة محاولة هذه العملية الفردية في المنطقة التالية من قائمة التفضيلات. لا يمكن إعادة محاولة عمليات الكتابة إلا في منطقة أخرى إذا كان حساب Azure Cosmos DB يحتوي على مناطق كتابة متعددة ممكنة، بينما يمكن إعادة محاولة عمليات القراءة في أي منطقة متوفرة.
الخطوات التالية
- راجع توفر اتفاقيات مستوى الخدمة.
- استخدم أحدث NET SDK.
- استخدم أحدث Java SDK
- استخدم أحدث Python SDK
- استخدم أحدث Node SDK