Migrace stovek terabajtů dat do Azure Cosmos DB

PLATÍ pro: rozhraní SQL api rozhraní API CASSANDRA Gremlin API rozhraní API pro tabulky Azure Cosmos DB API pro MongoDB

Azure Cosmos DB může uchovávat terabajty dat. Můžete provést rozsáhlou migraci dat a přesunout svou produkční úlohu do služby Azure Cosmos DB. Tento článek popisuje výzvy spojené s přesunem velkých objemů dat do služby Azure Cosmos DB a představuje nástroj, který pomáhá tyto výzvy řešit a migruje data do služby Azure Cosmos DB. V této případové studii zákazník použil rozhraní SQL API služby Cosmos DB.

Před migrací celé úlohy do Azure Cosmos DB můžete migrovat podmnožinu dat a ověřit některé aspekty, jako je volba klíče oddílu, výkon dotazů a modelování dat. Po ověření ověření konceptu můžete přesunout celou úlohu do Azure Cosmos DB.

Nástroje pro migraci dat

Strategie Cosmos DB se v současné době liší v závislosti na výběru rozhraní API a velikosti dat. Pokud chcete migrovat menší datové sady – pro ověřování modelování dat, výkonu dotazů, výběru klíče oddílu atd., můžete zvolit nástroj pro migraci dat nebo Azure Data Factory konektor Azure Cosmos DB. Pokud znáte Spark, můžete k migraci dat použít také konektor Spark pro Azure Cosmos DB.

Výzvy spojené s rozsáhlou migrací

Stávající nástroje pro migraci dat do Azure Cosmos DB mají určitá omezení, která jsou obzvláště patrná ve velkém měřítku:

  • Omezené možnosti horizontálního navýšení kapacity: Aby bylo možné migrovat terabajty dat do Azure Cosmos DB co nejrychleji a efektivně využívat celou zřízenou propustnost, měli by mít klienti migrace možnost horizontálního navýšení kapacity na neomezenou dobu.

  • Nedostatek sledování průběhu a kontrolního bodu: Při migraci velkých datových sad je důležité sledovat průběh migrace a mít kontrolní bod. Jinak jakákoli chyba, ke které dojde během migrace, migraci zastaví a budete muset spustit proces od začátku. Po dokončení 99 % procesu migrace by nebylo produktivní celý proces migrace restartovat.

  • Nedostatek fronty nedoručených zpráv: V rámci velkých datových sad může v některých případech do určitého počtu problémů do určité části zdrojových dat dochádnět problémy. Kromě toho můžou být přechodné problémy s klientem nebo sítí. Některý z těchto případů by neměl způsobit selhání celé migrace. I když má většina nástrojů pro migraci robustní možnosti opakování, které chrání před přerušovaným problémy, není to vždy dostačující. Pokud je například méně než 0,01 % zdrojových datových dokumentů větší než 2 MB, způsobí to selhání zápisu dokumentu v Azure Cosmos DB. V ideálním případě je užitečné, aby nástroj pro migraci tyto "neúspěšné" dokumenty uchoval do jiné fronty nedoručených zpráv, kterou je možné zpracovat po migraci.

Mnohé z těchto omezení se opravují pro nástroje, jako je Azure Data Factory nebo Azure Data Migration Services.

Vlastní nástroj s knihovnou Bulk Executor

Problémy popsané v výše uvedené části je možné vyřešit pomocí vlastního nástroje, který lze snadno škálovat na více instancí a je odolný vůči přechodným selháním. Kromě toho může vlastní nástroj pozastavit a obnovit migraci na různých kontrolních bodech. Azure Cosmos DB již poskytuje knihovnu Bulk Executor, která zahrnuje některé z těchto funkcí. Například knihovna Bulk Executor už má funkce pro zpracování přechodných chyb a může škálovat vlákna v jednom uzlu na více než 500 kU na uzel. Knihovna Bulk Executor také rozděluje zdrojovou datovou sadu do mikrodávek, které se provozují nezávisle jako forma vytváření kontrolních bodů.

