Diagnostika a řešení potíží s dostupností sad SDK služby Azure Cosmos DB v prostředích s více oblastmi

PLATÍ PRO: NoSQL

Tento článek popisuje chování nejnovější verze sad SDK služby Azure Cosmos DB, když dojde k problému s připojením k určité oblasti nebo když dojde k převzetí služeb při selhání oblasti.

Všechny sady SDK služby Azure Cosmos DB umožňují přizpůsobit místní předvolbu. Následující vlastnosti se používají v různých sadách SDK:

Když se sada SDK inicializuje s konfigurací, která určuje místní předvolbu, z globálního koncového bodu nejprve získá informace o účtu včetně dostupných oblastí. Pak použije průsečík nakonfigurované místní předvolby a dostupných oblastí účtu a použije pořadí v místní předvolbě k určení priority výsledku.

Pokud konfigurace místních předvoleb obsahuje oblasti, které nejsou dostupnou oblastí v účtu, budou hodnoty ignorovány. Pokud se tyto neplatné oblasti později přidají do účtu, sada SDK je použije, pokud jsou v konfiguraci předvoleb vyšší.

Typ účtu Čtení Zápisy
Jedna oblast zápisu Upřednostňovaná oblast s nejvyšším pořadím Primární oblast
Více oblastí zápisu Upřednostňovaná oblast s nejvyšším pořadím Upřednostňovaná oblast s nejvyšším pořadím

Pokud upřednostňovanou oblast nenastavíte, klient sady SDK ve výchozím nastavení nastaví primární oblast:

Typ účtu Čtení Zápisy
Jedna oblast zápisu Primární oblast Primární oblast
Více oblastí zápisu Primární oblast Primární oblast

Poznámka

Primární oblast odkazuje na první oblast v seznamu oblastí účtu služby Azure Cosmos DB. Pokud se hodnoty zadané jako předvolba oblasti neshodují s žádnými existujícími oblastmi Azure, budou ignorovány. Pokud odpovídají existující oblasti, ale účet se do ní nereplikuje, klient se připojí k další upřednostňované oblasti, která odpovídá, nebo k primární oblasti.

Upozornění

Logiku převzetí služeb při selhání a dostupnost popsanou v tomto dokumentu je možné v konfiguraci klienta zakázat, což se nedoporučuje, pokud se uživatelská aplikace nebude zabývat chybami dostupnosti sama. Toho lze dosáhnout:

Za normálních okolností se klient sady SDK připojí k upřednostňované oblasti (pokud je nastavená místní předvolba) nebo k primární oblasti (pokud není nastavená žádná předvolba) a operace budou omezeny na danou oblast, pokud nenastane některý z následujících scénářů.

V těchto případech klient používající sadu Azure Cosmos DB SDK zveřejňuje protokoly a jako součást diagnostických informací o operaci zahrne informace o opakování:

  • Vlastnost RequestDiagnosticsString u odpovědí v sadě .NET SDK v2
  • Vlastnost Diagnostics pro odpovědi a výjimky v sadě .NET SDK v3
  • Pomocí metody getDiagnostics() u odpovědí a výjimek v sadě Java SDK v4.

Při určování další oblasti v pořadí podle preference klient sady SDK použije seznam oblastí účtu a určí prioritu upřednostňovaných oblastí (pokud existují).

Podrobné informace o zárukách SLA během těchto událostí najdete v smlouvách SLA o dostupnosti.

Odebrání oblasti z účtu

Když odeberete oblast z účtu služby Azure Cosmos DB, každý klient sady SDK, který účet aktivně používá, rozpozná odebrání oblasti prostřednictvím kódu odpovědi back-endu. Klient pak označí místní koncový bod jako nedostupný. Klient opakuje aktuální operaci a všechny budoucí operace jsou trvale směrovány do další oblasti v pořadí podle priority. V případě, že seznam předvoleb měl jenom jednu položku (nebo byl prázdný), ale účet má k dispozici další oblasti, přesměruje se do další oblasti v seznamu účtů.

Přidání oblasti do účtu

Klient sady SDK služby Azure Cosmos DB každých 5 minut přečte konfiguraci účtu a aktualizuje oblasti, o kterých vědí.

Pokud oblast odeberete a později ji přidáte zpátky do účtu, pokud má přidaná oblast v konfiguraci sady SDK vyšší pořadí regionálních předvoleb než aktuálně připojená oblast, sada SDK se přepne zpět na trvalé používání této oblasti. Po zjištění přidané oblasti se na ni směrují všechny budoucí požadavky.

Pokud nakonfigurujete klienta tak, aby se nejlépe připojil k oblasti, kterou účet služby Azure Cosmos DB nemá, bude upřednostňovaná oblast ignorována. Pokud tuto oblast přidáte později, klient ji zjistí a trvale se do této oblasti přepne.

Převzetí služeb při selhání oblasti zápisu v jednom účtu oblasti zápisu

Pokud zahájíte převzetí služeb při selhání aktuální oblasti zápisu, další žádost o zápis selže se známou back-endovou odpovědí. Když se tato odpověď zjistí, klient se na účet dotazuje, aby se dozvěděl o nové oblasti zápisu, a pokračovat v opakování aktuální operace a trvale směruje všechny budoucí operace zápisu do nové oblasti.

Výpadek oblasti

Pokud je účet jednou oblastí zápisu a k regionálnímu výpadku dojde během operace zápisu, je chování podobné ručnímu převzetí služeb při selhání. U účtů žádostí o čtení nebo více oblastí zápisu se chování podobá odebrání oblasti.

Záruky konzistence relací

Při použití konzistence relací musí klient zaručit, že může číst vlastní zápisy. U účtů s jednou oblastí zápisu, kde se předvolba oblasti čtení liší od oblasti zápisu, můžou nacházet případy, kdy uživatel vydá zápis a pak provede čtení z místní oblasti. Místní oblast ještě neobdržela replikaci dat (omezení rychlosti světla). V takových případech sada SDK obdrží konkrétní selhání ze služby při operaci čtení a opakuje čtení v primární oblasti, aby byla zajištěna konzistence relací. U účtů s více oblastmi zápisu platí stejná sémantika relace, ale vzhledem k tomu, že je k dispozici více oblastí zápisu, jsou opakované pokusy vydávány pomocí seznamu upřednostňovaných oblastí nebo pořadí oblastí účtu.

Přechodné problémy s připojením k protokolu TCP

Ve scénářích, kdy je klient sady Sdk služby Azure Cosmos DB nakonfigurovaný tak, aby používal protokol TCP, můžou pro daný požadavek nastat situace, kdy síťové podmínky dočasně ovlivňují komunikaci s konkrétním koncovým bodem. Tyto dočasné síťové podmínky se můžou zobrazit jako chyby vypršení časového limitu protokolu TCP a nedostupná služba (HTTP 503). Pokud je to možné, zkusí klient požadavek zopakovat místně na stejném koncovém bodu po dobu několika sekund.

Pokud uživatel nakonfiguroval seznam upřednostňovaných oblastí s více než jednou oblastí a klient vyčerpal všechny místní opakování, může se pokusit zkusit zopakovat tuto jednu operaci v další oblasti ze seznamu předvoleb. Operace zápisu je možné opakovat pouze v jiné oblasti, pokud má účet služby Azure Cosmos DB povoleno více oblastí zápisu, zatímco operace čtení je možné opakovat v libovolné dostupné oblasti.

Další kroky