Feltöltések és letöltések teljesítményhangolása JavaScript használatával
Amikor egy alkalmazás a JavaScripthez készült Azure Storage-ügyfélkódtár használatá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 argumentumok é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
A BlockBlobParallelUploadOptions tulajdonságai konfigurálhatók az adatátviteli műveletek teljesítményének javítása érdekében. Az alábbi táblázat felsorolja a konfigurálható tulajdonságokat, valamint egy leírást:
Tulajdonság | Leírás |
---|---|
blockSize |
A maximális blokkméret, amely a feltöltési művelet részeként továbbítandó minden kéréshez. További információ: blockSize. |
maxSingleShotSize |
Ha az adatok mérete kisebb vagy egyenlő ennél az értéknél, akkor a rendszer nem adattömbökre bontva, hanem egyetlen put-ban tölti fel őket. Ha az adatok feltöltése egyetlen lövéssel történik, a blokk mérete figyelmen kívül lesz hagyva. Az alapértelmezett érték 256 MB. Ha testre szabja ezt a tulajdonságot, 256 MB-nál kisebb vagy egyenlő értéket kell használnia. További információ: maxSingleShotSize. |
concurrency |
A párhuzamos kérelmek maximális száma, amelyeket egy adott időpontban egyetlen párhuzamos átvitel részeként bocsátanak ki. |
Feljegyzés
Ha nincs megadva, az ügyfélkódtárak minden adatátviteli lehetőséghez alapértelmezett értékeket használnak. 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.
maxSingleShotSize
Az maxSingleShotSize
érték egy kérelemfeltöltés maximális blobmérete bájtban.
Ha az adatok mérete kisebb vagy egyenlő maxSingleShotSize
, a blob egyetlen Put Blob-kéréssel lesz feltöltve. Ha a blob mérete nagyobb, mint maxSingleShotSize
, 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 Put Block List
rendszer követ.
Fontos megjegyezni, hogy a megadott blockSize
érték nem korlátozza a megadott maxSingleShotSize
értéket. Az maxSingleShotSize
argumentum külön méretkorlátozást határoz meg a teljes művelet egyidejű végrehajtására irányuló kéréshez, altranszferek nélkül. Gyakran előfordul, hogy legalább akkora értéket szeretne maxSingleShotSize
megadni, mint a megadott blockSize
érték, ha nem nagyobb. Az adatátvitel méretétől függően ez a megközelítés hatékonyabb lehet, mivel az átvitel egyetlen kéréssel fejeződik be, és elkerüli a több kérelem többletterhelését.
Ha nem biztos abban, hogy melyik érték a legjobb a helyzethez, akkor a biztonságos lehetőség az, ha ugyanazt az értéket állítja be maxSingleShotSize
, amelyet a rendszer használ blockSize
.
blockSize
Az blockSize
érték az átvitel maximális hossza bájtban, amikor blokkblobot tölt fel adattömbökbe.
Ahogy korábban említettük, ez az érték nem korlátozza a korlátot maxSingleShotSize
, amely nagyobb lehet, mint blockSize
.
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 kódpéldából megtudhatja, hogyan állíthatja be a BlockBlobParallelUploadOptions értékeit, és hogyan adhatja meg a beállításokat egy feltöltési metódushívás részeként. A mintákban megadott értékek nem javaslatok. Ezeknek az értékeknek a megfelelő finomhangolásához figyelembe kell vennie az alkalmazás adott igényeit.
// 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);
Ebben a példában a párhuzamos átviteli feldolgozók maximális számát 2-re állítjuk a concurrency
tulajdonság használatával. 8 MiB értékre is beállítunk maxSingleShotSize
. Ha a blob mérete kisebb, mint 8 MiB, csak egyetlen kérelem szükséges a feltöltési művelet végrehajtásához. Ha a blob mérete nagyobb, mint 8 MiB, akkor a blob 4 MiB maximális adattömbmérettel tölthető fel, amelyet a blockSize
tulajdonságban határozunk meg.
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 a megadott BlockBlobParallelUploadOptions
konfigurációs beállítások alapján. Minden alterhelés saját dedikált hívással rendelkezik a REST-művelethez. Ebben a példában a művelet a Blokk elhelyezése. 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.
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 blockSize
vegyenek 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
A letöltések adatátviteli beállításainak finomhangolása csak a downloadToBuffer metódus használatakor érhető el. Ez a metódus a BlobDownloadToBufferOptionsban definiált értékek alapján párhuzamosan tölt le egy blobot egy pufferrel. Más letöltési módszerek nem támogatják az adatátviteli beállítások finomhangolását.
Letöltések átviteli beállításainak megadása
A metódus használatakor downloadToBuffer
a következő értékek hangolhatók le a letöltésekhez:
- blockSize: Az egyes kérések maximális blokkmérete.
- egyidejűség: Az egy párhuzamos átvitel részeként adott időpontban kibocsátott párhuzamos kérelmek maximális száma.
A letöltések teljesítményével kapcsolatos szempontok
A letöltés downloadToBuffer
során a Storage-ügyfélkódtárak egy adott letöltési kérelmet több alletöltésre osztanak fel a megadott BlobDownloadToBufferOptions
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.
Mintakód
Az alábbi példakód bemutatja, hogyan állíthatja be a BlobDownloadToBufferOptions értékeit, és hogyan adhatja meg a beállításokat egy downloadToBuffer metódushívás részeként. A mintákban megadott értékek nem javaslatok. Ezeknek az értékeknek a megfelelő finomhangolásához figyelembe kell vennie az alkalmazás adott igényeit.
// 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);
Kapcsolódó tartalom
- Az Azure Storage-műveletek teljesítményét befolyásoló tényezőkről további információt a Blob Storage késése című témakörben talál.
- A Blob Storage-t használó alkalmazások teljesítményének optimalizálásához szükséges tervezési szempontok listáját a Blob Storage teljesítmény- és méretezhetőségi ellenőrzőlistájában tekintheti meg.