Honderden terabytes aan gegevens migreren naar Azure Cosmos DB

VAN TOEPASSING OP: Nosql MongoDB Cassandra Gremlin Tabel

Azure Cosmos DB kan terabytes aan gegevens opslaan. U kunt een grootschalige gegevensmigratie uitvoeren om de werkbelasting van uw productie naar Azure Cosmos DB te verplaatsen. In dit artikel worden de uitdagingen beschreven van het verplaatsen van grootschalige gegevens naar Azure Cosmos DB en wordt u voorgesteld aan het hulpprogramma dat u helpt bij deze uitdagingen en dat gegevens naar Azure Cosmos DB migreert. In deze casestudy heeft de klant de Azure Cosmos DB-API voor NoSQL gebruikt.

Voordat u de volledige workload naar Azure Cosmos DB migreert, kunt u een subset met gegevens migreren om enkele aspecten te valideren, zoals de keuze van de partitiesleutel, queryprestaties en gegevensmodellering. Nadat u het bewijs van het concept hebt gevalideerd, kunt u de hele workload verplaatsen naar Azure Cosmos DB.

Hulpprogramma's voor gegevensmigratie

Azure Cosmos DB-migratiestrategieën verschillen momenteel op basis van de API-keuze en de grootte van de gegevens. Als u kleinere gegevenssets wilt migreren voor het valideren van gegevensmodellering, queryprestaties, keuze van partitiesleutels, enzovoort, kunt u de Azure Cosmos DB-connector van Azure Data Factory gebruiken. Als u bekend bent met Spark, kunt u er ook voor kiezen om de Azure Cosmos DB Spark-connector te gebruiken om gegevens te migreren.

Uitdagingen voor grootschalige migraties

De bestaande hulpprogramma's voor het migreren van gegevens naar Azure Cosmos DB hebben enkele beperkingen die vooral op grote schaal zichtbaar worden:

  • Beperkte uitschaalmogelijkheden: als u terabytes aan gegevens zo snel mogelijk naar Azure Cosmos DB wilt migreren en de volledige ingerichte doorvoer effectief wilt gebruiken, moeten de migratieclients de mogelijkheid hebben om voor onbepaalde tijd uit te schalen.

  • Gebrek aan voortgangstracering en controlepunten: het is belangrijk om de voortgang van de migratie bij te houden en controlepunten te hebben tijdens het migreren van grote gegevenssets. Anders stopt elke fout die optreedt tijdens de migratie de migratie en moet u het proces helemaal opnieuw starten. Het zou niet productief zijn om het hele migratieproces opnieuw te starten wanneer 99% ervan al is voltooid.

  • Gebrek aan wachtrij voor onbestelbare berichten: in grote gegevenssets kunnen er in sommige gevallen problemen zijn met delen van de brongegevens. Daarnaast kunnen er tijdelijke problemen zijn met de client of het netwerk. Een van deze gevallen mag er niet toe leiden dat de hele migratie mislukt. Hoewel de meeste migratiehulpprogramma's robuuste mogelijkheden voor opnieuw proberen hebben die bescherming bieden tegen onregelmatige problemen, is dit niet altijd voldoende. Als bijvoorbeeld minder dan 0,01% van de brongegevensdocumenten groter zijn dan 2 MB, mislukt het schrijven van het document in Azure Cosmos DB. Idealiter is het handig voor het migratieprogramma om deze 'mislukte' documenten vast te stellen in een andere wachtrij met onbestelbare berichten, die na de migratie kan worden verwerkt.

Veel van deze beperkingen worden opgelost voor hulpprogramma's zoals Azure Data Factory en Azure Data Migration-services.

Aangepast hulpprogramma met bulkexecutorbibliotheek

De uitdagingen die in de bovenstaande sectie worden beschreven, kunnen worden opgelost met behulp van een aangepast hulpprogramma dat eenvoudig kan worden uitgeschaald over meerdere exemplaren en dat bestand is tegen tijdelijke fouten. Daarnaast kan het aangepaste hulpprogramma de migratie op verschillende controlepunten onderbreken en hervatten. Azure Cosmos DB biedt al de bulkexecutorbibliotheek die een aantal van deze functies bevat. De bulkexecutorbibliotheek heeft bijvoorbeeld al de functionaliteit voor het afhandelen van tijdelijke fouten en kan threads in één knooppunt uitschalen om ongeveer 500 K RU's per knooppunt te verbruiken. De bulkexecutorbibliotheek partitioneert de brongegevensset ook in microbatches die onafhankelijk worden uitgevoerd als een vorm van controlepunten.

