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 JavaScript, 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ích velikosti přenosu pro úložiště objektů blob najdete v části Cíle škálování pro úložiště objektů blob.
Nastavení možností přenosu pro nahrávání
Vlastnosti v BlockBlobParallelUploadOptions můžete nakonfigurovat tak, aby se zlepšil výkon operací přenosu dat. V následující tabulce jsou uvedeny vlastnosti, které můžete konfigurovat, spolu s popisem:
| Vlastnost | Popis |
|---|---|
blockSize |
Maximální velikost bloku, která se má přenést pro každý požadavek v rámci operace nahrávání. Další informace najdete v tématu blockSize. |
maxSingleShotSize |
Pokud je velikost dat menší nebo rovna této hodnotě, nahrají se jedním požadavkem místo rozdělení na části. Pokud se data nahrají na jeden snímek, velikost bloku se ignoruje. Výchozí hodnota je 256 MB. Pokud tuto vlastnost přizpůsobíte, musíte použít hodnotu menší nebo rovnou 256 MB. Další informace najdete v tématu maxSingleShotSize. |
concurrency |
Maximální počet paralelních požadavků vydaných v dané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í.
maximální velikost jednoho záběru
Hodnota maxSingleShotSize je maximální velikost objektu blob v bajtech pro jeden přenos požadavku.
Pokud je velikost dat menší nebo rovna maxSingleShotSize, objekt blob se nahraje s jedním požadavkem put blob . Pokud je velikost objektu blob větší než maxSingleShotSize, nebo pokud je velikost objektu blob neznámá, objekt blob se nahraje do bloků pomocí řady volání Put Block následovaných Put Block List.
Je důležité poznamenat, že zadaná blockSizehodnota neomezuje hodnotu, pro kterou definujete maxSingleShotSize. Argument maxSingleShotSize definuje samostatné omezení velikosti pro požadavek na provedení celé operace najednou, bez subtransferů. Často se jedná o případ, kdy chcete maxSingleShotSize 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 maxSingleShotSize stejnou hodnotu, pro blockSizekterou se používá .
blockSize
Hodnota blockSize je maximální délka přenesených dat v bajtech při nahrávání blokového blobu po částech.
Jak už bylo zmíněno dříve, tato hodnota maxSingleShotSize , což může být větší než blockSize.
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ích velikosti přenosu úložiště objektů blob najdete v tabulce Cíle škálování pro úložiště objektů blob.
Příklad kódu
Následující příklad kódu ukazuje, jak nastavit hodnoty BlockBlobParallelUploadOptions a zahrnout možnosti jako součást volání metody upload. Hodnoty uvedené v ukázkách nejsou určené jako doporučení. Pokud chcete tyto hodnoty správně vyladit, musíte zvážit konkrétní potřeby vaší aplikace.
// Specify data transfer options
const uploadOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
}
// Create blob client from container client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
// Upload blob with transfer options
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
V tomto příkladu nastavíme maximální počet pracovníků pro paralelní přenos dat na hodnotu 2 pomocí vlastnosti concurrency. Také jsme nastavili maxSingleShotSize na 8 MiB. 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 definujeme ve blockSize vlastnosti.
Důležité informace o výkonu pro nahrávání
Během nahrávání rozdělí klientské knihovny služby Storage daný datový proud pro nahrání do několika dílčích částí na základě možností konfigurace definovaných .BlockBlobParallelUploadOptions Každá dílčí část má vlastní vyhrazené volání operace REST. V tomto příkladu je 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:
Blokové blobové objekty mají maximální počet 50 000 bloků. Maximální velikost blobového bloku je 50 000krát hodnota block_size.
Ukládání do vyrovnávací paměti během nahrávání
Vrstva Storage REST nepodporuje pokračování v operaci nahrávání tam, kde jste skončili; jednotlivé přenosy 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ím hodnoty blockSize se zkrátí doba ukládání do vyrovnávací paměti a může to vést k lepšímu výkonu.
Ladění výkonu pro stahování
Možnosti ladění přenosu dat pro stahování jsou k dispozici pouze při použití metody downloadToBuffer . Tato metoda stáhne objekt Blob paralelně do vyrovnávací paměti podle hodnot definovaných v BlobDownloadToBufferOptions. Jiné metody stahování nepodporují ladění možností přenosu dat.
Nastavení možností přenosu pro stahování
Při použití downloadToBuffer metody je možné ladit následující hodnoty pro stahování:
- blockSize: Maximální velikost bloku pro přenos pro každý požadavek.
- souběžnost: Maximální počet paralelních požadavků vydaných v daném okamžiku jako součást jednoho paralelního přenosu.
Důležité informace o výkonu při stahování
Během stahování pomocí downloadToBuffer služby klientské knihovny Storage rozdělují danou žádost o stažení na několik dílčích částí na základě konfiguračních možností definovaných BlobDownloadToBufferOptions. 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í.
Příklad kódu
Následující příklad kódu ukazuje, jak nastavit hodnoty pro BlobDownloadToBufferOptions a zahrnout možnosti jako součást volání metody downloadToBuffer . Hodnoty uvedené v ukázkách nejsou určené jako doporučení. Pokud chcete tyto hodnoty správně vyladit, musíte zvážit konkrétní potřeby vaší aplikace.
// Specify data transfer options
const downloadToBufferOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
}
// Download data to buffer
const result = await client.downloadToBuffer(offset, count, downloadToBufferOptions);
Související obsah
- Chcete-li se dozvědět více o faktorech, které mohou ovlivnit výkon operací Azure Storage, podívejte se na Latence v úložišti Blob.
- 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.