Vlastní nástroj používá knihovnu Bulk Executor a podporuje horizontální navýšení kapacity napříč více klienty a sledování chyb během procesu příjmu dat. Pokud chcete použít tento nástroj, zdrojová data by měla být rozdělená do samostatných souborů v Azure Data Lake Storage (ADLS), aby různé pracovní procesy migrace mohli každý soubor vzít a ingestovat je do Azure Cosmos DB. Vlastní nástroj využívá samostatnou kolekci, která ukládá metadata o průběhu migrace pro každý jednotlivý zdrojový soubor v ADLS a sleduje všechny chyby, které jsou k nim přidružené.

Následující obrázek popisuje proces migrace pomocí tohoto vlastního nástroje. Nástroj běží na sadě virtuálních počítačů a každý virtuální počítač se dotazuje kolekce sledování v Azure Cosmos DB, aby získal zapůjčení jednoho ze zdrojových datových oddílů. Až to bude hotové, nástroj načte zdrojový oddíl dat a ingestuje ho do Azure Cosmos DB pomocí knihovny Bulk Executor. Dále se kolekce sledování aktualizuje tak, aby zaznamenávala průběh příjmu dat a případné chyby, ke kterým došlo. Po zpracování datového oddílu se nástroj pokusí zadat dotaz na další dostupný zdrojový oddíl. Dokud se migrují všechna data, bude i nadále zpracovávat další zdrojový oddíl. Zdrojový kód tohoto nástroje je k dispozici v azure Cosmos DB pro hromadný příjem dat.

Nastavení nástroje pro migraci

Kolekce sledování obsahuje dokumenty, jak je znázorněno v následujícím příkladu. Tyto dokumenty uvidíte pro každý oddíl ve zdrojových datech jeden. Každý dokument obsahuje metadata pro zdrojový oddíl dat, jako je jeho umístění, stav migrace a chyby (pokud jsou k dispozici):

{ 
  "owner": "25812@bulkimporttest07", 
  "jsonStoreEntityImportResponse": { 
    "numberOfDocumentsReceived": 446688, 
    "isError": false, 
    "totalRequestUnitsConsumed": 3950252.2800000003, 
    "errorInfo": [], 
    "totalTimeTakenInSeconds": 188, 
    "numberOfDocumentsImported": 446688 
  }, 
  "storeType": "AZURE_BLOB", 
  "name": "sourceDataPartition", 
  "location": "sourceDataPartitionLocation", 
  "id": "sourceDataPartitionId", 
  "isInProgress": false, 
  "operation": "unpartitioned-writes", 
  "createDate": { 
    "seconds": 1561667225, 
    "nanos": 146000000 
  }, 
  "completeDate": { 
    "seconds": 1561667515, 
    "nanos": 180000000 
  }, 
  "isComplete": true 
} 

Požadavky na migraci dat

Před zahájením migrace dat je třeba zvážit několik požadavků:

Odhad velikosti dat:

Velikost zdrojových dat se nemusí přesně namapovat na velikost dat v Azure Cosmos DB. Můžete vložit několik ukázkových dokumentů ze zdroje a zkontrolovat jejich velikost dat v Azure Cosmos DB. V závislosti na velikosti ukázkového dokumentu je možné odhadnout celkovou velikost dat v Azure Cosmos DB po migraci.

Pokud je například každý dokument po migraci ve službě Azure Cosmos DB přibližně 1 kB a ve zdrojové datové sadě je přibližně 60 miliard dokumentů, znamená by to, že odhadovaná velikost v Azure Cosmos DB by se blížnila 60 TB.

Předem vytvořte kontejnery s dostatečným RU:

I když Azure Cosmos DB škáluje úložiště automaticky, nedoporučuje se začít od nejmenší velikosti kontejneru. Menší kontejnery mají nižší dostupnost propustnosti, což znamená, že dokončení migrace bude trvat mnohem déle. Místo toho je užitečné vytvořit kontejnery s konečnou velikostí dat (jak jsme odhadli v předchozím kroku) a zajistit, aby úloha migrace plně spotřebovává zřízenou propustnost.

V předchozím kroku. vzhledem k tomu, že se odhadla velikost dat přibližně 60 TB, je pro celou datovou sadu potřeba kontejner s alespoň 2,4 M JEDNOTKAmi.

Odhad rychlosti migrace:

