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 Python, 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 ú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í
Následující argumenty je možné ladit na základě potřeb vaší aplikace:
- max_single_put_size: Maximální velikost objektu blob, který se má nahrát pomocí jediného požadavku. Výchozí hodnota je 64 MiB.
- max_block_size: Maximální délka přenosu v bajtech při nahrávání objektu blob bloku do bloků dat. Výchozí hodnota je 4 MiB.
-
max_concurrency: Maximální počet dílčích přenosů, které lze použít paralelně.
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í.
max_single_put_size
Argumentem max_single_put_size je maximální velikost objektu blob v bajtech pro jeden nahrání požadavku. Pokud je velikost objektu blob menší nebo rovna max_single_put_size, objekt blob se nahraje pomocí jednoho požadavku Put Blob . Pokud je velikost objektu blob větší než max_single_put_sizenebo pokud je velikost objektu blob neznámá, objekt blob se nahraje do bloků dat pomocí řady volání put block následovaných seznamem bloků put.
Je důležité poznamenat, že zadaná max_block_sizehodnota neomezuje hodnotu, pro kterou definujete max_single_put_size. Argument max_single_put_size definuje samostatné omezení velikosti pro požadavek na provedení celé operace najednou, bez subtransferů. Často se jedná o případ, kdy chcete max_single_put_size být alespoň tak velká jako hodnota, kterou definujete pro max_block_size, 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 max_single_put_size stejnou hodnotu, pro max_block_sizekterou se používá .
max_block_size
Argument max_block_size je maximální délka přenosu v bajtech při nahrávání objektu blob bloku do bloků dat. Jak už bylo zmíněno dříve, tato hodnota , což může být větší než max_single_put_size.
Kvůli efektivnímu přesunu dat nemusí klientské knihovny vždy dosáhnout max_block_size 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 určit možnosti přenosu dat při vytváření objektu BlobClient a jak nahrát data pomocí tohoto klientského objektu. 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.
def upload_blob_transfer_options(self, account_url: str, container_name: str, blob_name: str):
# Create a BlobClient object with data transfer options for upload
blob_client = BlobClient(
account_url=account_url,
container_name=container_name,
blob_name=blob_name,
credential=DefaultAzureCredential(),
max_block_size=1024*1024*4, # 4 MiB
max_single_put_size=1024*1024*8 # 8 MiB
)
with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
blob_client = blob_client.upload_blob(data=data, overwrite=True, max_concurrency=2)
V tomto příkladu nastavíme počet pracovních procesů paralelního přenosu na hodnotu 2 pomocí argumentu max_concurrency volání metody. Tato konfigurace se současně otevře až dvě připojení, což umožňuje paralelní nahrávání. Během vytváření instance klienta nastavíme max_single_put_size argument 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 podle argumentu max_block_size .
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. 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í.
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 max_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 max_block_size, a to i při nahrávání v posloupnosti. Snížením hodnoty max_block_size 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, snižte hodnotu max_block_size zkrácení doby ukládání do vyrovnávací paměti a může vést k lepšímu výkonu.
Sada SDK ve výchozím nastavení uloží data max_block_size bajtů na souběžný požadavek na dílčí načtení, ale využití paměti může být omezené na 4 MiB na požadavek, pokud jsou splněny následující podmínky:
- Argument
max_block_sizemusí být větší nežmin_large_block_upload_threshold. Argumentmin_large_block_upload_thresholdmůže být definován během vytváření instancí klienta a je minimální velikost bloku v bajtech potřebná k použití algoritmu efektivního pro paměť. Argumentmin_large_block_upload_thresholdje4*1024*1024 + 1ve výchozím nastavení . - Zadaný datový proud musí být vyhledatelný. Vyhledávatelný datový proud je datový proud, který podporuje dotazování a úpravu aktuální pozice v rámci datového proudu.
- Objekt blob musí být objekt blob bloku.
I když se tato strategie vztahuje na většinu situací, je stále možné, že k ukládání do vyrovnávací paměti dojde, pokud váš kód používá jiné funkce klientské knihovny, které vyžadují ukládání do vyrovnávací paměti.
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 argumentů.
Nastavení možností přenosu pro stahování
Následující argumenty je možné ladit na základě potřeb vaší aplikace:
-
max_chunk_get_size: Maximální velikost bloku dat použitá ke stažení objektu blob. Výchozí hodnota je 4 MiB. -
max_concurrency: Maximální počet dílčích přenosů, které lze použít paralelně. -
max_single_get_size: Maximální velikost objektu blob, který se má stáhnout v jednom volání. Pokud celková velikost objektu blobmax_single_get_sizepřekročí, zbývající data objektu blob se stáhnou v blocích. Výchozí hodnota je 32 MiB. -
connection_data_block_size: Určuje velikost datových bloků načtených ze síťového datového proudu. Výchozí hodnota je 4 KiB.
Příklad kódu
def download_blob_transfer_options(self, account_url: str, container_name: str, blob_name: str):
# Create a BlobClient object with data transfer options for download
blob_client = BlobClient(
account_url=account_url,
container_name=container_name,
blob_name=blob_name,
credential=DefaultAzureCredential(),
max_single_get_size=1024*1024*32, # 32 MiB
max_chunk_get_size=1024*1024*4, # 4 MiB
connection_data_block_size=1024*4, # 4 KiB
)
with open(file=os.path.join(r'file_path', 'file_name'), mode="wb") as sample_blob:
download_stream = blob_client.download_blob(max_concurrency=2)
sample_blob.write(download_stream.readall())
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í.
max_single_get_size ke stažení
Během stahování klientské knihovny služby Storage před provedením čehokoli jiného vytvoří jednu žádost o max_single_get_size rozsah stahování. Během této počáteční žádosti o stažení klientské knihovny znají celkovou velikost prostředku. Pokud se počáteční požadavek úspěšně stáhl veškerý obsah, operace se dokončí. V opačném případě klientské knihovny nadále můžou provádět žádosti o rozsah až do max_chunk_get_size dokončení úplného stahování.
Velikost bloku datového připojení pro stahování
Během stahování connection_data_block_size může nastavení výrazně ovlivnit výkon stahování. Jeho dopad je vysoce závislý na vašem konkrétním prostředí a konfiguraci hardwaru. Zkuste začít s hodnotou, jako je 64KiB, a postupně ji upravit, abyste našli optimální rovnováhu při monitorování výkonu a využití prostředků.
Další kroky
- Tento článek je součástí příručky pro vývojáře služby Blob Storage pro Python. 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.