Het aangepaste hulpprogramma maakt gebruik van de bulkexecutorbibliotheek en ondersteunt het uitschalen van meerdere clients en het bijhouden van fouten tijdens het opnameproces. Als u dit hulpprogramma wilt gebruiken, moeten de brongegevens worden gepartitioneerd in afzonderlijke bestanden in Azure Data Lake Storage (ADLS), zodat verschillende migratiemedewerkers elk bestand kunnen ophalen en opnemen in Azure Cosmos DB. Het aangepaste hulpprogramma maakt gebruik van een afzonderlijke verzameling, die metagegevens over de voortgang van de migratie voor elk afzonderlijk bronbestand in ADLS opslaat en eventuele fouten bijhoudt die eraan zijn gekoppeld.

In de volgende afbeelding wordt het migratieproces met dit aangepaste hulpprogramma beschreven. Het hulpprogramma wordt uitgevoerd op een set virtuele machines en elke virtuele machine voert een query uit op de traceringsverzameling in Azure Cosmos DB om een lease te verkrijgen voor een van de brongegevenspartities. Zodra dit is gedaan, wordt de brongegevenspartitie gelezen door het hulpprogramma en opgenomen in Azure Cosmos DB met behulp van de bulkexecutorbibliotheek. Vervolgens wordt de traceringsverzameling bijgewerkt om de voortgang van gegevensopname en eventuele aangetroffen fouten vast te leggen. Nadat een gegevenspartitie is verwerkt, probeert het hulpprogramma een query uit te voeren naar de volgende beschikbare bronpartitie. De volgende bronpartitie wordt verwerkt totdat alle gegevens zijn gemigreerd. De broncode voor het hulpprogramma is beschikbaar in de azure Cosmos DB-opslagplaats voor bulkopname .

Migratieprogramma instellen

De traceringsverzameling bevat documenten zoals weergegeven in het volgende voorbeeld. U ziet dergelijke documenten één voor elke partitie in de brongegevens. Elk document bevat de metagegevens voor de brongegevenspartitie, zoals de locatie, migratiestatus en fouten (indien aanwezig):

{ 
  "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 
} 

Vereisten voor gegevensmigratie

Voordat de gegevensmigratie wordt gestart, moet u rekening houden met een aantal vereisten:

Maak een schatting van de gegevensgrootte:

De grootte van de brongegevens is mogelijk niet precies toegewezen aan de gegevensgrootte in Azure Cosmos DB. Enkele voorbeelddocumenten uit de bron kunnen worden ingevoegd om de gegevensgrootte in Azure Cosmos DB te controleren. Afhankelijk van de grootte van het voorbeelddocument kan de totale gegevensgrootte in Azure Cosmos DB na de migratie worden geschat.

Als elk document na de migratie in Azure Cosmos DB bijvoorbeeld ongeveer 1 kB is en de brongegevensset ongeveer 60 miljard documenten bevat, betekent dit dat de geschatte grootte in Azure Cosmos DB bijna 60 TB is.

Maak vooraf containers met voldoende RU's:

Hoewel Azure Cosmos DB opslag automatisch uitschaalt, is het niet raadzaam om vanaf de kleinste containergrootte te beginnen. Kleinere containers hebben een lagere doorvoer, wat betekent dat de migratie veel langer zou duren. In plaats daarvan is het handig om de containers te maken met de uiteindelijke gegevensgrootte (zoals geschat in de vorige stap) en ervoor te zorgen dat de migratieworkload de ingerichte doorvoer volledig verbruikt.

In de vorige stap. omdat de gegevensgrootte ongeveer 60 TB is, is een container van ten minste 2,4 M RU's vereist voor de volledige gegevensset.

De migratiesnelheid schatten:

Ervan uitgaande dat de migratieworkload de volledige ingerichte doorvoer kan verbruiken, geeft de ingerichte doorvoer een schatting van de migratiesnelheid. In het vorige voorbeeld zijn 5 RU's vereist voor het schrijven van een document van 1 kB naar een Azure Cosmos DB API voor NoSQL-account. 2,4 miljoen RU's maken een overdracht van 480.000 documenten per seconde (of 480 MB/s) mogelijk. Dit betekent dat de volledige migratie van 60 TB 125.000 seconden of ongeveer 34 uur duurt.