Za předpokladu, že úloha migrace může využívat celou zřízenou propustnost, by zřízená propustnost poskytovala odhad rychlosti migrace. V předchozím příkladu se k zápisu 1kB dokumentu do účtu rozhraní API služby Azure Cosmos DB vyžaduje 5 SQL. 2,4 milionu REZERVOVANÝCH Ů umožňuje přenos 480 000 dokumentů za sekundu (nebo 480 MB/s). To znamená, že úplná migrace 60 TB bude trvat 125 000 sekund nebo přibližně 34 hodin.

Pokud chcete migraci dokončit během jednoho dne, měli byste zřízenou propustnost zvýšit na 5 milionů REZERVOVANÝCH Ů.

Vypněte indexování:

Vzhledem k tomu, že migrace by se měla dokončit co nejdříve, doporučujeme minimalizovat čas a počet REZERVOVANÝCH strávených vytvářením indexů pro každý z ingestovaných dokumentů. Azure Cosmos DB automaticky indexuje všechny vlastnosti, je vhodné minimalizovat indexování na několik vybraných termínů nebo ho během migrace úplně vypnout. Zásady indexování kontejneru můžete vypnout tak, že změníte indexingMode na žádný, jak je znázorněno níže:

  { 
        "indexingMode": "none" 
  } 

Po dokončení migrace můžete indexování aktualizovat.

Proces migrace

Po dokončení požadavků můžete migrovat data pomocí následujících kroků:

  1. Nejprve importujte data ze zdroje do azure blob Storage. Pokud chcete zvýšit rychlost migrace, je užitečné paralelizovat napříč různými zdrojovými oddíly. Před zahájením migrace by zdrojová datová sada měla být rozdělená do souborů o velikosti kolem 200 MB.

  2. Knihovna Bulk Executor může na jednom klientském virtuálním počítači škálovat nahoru a spotřebovat 500 000 RU. Vzhledem k tomu, že dostupná propustnost je 5 milionů REZERVOVANÝch, 10 virtuálních počítače s Ubuntu 16.04 (Standard_D32_v3) by se měly zřídit ve stejné oblasti, ve které se nachází vaše databáze Azure Cosmos. Tyto virtuální počítače byste měli připravit pomocí nástroje pro migraci a souboru jeho nastavení.

  3. Na jednom z klientských virtuálních počítačů spusťte krok fronty. Tento krok vytvoří kolekci sledování, která prohledává kontejner ADLS a vytvoří dokument pro sledování průběhu pro každý ze souborů oddílu zdrojové sady dat.

  4. Potom na všech klientských virtuálních počítačů spusťte krok importu. Každý z klientů může převzít vlastnictví zdrojového oddílu a ingestovat data do Azure Cosmos DB. Po dokončení a aktualizaci stavu v kolekci sledování se klienti mohou dotazovat na další dostupný zdrojový oddíl v kolekci sledování.

  5. Tento proces pokračuje, dokud se neingestuje celá sada zdrojových oddílů. Po zpracování všech zdrojových oddílů by se měl nástroj znovu spustit v režimu opravy chyb ve stejné kolekci sledování. Tento krok je nutný k identifikaci zdrojových oddílů, které by se měly kvůli chybám znovu zpracovat.

  6. Některé z těchto chyb mohou být způsobené nesprávnými dokumenty ve zdrojových datech. Ty by měly být identifikovány a opraveny. Dále byste měli znovu spustit krok importu na neúspěšných oddílech a znovu je ingestovat.

Po dokončení migrace můžete ověřit, že počet dokumentů ve službě Azure Cosmos DB je stejný jako počet dokumentů ve zdrojové databázi. V tomto příkladu se celková velikost v Azure Cosmos DB změnila na 65 terabajtů. Po migraci je možné indexování selektivně zapnout a snížit náklady na úroveň požadovanou operacemi úlohy.

Další kroky

  • Další informace získáte tak, že si prohlédněte ukázkové aplikace využívající knihovnu Bulk Executor v .NET a Javě.
  • Knihovna Bulk Executor je integrovaná do konektoru Spark Cosmos DB. Další informace najdete v článku Konektor Spark pro Azure Cosmos DB.
  • Pokud chcete další pomoc s migracemi ve velkém měřítku, obraťte se na produktový tým Azure Cosmos DB tak, že otevřete lístek podpory v rámci typu problému Obecné rady a podtypu problému Velké migrace (TB+).