Migrace stovek terabajtů dat do Azure Cosmos DB

PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka

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í API služby Azure Cosmos DB pro NoSQL.

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

Nástroje pro migraci dat

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

Výzvy při rozsáhlých migracích

Stávající nástroje pro migraci dat do služby Azure Cosmos DB mají určitá omezení, která jsou patrná zejména ve velkém měřítku:

  • Omezené možnosti škálování na více instancí: Aby bylo možné migrovat terabajty dat do služby Azure Cosmos DB co nejrychleji a efektivně využívat celou zřízenou propustnost, měli by mít klienti migrace možnost škálovat na neomezenou dobu.

  • Nedostatek sledování průběhu a kontrolních bodů: Při migraci velkých datových sad je důležité sledovat průběh migrace a mít kontrolní body. Jinak všechny chyby, ke kterým dojde během migrace, migraci zastaví a vy budete muset spustit proces úplně od začátku. Nebylo by produktivní restartovat celý proces migrace, když už se dokončilo 99 % migrace.

  • Nedostatek fronty nedoručených zpráv: V rámci velkých datových sad může v některých případech docházet k problémům s částmi zdrojových dat. Kromě toho může docházet k přechodným problémům s klientem nebo sítí. Ani jeden 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 občasnými problémy, není to vždy dostatečné. Pokud je například velikost menší než 0,01 % dokumentů se zdrojovými daty větší než 2 MB, způsobí to selhání zápisu dokumentu ve službě Azure Cosmos DB. V ideálním případě je vhodné, aby nástroj pro migraci tyto dokumenty, které selhaly, uchová do jiné fronty nedoručených zpráv, které je možné zpracovat po migraci.

Řada z těchto omezení se opravuje pro nástroje, jako jsou Azure Data Factory nebo Azure Data Migration Services.

Vlastní nástroj s knihovnou Bulk Executor

Problémy popsané v předchozí části je možné vyřešit pomocí vlastního nástroje, který lze snadno škálovat na více instancí a který 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á některé z těchto funkcí zahrnuje. Například knihovna Bulk Executor už má funkci pro zpracování přechodných chyb a může škálovat vlákna v jednom uzlu tak, aby spotřebovala přibližně 500 K RU na uzel. Knihovna Bulk Executor také rozdělí 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říč několika klienty a ke sledování chyb během procesu příjmu dat. Aby bylo možné tento nástroj použít, zdrojová data by měla být rozdělena do odlišných souborů v Azure Data Lake Storage (ADLS), aby různí pracovníci migrace mohli každý soubor přijmout a ingestovat je do služby Azure Cosmos DB. Vlastní nástroj používá samostatnou kolekci, která ukládá metadata o průběhu migrace pro každý jednotlivý zdrojový soubor v ADLS a sleduje případné chyby s nimi spojené.

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í ve službě Azure Cosmos DB, aby získal zapůjčení jednoho ze zdrojových datových oddílů. Jakmile to uděláte, nástroj načte zdrojový datový oddíl a ingestuje ho do služby Azure Cosmos DB pomocí knihovny Bulk Executor. Dále se aktualizuje kolekce sledování, aby zaznamenávala průběh příjmu dat a případné chyby. Po zpracování datového oddílu se nástroj pokusí dotázat se na další dostupný zdrojový oddíl. Pokračuje ve zpracování dalšího zdrojového oddílu, dokud se migrují všechna data. Zdrojový kód nástroje je k dispozici v úložišti pro hromadný příjem dat ve službě Azure Cosmos DB .

Nastavení nástroje pro migraci

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

{ 
  "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 potřeba zvážit několik předpokladů:

Odhad velikosti dat:

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

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

Předem vytvořte kontejnery s dostatkem RU:

I když Azure Cosmos DB škáluje úložiště na více instancí automaticky, nedoporučujeme začínat od nejmenší velikosti kontejneru. Menší kontejnery mají nižší dostupnost propustnosti, což znamená, že dokončení migrace by trvalo mnohem déle. Místo toho je vhodné vytvořit kontejnery s konečnou velikostí dat (podle odhadu v předchozím kroku) a zajistit, aby úloha migrace plně spotřebováovala zřízenou propustnost.

V předchozím kroku. Vzhledem k tomu, že velikost dat byla odhadnuta na přibližně 60 TB, vyžaduje se k uložení celé datové sady kontejner o velikosti alespoň 2,4 m RU.

Odhad rychlosti migrace:

Za předpokladu, že úloha migrace může využívat celou zřízenou propustnost, poskytne zřízený v celém rozsahu odhad rychlosti migrace. Když budeme pokračovat v předchozím příkladu, k zápisu dokumentu o 1 kB do účtu rozhraní API služby Azure Cosmos DB pro NoSQL se vyžaduje 5 RU. 2,4 milionu RU umožňuje přenos 480 000 dokumentů za sekundu (neboli 480 MB/s). To znamená, že úplná migrace 60 TB bude trvat 125 000 sekund, tedy asi 34 hodin.

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

Vypněte indexování:

Vzhledem k tomu, že migrace by měla být dokončena co nejdříve, je vhodné minimalizovat čas a počet RU strávených vytvářením indexů pro každý přijatý dokument. Azure Cosmos DB automaticky indexuje všechny vlastnosti, je vhodné indexování minimalizovat na několik vybraných termínů nebo ho v průběhu 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 vhodné paralelizovat různé zdrojové oddíly. Před zahájením migrace by měla být zdrojová sada dat rozdělená do souborů o velikosti přibližně 200 MB.

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

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

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

  5. Tento proces pokračuje, dokud se ingestuje 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 můžou být způsobené nesprávnými dokumenty ve zdrojových datech. Tyto chyby 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, abyste je znovu ingestovali.

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

Další kroky