Sdílet prostřednictvím


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ž se zobrazí problém 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 poskytují možnost přizpůsobit si místní předvolbu. V různých sadách SDK se používají následující vlastnosti:

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

Pokud konfigurace místní předvolby obsahuje oblasti, které nejsou v účtu dostupné, 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 nenastavíte upřednostňovanou oblast, klient sady SDK nastaví výchozí hodnotu pro 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 oblastní předvolba 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.

Upozorňující

Logika převzetí služeb při selhání a dostupnosti popsaná v tomto dokumentu je možné zakázat v konfiguraci klienta, což se nedoporučuje, pokud uživatel nebude zpracovávat chyby dostupnosti samotné. Toho lze dosáhnout takto:

Za normálních okolností se klient sady SDK připojí k upřednostňované oblasti (pokud je nastavená regionální předvolba) nebo k primární oblasti (pokud není nastavená žádná předvolba) a operace budou omezené na tuto oblast, pokud nedojde k žádnému z následujících scénářů.

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

  • Vlastnost RequestDiagnosticsString pro odpovědi v sadě .NET SDK V2
  • Vlastnost Diagnostika odpovědí a výjimek 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 existuje).

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

Odebrání oblasti z účtu

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

Přidání oblasti do účtu

Každých 5 minut klient sady SDK služby Azure Cosmos DB načte konfiguraci účtu a aktualizuje oblasti, o kterých si je vědom.

Pokud odeberete oblast a později ji znovu přidáte do účtu, pokud má přidaná oblast v konfiguraci sady SDK vyšší pořadí regionální předvolby než aktuální připojená oblast, sada SDK se trvale přepne na použití této oblasti. Po zjištění přidané oblasti se na ni budou směrovat 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á, upřednostňovaná oblast se ignoruje. Pokud tuto oblast přidáte později, klient ji zjistí a trvale se přepne do této oblasti.

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ší požadavek na zápis selže se známou back-endovou odpovědí. Když se tato odpověď zjistí, klient odešle dotaz na účet, aby se dozvěděl novou oblast zápisu, a pokračuje v opakování aktuální operace a trvale směruje všechny budoucí operace zápisu do nové oblasti.

Regionální výpadek

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

Záruky konzistence relací

Při použití konzistence relace musí klient zaručit, že může číst vlastní zápisy. V účtech v jedné oblasti zápisu, kde se předvolba oblasti čtení liší od oblasti zápisu, můžou existovat případy, kdy uživatel vydá zápis a pak provede čtení z místní oblasti, místní oblast ještě nepřijala replikaci dat (rychlost omezení 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 se zajistila konzistence relace. 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, vydávají se opakování 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 pro daný požadavek používal protokol TCP, můžou 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žby (HTTP 503). Pokud je to možné, klient zkusí požadavek zopakovat místně na stejném koncovém bodu po dobu několika sekund.

Pokud uživatel nakonfiguroval upřednostňovaný seznam 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 povolených více oblastí zápisu, zatímco operace čtení je možné opakovat v jakékoli dostupné oblasti.

Další kroky