Ladění výkonu pro nahrávání a stahování pomocí Go
Když aplikace přenáší data pomocí klientské knihovny služby Azure Storage pro Go, může to mít vliv na rychlost, využití paměti a dokonce i na úspěch nebo selhání požadavku. Pokud chcete maximalizovat výkon a spolehlivost přenosů dat, je důležité být proaktivní při konfiguraci možností přenosu klientské knihovny na základě prostředí, ve kterém vaše aplikace běží.
Tento článek vás provede několika aspekty ladění možností přenosu dat. Při správném ladění může klientská knihovna efektivně distribuovat data mezi více požadavků, což může vést ke zlepšení rychlosti provozu, využití paměti a stability sítě.
Ladění výkonu pro nahrávání
Správné ladění možností přenosu dat je klíčem ke spolehlivému výkonu nahrávání. Přenosy úložiště jsou rozdělené na několik dílčích přenosů na základě hodnot těchto vlastností. Maximální podporovaná velikost přenosu se liší podle provozu a verze služby, proto nezapomeňte zkontrolovat dokumentaci a určit limity. Další informace o omezení velikosti přenosu úložiště objektů blob najdete v tématu Cíle škálování pro úložiště objektů blob.
Nastavení možností přenosu pro nahrávání
Pokud je celková velikost objektu blob menší nebo rovna 256 MB, data se nahrají pomocí jednoho požadavku put blob . Pokud je velikost objektu blob větší než 256 MB nebo pokud je velikost objektu blob neznámá, objekt blob se nahraje do bloků pomocí řady volání put block následovaných seznamem blokovaných objektů.
Následující vlastnosti je možné nakonfigurovat a ladit na základě potřeb vaší aplikace:
BlockSize
: Maximální délka přenosu v bajtech při nahrávání objektu blob bloku do bloků dat. Výchozí hodnota je 4 MB.Concurrency
: Maximální počet dílčích přenosů, které lze použít paralelně. Výchozí hodnota je 5.
Tyto možnosti konfigurace jsou k dispozici při nahrávání pomocí následujících metod:
Metoda Upload tyto možnosti nepodporuje a nahraje data do jednoho požadavku.
Poznámka:
Klientské knihovny používají výchozí hodnoty pro každou možnost přenosu dat, pokud není k dispozici. Tato výchozí nastavení jsou obvykle výkonná v prostředí datacentra, ale pravděpodobně nebudou vhodná pro domácí spotřebitelská prostředí. Špatně vyladěné možnosti přenosu dat můžou vést k příliš dlouhým operacím a dokonce i vypršení časového limitu požadavků. Je nejlepší být proaktivní při testování těchto hodnot a jejich ladění na základě potřeb vaší aplikace a prostředí.
BlockSize
Argument BlockSize
je maximální délka přenosu v bajtech při nahrávání objektu blob bloku do bloků dat.
Kvůli efektivnímu přesouvání dat nemusí klientské knihovny vždy dosáhnout BlockSize
hodnoty pro každý přenos. V závislosti na operaci se maximální podporovaná hodnota velikosti přenosu může lišit. Další informace o omezení velikosti přenosu úložiště objektů blob najdete v grafu cílů škálování pro úložiště objektů blob.
Příklad kódu
Následující příklad kódu ukazuje, jak definovat hodnoty pro UploadFileOptions instance a předat tyto možnosti konfigurace jako parametr UploadFile.
Hodnoty uvedené v této ukázce nejsou určené jako doporučení. Pokud chcete tyto hodnoty správně vyladit, musíte zvážit konkrétní potřeby vaší aplikace.
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)
}
V tomto příkladu jsme pomocí pole nastavili počet pracovníků paralelního přenosu na hodnotu 2 Concurrency
. Tato konfigurace se současně otevře až dvě připojení, což umožňuje paralelní nahrávání. Pokud je velikost objektu blob větší než 256 MB, objekt blob se nahraje do bloků dat s maximální velikostí 8 MiB podle Block_Size
pole.
Důležité informace o výkonu pro nahrávání
Klientské knihovny služby Storage během nahrávání rozdělí daný datový proud nahrávání do několika dílčích částí na základě možností konfigurace definovaných během sestavování klienta. Každá dílčí část má vlastní vyhrazené volání operace REST. Klientská knihovna služby Storage spravuje tyto operace REST paralelně (v závislosti na možnostech přenosu) a dokončí úplné nahrávání.
V následujících částech se dozvíte, jak klientská knihovna zpracovává ukládání do vyrovnávací paměti.
Poznámka:
Objekty blob bloku mají maximální počet bloků 50 000 bloků. Maximální velikost objektu blob bloku je 50 000krát Block_Size
.
Ukládání do vyrovnávací paměti během nahrávání
Vrstva REST úložiště nepodporuje vyzvednutí operace nahrávání REST tam, kde jste skončili; individuální převody jsou buď dokončeny, nebo ztraceny. Aby se zajistila odolnost nahrávání datových proudů, klientské knihovny úložiště uloží data do vyrovnávací paměti pro každé jednotlivé volání REST před zahájením nahrávání. Kromě omezení rychlosti sítě je toto chování ukládání do vyrovnávací paměti důvodem, proč zvážit menší hodnotu pro BlockSize
, a to i při nahrávání v posloupnosti. Snížením hodnoty BlockSize
se sníží maximální množství dat, která jsou na každém požadavku uložena do vyrovnávací paměti, a každé opakování neúspěšného požadavku. Pokud dochází k častým vypršením časového limitu při přenosech dat určité velikosti, snížení hodnoty BlockSize
zkrácení doby ukládání do vyrovnávací paměti a může vést k lepšímu výkonu.
Ladění výkonu pro stahování
Správné ladění možností přenosu dat je klíčem ke spolehlivému výkonu při stahování. Přenosy úložiště jsou rozdělené na několik dílčích přenosů na základě hodnot těchto vlastností.
Nastavení možností přenosu pro stahování
Následující vlastnosti je možné ladit na základě potřeb vaší aplikace:
BlockSize
: Maximální velikost bloku dat použitá ke stažení objektu blob. Výchozí hodnota je 4 MB.Concurrency
: Maximální počet dílčích přenosů, které lze použít paralelně. Výchozí hodnota je 5.
Tyto možnosti jsou k dispozici při stahování pomocí následujících metod:
Metoda DownloadStream tyto možnosti nepodporuje a stahuje data v rámci jednoho požadavku.
Příklad kódu
Následující příklad kódu ukazuje, jak definovat hodnoty pro DownloadFileOptions instance a předat tyto možnosti konfigurace jako parametr DownloadFile.
Hodnoty uvedené v této ukázce nejsou určené jako doporučení. Pokud chcete tyto hodnoty správně vyladit, musíte zvážit konkrétní potřeby vaší aplikace.
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)
}
Důležité informace o výkonu při stahování
Během stahování klientské knihovny služby Storage rozdělí danou žádost o stažení na několik dílčích částí na základě možností konfigurace definovaných během sestavování klienta. Každá dílčí část má vlastní vyhrazené volání operace REST. V závislosti na možnostech přenosu klientské knihovny spravují tyto operace REST paralelně, aby se dokončilo úplné stahování.
Související obsah
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Go. Podívejte se na úplný seznam článků příručky pro vývojáře na webu Sestavení aplikace.
- Další informace ofaktorch
- Seznam aspektů návrhu pro optimalizaci výkonu pro aplikace využívající úložiště objektů blob najdete v kontrolním seznamu k výkonu a škálovatelnosti úložiště objektů blob.