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:
- Vlastnost ConnectionPolicy.PreferredLocations v sadě .NET SDK v2.
- Vlastnosti CosmosClientOptions.ApplicationRegion nebo CosmosClientOptions.ApplicationPreferredRegions v sadě .NET SDK verze 3
- Metoda CosmosClientBuilder.preferredRegions v sadě Java SDK verze 4
- Parametr CosmosClient.preferred_locations v sadě Python SDK.
- Parametr CosmosClientOptions.ConnectionPolicy.preferredLocations v sadě JS 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:
- Nastavení vlastnosti ConnectionPolicy.EnableEndpointDiscovery v sadě .NET SDK v2 na hodnotu false.
- Nastavení vlastnosti CosmosClientOptions.LimitToEndpoint v sadě .NET SDK v3 na hodnotu true
- Nastavení metody CosmosClientBuilder.endpointDiscoveryEnabled v sadě Java SDK v4 na hodnotu false.
- Nastavení parametru CosmosClient.enable_endpoint_discovery v sadě Python SDK na hodnotu false.
- Nastavení parametru CosmosClientOptions.ConnectionPolicy.enableEndpointDiscovery v sadě JS SDK na hodnotu false.
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
- Projděte si smlouvy SLA dostupnosti.
- Použití nejnovější sady .NET SDK
- Použití nejnovější sady Java SDK
- Použití nejnovější sady Python SDK
- Použití nejnovější sady Node SDK