Als u wilt dat de migratie binnen een dag is voltooid, moet u de ingerichte doorvoer verhogen tot 5 miljoen RU's.

Schakel de indexering uit:

Aangezien de migratie zo snel mogelijk moet worden voltooid, is het raadzaam om tijd en RU's te minimaliseren die worden besteed aan het maken van indexen voor elk van de opgenomen documenten. Azure Cosmos DB indexeert automatisch alle eigenschappen. Het is de moeite waard om het indexeren naar een aantal geselecteerde termen te minimaliseren of deze volledig uit te schakelen voor de loop van de migratie. U kunt het indexeringsbeleid van de container uitschakelen door indexingMode te wijzigen in none (zie hieronder):

  { 
        "indexingMode": "none" 
  } 

Nadat de migratie is voltooid, kunt u de indexering bijwerken.

Migratieproces

Nadat aan de vereisten is voldaan, kunt u gegevens migreren met de volgende stappen:

  1. Importeer eerst de gegevens van de bron naar Azure Blob Storage. Als u de migratiesnelheid wilt verhogen, is het handig om te parallelliseren tussen verschillende bronpartities. Voordat u de migratie start, moet de brongegevensset worden gepartitioneerd in bestanden met een grootte van ongeveer 200 MB.

  2. De bulkexecutorbibliotheek kan omhoog worden geschaald om 500.000 RU's te verbruiken in één client-VM. Aangezien de beschikbare doorvoer 5 miljoen RU's is, moeten 10 Ubuntu 16.04-VM's (Standard_D32_v3) worden ingericht in dezelfde regio waar uw Azure Cosmos DB-database zich bevindt. U moet deze VM's voorbereiden met het migratieprogramma en het bijbehorende instellingenbestand.

  3. Voer de wachtrijstap uit op een van de virtuele clientmachines. Met deze stap maakt u de traceringsverzameling, waarmee de ADLS-container wordt gescand en een document voor het bijhouden van de voortgang wordt gemaakt voor elk van de partitiebestanden van de brongegevensset.

  4. Voer vervolgens de importstap uit op alle client-VM's. Elk van de clients kan eigenaar worden van een bronpartitie en de bijbehorende gegevens opnemen in Azure Cosmos DB. Zodra deze is voltooid en de status ervan is bijgewerkt in de traceringsverzameling, kunnen de clients een query uitvoeren op de volgende beschikbare bronpartitie in de traceringsverzameling.

  5. Dit proces gaat door totdat de volledige set bronpartities is opgenomen. Zodra alle bronpartities zijn verwerkt, moet het hulpprogramma opnieuw worden uitgevoerd in de foutcorrectiemodus op dezelfde traceringsverzameling. Deze stap is vereist om de bronpartities te identificeren die opnieuw moeten worden verwerkt vanwege fouten.

  6. Sommige van deze fouten kunnen worden veroorzaakt door onjuiste documenten in de brongegevens. Deze moeten worden geïdentificeerd en opgelost. Vervolgens moet u de importstap opnieuw uitvoeren op de mislukte partities om ze opnieuw op te nemen.

Zodra de migratie is voltooid, kunt u controleren of het aantal documenten in Azure Cosmos DB hetzelfde is als het aantal documenten in de brondatabase. In dit voorbeeld is de totale grootte in Azure Cosmos DB 65 terabytes. Na de migratie kan indexering selectief worden ingeschakeld en kunnen de RU's worden verlaagd tot het niveau dat is vereist voor de bewerkingen van de workload.

Volgende stappen

  • Meer informatie door de voorbeeldtoepassingen uit te proberen die gebruikmaken van de bulkexecutorbibliotheek in .NET en Java.
  • De bulkexecutor-bibliotheek is geïntegreerd in de Azure Cosmos DB Spark-connector. Zie het artikel Azure Cosmos DB Spark-connector voor meer informatie.
  • Neem contact op met het azure Cosmos DB-productteam door een ondersteuningsticket te openen onder het probleemtype Algemeen advies en het probleemsubtype Grote (TB+) migraties voor aanvullende hulp bij grootschalige migraties.
  • Probeert u capaciteitsplanning uit te voeren voor een migratie naar Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.