Delen via


Prestaties afstemmen voor uploads en downloads met Go

Wanneer een toepassing gegevens overdraagt met behulp van de Azure Storage-clientbibliotheek voor Go, zijn er verschillende factoren die van invloed kunnen zijn op snelheid, geheugengebruik en zelfs het slagen of mislukken van de aanvraag. Om de prestaties en betrouwbaarheid voor gegevensoverdracht te maximaliseren, is het belangrijk om proactief te zijn bij het configureren van opties voor clientbibliotheekoverdracht op basis van de omgeving waarin uw app wordt uitgevoerd.

In dit artikel worden verschillende overwegingen beschreven voor het afstemmen van opties voor gegevensoverdracht. Wanneer de clientbibliotheek correct is afgestemd, kan de clientbibliotheek gegevens efficiënt distribueren over meerdere aanvragen, wat kan leiden tot een verbeterde werkingssnelheid, geheugengebruik en netwerkstabiliteit.

Prestaties afstemmen voor uploads

De opties voor het correct afstemmen van gegevensoverdracht zijn essentieel voor betrouwbare prestaties voor uploads. Opslagoverdrachten worden gepartitioneerd in verschillende subtransfers op basis van de waarden van deze eigenschappen. De maximale ondersteunde overdrachtsgrootte verschilt per bewerkings- en serviceversie. Controleer daarom de documentatie om de limieten te bepalen. Zie Schaaldoelen voor Blob-opslag voor meer informatie over de limieten voor de overdrachtsgrootte voor Blob Storage.

Overdrachtsopties instellen voor uploads

Als de totale blobgrootte kleiner is dan of gelijk is aan 256 MB, worden de gegevens geüpload met één Put Blob-aanvraag . Als de blob groter is dan 256 MB of als de blobgrootte onbekend is, wordt de blob geüpload in segmenten met behulp van een reeks Put Block-aanroepen gevolgd door Put Block List.

De volgende eigenschappen kunnen worden geconfigureerd en afgestemd op basis van de behoeften van uw app:

  • BlockSize: De maximale lengte van een overdracht in bytes bij het uploaden van een blok-blob in segmenten. De standaardwaarde is 4 MB.
  • Concurrency: Het maximum aantal subtransfers dat parallel kan worden gebruikt. De standaardwaarde is 5.

Deze configuratieopties zijn beschikbaar bij het uploaden met behulp van de volgende methoden:

De methode Upload biedt geen ondersteuning voor deze opties en uploadt gegevens in één aanvraag.

Notitie

De clientbibliotheken gebruiken standaardwaarden voor elke optie voor gegevensoverdracht, indien niet opgegeven. Deze standaardwaarden werken doorgaans in een datacentrumomgeving, maar zijn waarschijnlijk niet geschikt voor thuisconsumentenomgevingen. Slecht afgestemde opties voor gegevensoverdracht kunnen leiden tot overmatig lange bewerkingen en zelfs time-outs voor aanvragen. Het is het beste om proactief te zijn bij het testen van deze waarden en het afstemmen ervan op basis van de behoeften van uw toepassing en omgeving.

Blokkeren

Het BlockSize argument is de maximale lengte van een overdracht in bytes bij het uploaden van een blok-blob in segmenten.

Om gegevens efficiënt te laten bewegen, bereiken de clientbibliotheken mogelijk niet altijd de BlockSize waarde voor elke overdracht. Afhankelijk van de bewerking kan de maximale ondersteunde waarde voor de overdrachtsgrootte variëren. Zie de grafiek in Schaaldoelen voor Blob Storage voor meer informatie over de overdrachtsgroottelimieten voor Blob Storage.

Voorbeeld van code

In het volgende codevoorbeeld ziet u hoe u waarden definieert voor een UploadFileOptions-exemplaar en deze configuratieopties als parameter doorgeeft aan UploadFile.

De waarden in dit voorbeeld zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.

