Диагностика и устранение неполадок доступности пакетов SDK для Azure Cosmos DB в многорегиональных средах

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

В этой статье описывается поведение последней версии пакетов SDK для Azure Cosmos DB при возникновении проблемы с подключением к определенному региону или при отработки отказа региона.

Все пакеты SDK для Azure Cosmos DB позволяют настроить региональные предпочтения. В различных пакетах SDK используются следующие свойства:

Когда пакет SDK инициализируется с конфигурацией, указывающей региональные предпочтения, он сначала получает сведения об учетной записи, включая доступные регионы, из глобальной конечной точки. Затем он применяет пересечение настроенных региональных предпочтений и доступных регионов учетной записи и использует порядок в региональных предпочтениях, чтобы приоритизировать результат.

Если конфигурация региональных предпочтений содержит регионы, которые не являются доступным регионом в учетной записи, значения будут игнорироваться. Если эти недопустимые регионы будут добавлены в учетную запись позже, пакет SDK будет использовать их, если они выше в конфигурации предпочтения.

Тип учетной записи Операции чтения Запись
Один регион записи Предпочтительный регион с наивысшим порядком Основной регион
Несколько регионов записи Предпочтительный регион с наивысшим порядком Предпочтительный регион с наивысшим порядком

Если не задать предпочитаемый регион, клиент пакета SDK по умолчанию будет использовать основной регион:

Тип учетной записи Операции чтения Запись
Один регион записи Основной регион Основной регион
Несколько регионов записи Основной регион Основной регион

Примечание

Основной регион — это первый регион в списке регионов учетной записи Azure Cosmos DB. Если значения, указанные в качестве региональных настроек, не совпадают с существующими регионами Azure, они игнорируются. Если эти значения совпадают с существующим регионом, но учетная запись не реплицирована в этот регион, клиент будет подключаться к следующему по предпочтительности региону, который соответствует настройкам, или к основному региону.

Предупреждение

Алгоритм, применяемый при отработке отказа и касающийся доступности, который описан в этом документе, может отключаться в конфигурации клиента, что не рекомендуется делать, если только пользовательское приложение не будет самостоятельно обрабатывать ошибки доступности. Это выполняется посредством следующих настроек.

В нормальных условиях клиент SDK подключается к предпочтительному региону (если региональные настройки заданы) или к основному региону (если региональные настройки не заданы), и работа будет происходить с выбранным таким образом регионом, если не произойдет ни один из следующих сценариев.

В таких случаях клиент, использующий пакет SDK для Azure Cosmos DB, предоставляет журналы и включает сведения о повторных попытках в составе диагностических сведений операции:

  • Свойство RequestDiagnosticsString из пакета SDK .NET V2 описывает ответное реагирование.
  • Свойство Diagnostics из пакета SDK .NET V3 описывает ответное реагирование и исключения.
  • Метод getDiagnostics() в ответах и исключениях в пакете SDK для Java версии 4.

При определении следующего предпочтительного региона клиент пакета SDK будет использовать список регионов из учетной записи, определяя приоритетность регионов по их предпочтительности (если она задана).

Подробные сведения о гарантиях SLA во время таких событий см. в документе Соглашения об уровне обслуживания для обеспечения доступности.

Удаление региона из учетной записи

При удалении региона из учетной записи Azure Cosmos DB любой клиент пакета SDK, который активно использует эту учетную запись, обнаружит удаление региона с помощью кода ответа серверной части. После этого клиент помечает региональную конечную точку как недоступную. Клиент повторяет текущую операцию, и все последующие операции будут постоянно направляться в следующий по предпочтению регион. Если в списке предпочтений имеется только одна запись (или этот список пуст), но в учетной записи есть другие доступные регионы, работа будет выполняться со следующим регионом из списка учетной записи.

Добавление региона в учетную запись

Каждые 5 минут клиент пакета SDK Для Azure Cosmos DB считывает конфигурацию учетной записи и обновляет регионы, о которых ему известно.

В случае удаления региона из учетной записи и повторного его добавления в последствии в эту учетную запись, если при этом в конфигурации пакета SDK для этого добавляемого региона задан более высокий приоритет, чем у текущего подключенного региона, то пакет SDK переключается на постоянное использование этого добавляемого региона. После обнаружения добавленного региона в него направляются все последующие запросы.

Если вы настраиваете клиент для подключения к региону, который отсутствует в учетной записи Azure Cosmos DB, предпочтительный регион игнорируется. Если этот регион добавить в учетную запись позже, клиент обнаружит его и переключится на его постоянное использование.

Отработка отказа региона в учетной записи с одним регионом записи

При запуске отработки отказа в текущем регионе записи следующий запрос на запись завершится ошибкой с соответствующим ответом сервера. При обнаружении этого ответа клиент запрашивает у учетной записи новый регион записи и продолжает выполнять текущую операцию, и все последующие операции записи направляются в новый регион.

Сбой в регионе

Если у учетной записи имеется один регион записи и при выполнении операции записи в этом регионе происходит сбой, алгоритм действий аналогичен отработке отказа вручную. Для запросов чтения или при наличии нескольких регионов записи алгоритм действий аналогичен удалению области.

Гарантии согласованности сеансов

При использовании функции согласованности сеанса клиенту нужно гарантировать, что он может считывать собственные записи. В учетных записях с одним регионом записи, где предпочтительный регион чтения отличается от региона записи, могут быть случаи, когда пользователь выполняет запись, а затем выполняет чтение из локального региона, локальный регион еще не получил репликацию данных (ограничение скорости). В таких случаях пакет SDK получает определенный сбой от службы при операции чтения и повторяет чтение в основном регионе, чтобы обеспечить согласованность сеанса. Для учетных записей с несколькими регионами записи применяется та же семантика сеанса, но так как доступно несколько регионов записи, повторные попытки выполняются с использованием списка предпочтительных регионов или порядка регионов учетной записи.

Временные проблемы с подключением по протоколу TCP

В сценариях, когда клиент пакета SDK Для Azure Cosmos DB настроен на использование протокола TCP, для заданного запроса могут возникать ситуации, когда сетевые условия временно влияют на обмен данными с определенной конечной точкой. Эти временные условия в сети могут проявляться как истечение времени ожидания по условиям протокола TCP и как ошибки типа «Служба недоступна» (HTTP 503). По возможности клиент повторит запрос локально для той же самой конечной точки в течение нескольких секунд.

Если пользователь настроил предпочтительный список регионов с несколькими регионами, а клиент исчерпал все локальные повторные попытки, он может попытаться повторить одну операцию в следующем регионе из списка предпочтений. Операции записи можно повторить только в другом регионе, если в учетной записи Azure Cosmos DB включено несколько регионов записи, а операции чтения можно повторить в любом доступном регионе.

Дальнейшие действия