.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:

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 StorageTransferOptionstest 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 InitialTransferSizetanı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 MaximumTransferSizedeğ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 MaximumTransferSizekullanı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 MaximumTransferSizeolabilecek 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 UploadAsyncgö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 MaximumTransferSizedaha 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 InitialTransferSizekarşı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.