func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the data to a block blob with transfer options
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file,
        &azblob.UploadFileOptions{
            BlockSize:   int64(8 * 1024 * 1024), // 8 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

In dit voorbeeld stellen we het aantal parallelle overdrachtsmedewerkers in op 2, met behulp van het Concurrency veld. Met deze configuratie worden twee verbindingen tegelijk geopend, waardoor het uploaden parallel kan plaatsvinden. Als de blob groter is dan 256 MB, wordt de blob geüpload in segmenten met een maximale segmentgrootte van 8 MiB, zoals ingesteld door het Block_Size veld.

Prestatieoverwegingen voor uploads

Tijdens het uploaden splitsen de Storage-clientbibliotheken een bepaalde uploadstroom in meerdere subuploads op basis van de configuratieopties die tijdens de clientconstructie zijn gedefinieerd. Elke subupload heeft een eigen toegewezen aanroep naar de REST-bewerking. De Storage-clientbibliotheek beheert deze REST-bewerkingen parallel (afhankelijk van overdrachtsopties) om het volledige uploaden te voltooien.

In de volgende secties leert u hoe de clientbibliotheek buffering verwerkt.

Notitie

Blok-blobs hebben een maximumaantal blokken van 50.000 blokken. De maximale grootte van uw blok-blob is dan 50.000 keer Block_Size.

Bufferen tijdens uploads

De Opslag REST-laag biedt geen ondersteuning voor het ophalen van een REST-uploadbewerking waar u was gebleven; afzonderlijke overdrachten worden voltooid of verloren gegaan. Om tolerantie voor streamuploads te garanderen, bufferen de Storage-clientbibliotheken gegevens voor elke afzonderlijke REST-aanroep voordat de upload wordt gestart. Naast netwerksnelheidsbeperkingen is dit buffergedrag een reden om rekening te houden met een kleinere waarde voor BlockSize, zelfs bij het uploaden in volgorde. Als u de waarde verlaagt, BlockSize wordt de maximale hoeveelheid gegevens die wordt gebufferd voor elke aanvraag en elke nieuwe poging van een mislukte aanvraag verkleint. Als u regelmatig time-outs ondervindt tijdens gegevensoverdrachten van een bepaalde grootte, vermindert u de waarde van het verminderen van BlockSize de buffertijd en kan dit leiden tot betere prestaties.

Prestaties afstemmen voor downloads

De opties voor het correct afstemmen van gegevensoverdracht zijn essentieel voor betrouwbare prestaties voor downloads. Opslagoverdrachten worden gepartitioneerd in verschillende subtransfers op basis van de waarden van deze eigenschappen.

Overdrachtsopties instellen voor downloads

De volgende eigenschappen kunnen worden afgestemd op basis van de behoeften van uw app:

  • BlockSize: De maximale segmentgrootte die wordt gebruikt voor het downloaden van een blob. De standaardwaarde is 4 MB.
  • Concurrency: Het maximum aantal subtransfers dat parallel kan worden gebruikt. De standaardwaarde is 5.

Deze opties zijn beschikbaar bij het downloaden met behulp van de volgende methoden:

De DownloadStream-methode biedt geen ondersteuning voor deze opties en downloadt gegevens in één aanvraag.

Voorbeeld van code

In het volgende codevoorbeeld ziet u hoe u waarden definieert voor een DownloadFileOptions-exemplaar en deze configuratieopties als parameter doorgeeft aan DownloadFile.

De waarden in dit voorbeeld zijn niet bedoeld als aanbeveling. Als u deze waarden goed wilt afstemmen, moet u rekening houden met de specifieke behoeften van uw app.

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
	file, err := os.Create("path/to/sample/file")
	handleError(err)

	// Download the blob to the local file
	_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
		&azblob.DownloadFileOptions{
			BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
			Concurrency: uint16(2),
		})
	handleError(err)
}

Prestatieoverwegingen voor downloads

Tijdens een download splitsen de Storage-clientbibliotheken een bepaalde downloadaanvraag in meerdere subdownloads op basis van de configuratieopties die tijdens de clientconstructie zijn gedefinieerd. Elke subdownload heeft een eigen toegewezen aanroep naar de REST-bewerking. Afhankelijk van overdrachtsopties beheren de clientbibliotheken deze REST-bewerkingen parallel om de volledige download te voltooien.