.NET ile karşıya yüklemeler ve indirmeler için performans ayarlama
Bir uygulama .NET için Azure Depolama istemci kitaplığını kullanarak veri aktardığında hızı, bellek kullanımını ve hatta isteğin başarısını veya başarısızlığını etkileyebilecek çeşitli faktörler vardır. Veri aktarımlarında performansı ve güvenilirliği en üst düzeye çıkarmak için, uygulamanızın çalıştığı ortama göre istemci kitaplığı aktarım seçeneklerini yapılandırma konusunda proaktif olmak önemlidir.
Bu makalede, veri aktarımı seçeneklerini ayarlama konusunda dikkat edilmesi gereken çeşitli noktalar açıklanır ve bu kılavuz parametre olarak kabul eden tüm API'ler StorageTransferOptions
için geçerlidir. düzgün ayarlandığında, istemci kitaplığı verileri birden çok istek arasında verimli bir şekilde dağıtabilir ve bu da gelişmiş işlem hızı, bellek kullanımı ve ağ kararlılığı ile sonuçlanabilir.
StorageTransferOptions ile performans ayarlama
StorageTransferOptions içindeki değerlerin düzgün ayarlanması, veri aktarımı işlemleri için güvenilir performans açısından önemlidir. Depolama aktarımları, bu yapının bir örneğinde tanımlanan özellik değerlerine göre birkaç alt iletide bölümlenir. Desteklenen maksimum aktarım boyutu işleme ve hizmet sürümüne göre değişir, bu nedenle sınırları belirlemek için belgeleri gözden geçirin. Blob depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için bkz . Blob depolama için hedefleri ölçeklendirme.
Aşağıdaki özellikleri StorageTransferOptions
uygulamanızın gereksinimlerine göre ayarlanabilir:
- InitialTransferSize - bayt cinsinden ilk isteğin boyutu
- MaximumConcurrency - Paralel olarak kullanılabilecek en fazla alt iletim sayısı
- MaximumTransferSize - bayt cinsinden aktarım uzunluğu üst sınırı
Not
StorageTransferOptions
Yapı null atanabilir değerler içeriyor olsa da, istemci kitaplıkları sağlanmadıysa her bir değer için varsayılan değerleri kullanır. Bu varsayılanlar genellikle bir veri merkezi ortamında yüksek performanslıdır, ancak ev tüketicisi ortamları için uygun olmayabilir. Kötü ayarlanmış StorageTransferOptions
işlemler aşırı uzun işlemlere ve hatta istek zaman aşımlarına neden olabilir. içindeki değerleri StorageTransferOptions
test etmek ve bunları uygulamanızın ve ortamınızın gereksinimlerine göre ayarlamak için proaktif olmak en iyisidir.
InitialTransferSize
InitialTransferSize , ilk aralık isteğinin bayt cinsinden boyutudur. HTTP aralığı isteği, bu durumda tarafından InitialTransferSize
tanımlanan boyuta sahip kısmi bir istektir. Bu boyuttan küçük bloblar tek bir istekte aktarılır. Bu boyuttan büyük bloblar boyut MaximumTransferSize
öbekleri halinde aktarılmaya devam eder.
Belirttiğiniz değerin için MaximumTransferSize
InitialTransferSize
tanımladığınız değeri sınırlamadığını unutmayın. InitialTransferSize
, ilk isteğin tüm işlemi aynı anda gerçekleştirmesi için alt iletim olmadan ayrı bir boyut sınırlaması tanımlar. Genellikle, büyük değilse için tanımladığınız MaximumTransferSize
değer kadar büyük olmak istersinizInitialTransferSize
. Veri aktarımının boyutuna bağlı olarak, aktarım tek bir istekle tamamlandığından ve birden çok isteğin ek yükünü önlediği için bu yaklaşım daha yüksek performanslı olabilir.
Durumunuz için en uygun değerin hangisi olduğundan emin değilseniz, güvenli bir seçenek için MaximumTransferSize
kullanılan değere ayarlamaktırInitialTransferSize
.
Not
Nesne BlobClient
kullanılırken, 'den InitialTransferSize
küçük bir blob karşıya yüklenirken, Put Block yerine Put Blob kullanılır.
MaximumConcurrency
MaximumConcurrency , paralel aktarımda kullanılabilecek en fazla çalışan sayısıdır. Şu anda yalnızca zaman uyumsuz işlemler aktarımları paralelleştirebilir. Zaman uyumlu işlemler bu değeri yoksayar ve sırayla çalışır.
Bu değerin etkinliği.NET'teki bağlantı havuzu sınırlarına tabidir ve bu da belirli senaryolarda performansı varsayılan olarak kısıtlayabilir. .NET'teki bağlantı havuzu sınırları hakkında daha fazla bilgi edinmek için bkz . .NET Framework Bağlantı Havuzu Sınırları ve .NET için yeni Azure SDK.
MaximumTransferSize
MaximumTransferSize , bir aktarımın bayt cinsinden uzunluk üst sınırıdır. Daha önce belirtildiği gibi, bu değer değerinden büyük MaximumTransferSize
olabilecek değerini sınırlamazInitialTransferSize
.
Verilerin verimli bir şekilde ilerlemesini sağlamak için istemci kitaplıkları her aktarım için her zaman değere MaximumTransferSize
ulaşamayabilir. İşleme bağlı olarak aktarım boyutu için desteklenen maksimum değer farklılık gösterebilir. Örneğin, 2019-12-12 veya sonraki bir hizmet sürümüne sahip Blok Koy işlemini çağıran blok blobları en fazla 4000 MiB blok boyutuna sahiptir. Blob depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için Bkz . Blob depolama için hedefleri ölçeklendirme.
Kod örneği
İstemci kitaplığı, BlobUploadOptions parametresinin Upload
bir parçası olarak StorageTransferOptions örneğini kabul eden ve UploadAsync
yöntemleri için aşırı yüklemeler içerir. BlobDownloadToOptions parametresi kullanılarak ve DownloadToAsync
yöntemleri için DownloadTo
de benzer aşırı yüklemeler vardır.
Aşağıdaki kod örneği, bir StorageTransferOptions
örneğin değerlerini tanımlamayı ve bu yapılandırma seçeneklerini parametresi olarak 'a geçirmeyi UploadAsync
gösterir. Bu örnekte sağlanan değerler bir öneri olarak tasarlanmamıştır. Bu değerleri düzgün ayarlamak için uygulamanızın belirli gereksinimlerini dikkate almanız gerekir.
// Specify the StorageTransferOptions
BlobUploadOptions options = new BlobUploadOptions
{
TransferOptions = new StorageTransferOptions
{
// Set the maximum number of parallel transfer workers
MaximumConcurrency = 2,
// Set the initial transfer length to 8 MiB
InitialTransferSize = 8 * 1024 * 1024,
// Set the maximum length of a transfer to 4 MiB
MaximumTransferSize = 4 * 1024 * 1024
}
};
// Upload data from a stream
await blobClient.UploadAsync(stream, options);
Bu örnekte, özelliğini kullanarak paralel aktarım çalışanlarının sayısını 2 olarak MaximumConcurrency
ayarlayacağız. Bu yapılandırma aynı anda en fazla iki bağlantı açarak karşıya yüklemenin paralel olarak gerçekleşmesini sağlar. İlk HTTP aralığı isteği, özelliği tarafından InitialTransferSize
tanımlandığı gibi 8 MiB'a kadar veri yüklemeyi dener. Yalnızca aranabilir bir akış kullanılırken karşıya yüklemeler için geçerli olduğunu InitialTransferSize
unutmayın. Blob boyutu 8 MiB'den küçükse, işlemi tamamlamak için yalnızca tek bir istek gerekir. Blob boyutu 8 MiB'den büyükse, sonraki tüm aktarım isteklerinin boyutu en fazla 4 MiB olur ve bu boyut özelliğiyle MaximumTransferSize
ayarlanır.
Karşıya yüklemeler için performansla ilgili dikkat edilmesi gerekenler
Karşıya yükleme sırasında Depolama istemci kitaplıkları, belirli bir karşıya yükleme akışını örnekte tanımlanan değerlere göre birden çok alt yüke StorageTransferOptions
böler. Her alt yükün REST işlemine kendi ayrılmış çağrısı vardır. Bir BlobClient
nesne veya BlockBlobClient
nesne için bu işlem Put Block işlemidir. Bir DataLakeFileClient
nesne için bu işlem Veri Ekle'dir. Depolama istemci kitaplığı, yüklemenin tamamını tamamlamak için bu REST işlemlerini paralel olarak yönetir (aktarım seçeneklerine bağlı olarak).
Karşıya yükleme akışının aranabilir veya aranamaz olmasına bağlı olarak, istemci kitaplığı aşağıdaki bölümlerde açıklandığı gibi arabelleğe almayı ve InitialTransferSize
farklı şekilde işler. Aranabilir akış, bir akış içindeki geçerli konumu sorgulamayı ve değiştirmeyi destekleyen bir akıştır. .NET'teki akışlar hakkında daha fazla bilgi edinmek için bkz . Stream sınıfı başvurusu.
Not
Blok blobları en fazla 50.000 blok blok sayısına sahiptir. Blok blobunuzun boyutu üst sınırı 50.000 kezdir MaximumTransferSize
.
Karşıya yüklemeler sırasında arabelleğe alma
Depolama REST katmanı, kaldığınız yerden REST karşıya yükleme işleminin algılanmasını desteklemez; tek tek aktarımlar tamamlanır veya kaybolur. Aranamayan akış karşıya yüklemelerinde dayanıklılık sağlamak için, Depolama istemci kitaplıkları karşıya yüklemeyi başlatmadan önce her rest çağrısı için verileri arabelleğe alır. Ağ hızı sınırlamalarına ek olarak, bu arabelleğe alma davranışı sırayla karşıya yüklerken bile için MaximumTransferSize
daha küçük bir değeri göz önünde bulundurmanın bir nedenidir. değerinin MaximumTransferSize
azaltılması, her istekte arabelleğe alınan maksimum veri miktarını ve başarısız bir isteğin her yeniden denemesini azaltır. Belirli bir boyuttaki veri aktarımları sırasında sık sık zaman aşımlarıyla karşılaşıyorsanız değerini MaximumTransferSize
azaltmak arabelleğe alma süresini azaltır ve daha iyi performansa neden olabilir.
Arabelleğe alma işleminin gerçekleştiği bir diğer senaryo da, ağ aktarım hızını en üst düzeye çıkarmak için paralel REST çağrılarıyla verileri karşıya yüklediğinizde ortaya çıkar. İstemci kitaplıklarının paralel olarak okuyabilecekleri kaynaklara ihtiyacı vardır ve akışlar sıralı olduğundan, Depolama istemci kitaplıkları karşıya yüklemeyi başlatmadan önce her rest çağrısı için verileri arabelleğe alır. Sağlanan akış aranabilir olsa bile bu arabelleğe alma davranışı oluşur.
Zaman uyumsuz karşıya yükleme çağrısı sırasında arabelleğe almayı önlemek için aranabilir bir akış sağlamanız ve 1 olarak ayarlamanız MaximumConcurrency
gerekir. Bu strateji çoğu durumda işe yarasa da, kodunuz arabelleğe alma gerektiren diğer istemci kitaplığı özelliklerini kullanıyorsa arabelleğe alma gerçekleşebilir.
Karşıya yüklemede InitialTransferSize
Karşıya yükleme için aranabilir bir akış sağlandığında, akış uzunluğu değeriyle InitialTransferSize
karşılaştırılır. Akış uzunluğu bu değerden küçükse, diğer StorageTransferOptions
değerlerden bağımsız olarak akışın tamamı tek bir REST çağrısı olarak karşıya yüklenir. Aksi takdirde, karşıya yükleme daha önce açıklandığı gibi birden çok bölümde yapılır. InitialTransferSize
aranamaz bir akış üzerinde hiçbir etkisi yoktur ve yoksayılır.
İndirmeler için performansla ilgili dikkat edilmesi gerekenler
İndirme sırasında Depolama istemci kitaplıkları, belirli bir indirme isteğini örnekte tanımlanan değerlere göre birden çok alt yüke StorageTransferOptions
böler. Her alt indirmenin REST işlemine kendi ayrılmış çağrısı vardır. Aktarım seçeneklerine bağlı olarak, istemci kitaplıkları tam indirmeyi tamamlamak için bu REST işlemlerini paralel olarak yönetir.
İndirmeler sırasında arabelleğe alma
Gövde içeriğiyle aynı anda birden çok HTTP yanıtı almak bellek kullanımına etki eder. Ancak, Depolama istemci kitaplıkları indirilen içerikler için açıkça bir arabellek adımı eklemez. Gelen yanıtlar sırayla işlenir. İstemci kitaplıkları, HTTP yanıt akışındaki akışları çağıran tarafından sağlanan hedef akışa veya dosya yoluna kopyalamak için 16 kilobaytlık bir arabellek yapılandırmaktadır.
İndirmede InitialTransferSize
İndirme sırasında, Depolama istemci kitaplıkları başka bir şey yapmadan önce kullanarak InitialTransferSize
bir indirme aralığı isteğinde bulunur. bu ilk indirme isteği sırasında istemci kitaplıkları kaynağın toplam boyutunu bilir. İlk istek tüm içeriği başarıyla indirdiyse işlem tamamlanır. Aksi takdirde, istemci kitaplıkları tam indirme tamamlanana kadar aralık isteklerinde bulunmaya MaximumTransferSize
devam eder.
Sonraki adımlar
- Bu makale, .NET için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Uygulamanızı derleme bölümünde geliştirici kılavuzu makalelerinin tam listesine bakın.
- Azure Depolama işlemlerinin performansını etkileyebilecek faktörler hakkında daha fazla bilgi edinmek için bkz . Blob depolamada gecikme süresi.
- Blob depolama kullanarak uygulamaların performansını iyileştirmeye yönelik tasarım konuları listesini görmek için bkz . Blob depolama için performans ve ölçeklenebilirlik denetim listesi.