Megosztás a következőn keresztül:


Feltöltések és letöltések teljesítményhangolása a Go használatával

Amikor egy alkalmazás az Azure Storage Go-ügyfélkódtárával továbbít adatokat, számos tényező befolyásolhatja a sebességet, a memóriahasználatot, sőt a kérés sikerességét vagy sikertelenségét is. Az adatátviteli teljesítmény és a megbízhatóság maximalizálása érdekében fontos, hogy proaktív módon konfigurálja az ügyfélkódtár-átviteli lehetőségeket az alkalmazás által futtatott környezet alapján.

Ez a cikk az adatátviteli beállítások finomhangolásának számos szempontját ismerteti. Megfelelő hangolás esetén az ügyfélkódtár hatékonyan elosztja az adatokat több kérelem között, ami jobb működést, memóriahasználatot és hálózati stabilitást eredményezhet.

Feltöltések teljesítményhangolása

Az adatátviteli beállítások megfelelő finomhangolása kulcsfontosságú a feltöltések megbízható teljesítményéhez. A tárolóátvitelek több altranszferre vannak particionálva ezen tulajdonságok értékei alapján. A maximálisan támogatott átvitel mérete művelettől és szolgáltatásverziótól függően változik, ezért a korlátok meghatározásához mindenképpen ellenőrizze a dokumentációt. A Blob Storage átviteli méretkorlátjairól további információt a Blob Storage céljainak méretezése című témakörben talál.

A feltöltések átviteli beállításainak megadása

Ha a teljes blobméret kisebb vagy egyenlő 256 MB-nál, a rendszer egyetlen Put Blob-kéréssel tölti fel az adatokat. Ha a blob mérete nagyobb, mint 256 MB, vagy ha a blob mérete ismeretlen, a blob adattömbökbe lesz feltöltve a Put Block hívások sorozatával, amelyet a Blokklista elhelyezése követ.

A következő tulajdonságok konfigurálhatók és hangolhatók az alkalmazás igényei szerint:

  • BlockSize: Az átvitel maximális hossza bájtban, ha blokkblobot tölt fel adattömbökbe. Alapértelmezés szerint 4 MB.
  • Concurrency: A párhuzamosan használható altranszferek maximális száma. Alapértelmezett érték: 5.

Ezek a konfigurációs beállítások a következő módszerekkel történő feltöltéskor érhetők el:

A feltöltési módszer nem támogatja ezeket a beállításokat, és egyetlen kérelemben tölti fel az adatokat.

Feljegyzés

Ha nincs megadva, az ügyfélkódtárak az alapértelmezett értékeket használják az egyes adatátviteli lehetőségekhez. Ezek az alapértelmezett értékek általában az adatközponti környezetekben teljesítenek, de valószínűleg nem alkalmasak otthoni fogyasztói környezetekhez. A rosszul hangolt adatátviteli lehetőségek túlzottan hosszú műveleteket és akár időtúllépéseket is eredményezhetnek. A legjobb, ha proaktívan teszteli ezeket az értékeket, és az alkalmazás és a környezet igényeinek megfelelően finomhangolja őket.

Blokkméret

Az BlockSize argumentum az átvitel maximális hossza bájtban, amikor blokkblobot tölt fel adattömbökbe.

Az adatok hatékony mozgásának fenntartása érdekében előfordulhat, hogy az ügyfélkódtárak nem mindig érik el az BlockSize összes átvitel értékét. A művelettől függően az átviteli méret maximális támogatott értéke eltérő lehet. A Blob Storage átviteli méretkorlátairól további információt a Blob Storage méretezési céljainak diagramjában talál.

Mintakód

Az alábbi példakód bemutatja, hogyan definiálhat értékeket egy UploadFileOptions-példányhoz, és hogyan adhatja át ezeket a konfigurációs beállításokat paraméterként az UploadFile-nak.

Az ebben a mintában megadott értékek nem javaslatok. Ezeknek az értékeknek a megfelelő finomhangolásához figyelembe kell vennie az alkalmazás adott igényeit.

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)
}

