Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když aplikace přenáší data pomocí klientské knihovny Azure Storage pro Javu, 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 argumentů. 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 pro ú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í
Hodnoty v ParallelTransferOptions můžete nakonfigurovat tak, aby se zlepšil výkon operací přenosu dat. Následující hodnoty je možné ladit pro nahrávání na základě potřeb vaší aplikace:
- maxSingleUploadSize: Maximální velikost objektu BLOB v bajtech pro nahrání jedním požadavkem.
- blockSize: Maximální velikost bloku pro přenos pro každý požadavek.
- maxConcurrency: Maximální počet paralelních požadavků vydaných v libovolném okamžiku jako součást jednoho paralelního přenosu.
Poznámka:
Klientské knihovny použijí 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í.
maxSingleUploadSize
Hodnota maxSingleUploadSize představuje maximální velikost bloku v bajtech pro jedno nahrání požadavku. Tuto hodnotu lze nastavit pomocí následující metody:
Pokud je velikost dat menší nebo rovna maxSingleUploadSize, objekt blob se nahraje s jedním požadavkem put blob . Pokud je velikost objektu blob větší než maxSingleUploadSize, nebo pokud je velikost objektu blob neznámá, objekt blob se nahraje po částech pomocí řady volání Put Block, po nichž následuje Put Block List.
Je důležité poznamenat, že zadaná blockSizehodnota neomezuje hodnotu, pro kterou definujete maxSingleUploadSize. Argument maxSingleUploadSize definuje samostatné omezení velikosti pro požadavek na provedení celé operace najednou, bez subtransferů. Často se jedná o případ, kdy chcete maxSingleUploadSize být alespoň tak velká jako hodnota, kterou definujete pro blockSize, pokud ne větší. V závislosti na velikosti přenosu dat může být tento přístup výkonnější, protože se přenos dokončí jediným požadavkem a zabrání režii více požadavků.
Pokud si nejste jistí, jaká hodnota je pro vaši situaci nejvhodnější, je bezpečná možnost nastavit maxSingleUploadSize stejnou hodnotu, pro blockSizekterou se používá .
blockSize
Hodnota blockSize je maximální délka přenosu v bajtech při nahrávání blokového blobu po částech. Tuto hodnotu lze nastavit pomocí následující metody:
Hodnota blockSize je maximální délka přenosu v bajtech při nahrávání blokového blobu po částech. Jak už bylo zmíněno dříve, tato hodnota maxSingleUploadSize , což může být větší než blockSize.
Kvůli efektivnímu přesunu 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 pro úložiště objektů blob najdete v grafu v Cíle škálování pro úložiště objektů blob.
maxConcurrency
Hodnota maxConcurrency je maximální počet paralelních požadavků vydaných v libovolném okamžiku jako součást jednoho paralelního přenosu. Tuto hodnotu lze nastavit pomocí následující metody:
Příklad kódu
Ujistěte se, že máte následující import příkaz pro použití ParallelTransferOptions k nahrání:
import com.azure.storage.blob.models.*;
Následující příklad kódu ukazuje, jak nastavit hodnoty ParallelTransferOptions a zahrnout možnosti jako součást BlobUploadFromFileOptions instance. Pokud soubor nenahráváte, můžete podobné možnosti nastavit pomocí BlobParallelUploadOptions. 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.
ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
.setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
.setMaxConcurrency(2)
.setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload
BlobUploadFromFileOptions options = new BlobUploadFromFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);
Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);
V tomto příkladu nastavíme pomocí metody setMaxConcurrency maximální počet pracovníků pro paralelní přenos na 2. Také jsme nastavili maxSingleUploadSize na 8 MiB pomocí metody setMaxSingleUploadSizeLong. Pokud je velikost objektu blob menší než 8 MiB, k dokončení operace nahrávání je potřeba jenom jeden požadavek. Pokud je velikost objektu blob větší než 8 MiB, objekt blob se nahraje do bloků dat s maximální velikostí 4 MiB, kterou jsme nastavili pomocí setBlockSizeLong metody.
Úvahy o výkonu při nahrávání
Během nahrávání rozdělí knihovny klienta služby Storage daný datový proud pro nahrání do několika dílčích částí na základě konfiguračních možností definovaných pomocí ParallelTransferOptions. Každá dílčí část má vlastní vyhrazené volání operace REST. U objektu BlobClient je tato operace put Block. Klientská knihovna služby Storage spravuje tyto operace REST paralelně (v závislosti na možnostech přenosu) a dokončí úplné nahrávání.
Poznámka:
Objekty blokového blobu mají maximální počet 50 000 bloků. Maximální velikost datového objektu blob bloku je 50 000krát block_size.
Vyrovnávání toků dat 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 během přenosů dat určité velikosti, snížení hodnoty blockSize zkrátí dobu ukládání do vyrovnávací paměti, což 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ěleny do několika dílčích přenosů na základě hodnot definovaných v ParallelTransferOptions.
Nastavení možností přenosu pro stahování
Následující hodnoty je možné ladit pro stahování na základě potřeb vaší aplikace:
-
blockSize: Maximální velikost bloku, která se má přenést pro každou žádost. Tuto hodnotu můžete nastavit pomocí setBlockSizeLong metoda. -
maxConcurrency: Maximální počet paralelních požadavků vydaných v libovolném okamžiku jako součást jednoho paralelního přenosu. Tuto hodnotu můžete nastavit pomocí metody setMaxConcurrency .
Příklad kódu
Ujistěte se, že máte následující pokyn import pro použití ParallelTransferOptions ke stažení:
import com.azure.storage.common.*;
Následující příklad kódu ukazuje, jak nastavit hodnoty ParallelTransferOptions a zahrnout možnosti jako součást BlobDownloadToFileOptions instance.
ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
.setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
.setMaxConcurrency(2);
BlobDownloadToFileOptions options = new BlobDownloadToFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);
blobClient.downloadToFileWithResponse(options, null, null);
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 .ParallelTransferOptions 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í.
Další kroky
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Javu. 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.