Ebben a példában a párhuzamos átviteli feldolgozók számát 2-es értékre állítjuk a Concurrency mező használatával. Ez a konfiguráció egyszerre legfeljebb két kapcsolatot nyit meg, így a feltöltés párhuzamosan történik. Ha a blob mérete nagyobb, mint 256 MB, a blob legfeljebb 8 MiB méretű adattömbökbe tölthető fel a Block_Size mező által megadott módon.

A feltöltések teljesítményével kapcsolatos szempontok

A feltöltés során a Storage-ügyfélkódtárak egy adott feltöltési adatfolyamot több részadatra osztanak fel az ügyfélépítés során meghatározott konfigurációs beállítások alapján. Minden alterhelés saját dedikált hívással rendelkezik a REST-művelethez. A Storage-ügyfélkódtár párhuzamosan kezeli ezeket a REST-műveleteket (az átviteli lehetőségektől függően) a teljes feltöltés befejezéséhez.

A következő szakaszokban megtudhatja, hogyan kezeli az ügyfélkódtár a pufferelést.

Feljegyzés

A blokkblobok maximális blokkszáma 50 000 blokk. A blokkblob maximális mérete tehát 50 000-szerese Block_Size.

Pufferelés feltöltések során

A Storage REST-réteg nem támogatja a REST feltöltési művelet felvételét ott, ahol abbahagyta; az egyes átvitelek befejeződnek vagy elvesznek. A streamfeltöltések rugalmasságának biztosítása érdekében a Storage-ügyfélkódtárak pufferelik az egyes REST-hívások adatait a feltöltés megkezdése előtt. A hálózati sebesség korlátozásai mellett ez a pufferelési viselkedés is okot ad arra, hogy kisebb értéket BlockSizevegyenek figyelembe, még akkor is, ha egymás után töltik fel. Az érték BlockSize csökkentése csökkenti az egyes kéréseken pufferelt adatok maximális mennyiségét, és a sikertelen kérések minden újrapróbálkozását. Ha egy bizonyos méretű adatátvitel során gyakori időtúllépéseket tapasztal, a BlockSize pufferelési idő csökkentésével jobb teljesítményt eredményezhet.

Letöltések teljesítményhangolása

Az adatátviteli lehetőségek megfelelő finomhangolása kulcsfontosságú a letöltések megbízható teljesítményéhez. A tárolóátvitelek több altranszferre vannak particionálva ezen tulajdonságok értékei alapján.

Letöltések átviteli beállításainak megadása

Az alkalmazás igényei szerint az alábbi tulajdonságok hangolhatók:

  • BlockSize: A blob letöltéséhez használt maximális adattömbméret. Alapértelmezés szerint 4 MB.
  • Concurrency: A párhuzamosan használható altranszferek maximális száma. Alapértelmezett érték: 5.

Ezek a lehetőségek a következő módszerek használatával történő letöltéskor érhetők el:

A DownloadStream metódus nem támogatja ezeket a beállításokat, és egyetlen kérelemben tölti le az adatokat.

Mintakód

Az alábbi példakód bemutatja, hogyan definiálhat értékeket egy DownloadFileOptions-példányhoz, és hogyan adhatja át ezeket a konfigurációs beállításokat paraméterként a DownloadFile-nak.

Az ebben a mintában megadott értékek nem javaslatok. Ezeknek az értékeknek a megfelelő finomhangolásához figyelembe kell vennie az alkalmazás adott igényeit.

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)
}

A letöltések teljesítményével kapcsolatos szempontok

A letöltés során a Storage-ügyfélkódtárak egy adott letöltési kérelmet több alletöltésre osztottak fel az ügyfélépítés során meghatározott konfigurációs beállítások alapján. Minden alletöltés saját dedikált hívással rendelkezik a REST-művelethez. Az átviteli lehetőségektől függően az ügyfélkódtárak párhuzamosan kezelik ezeket a REST-műveleteket a teljes letöltés befejezéséhez.