Aracılığıyla paylaş


Yüklemeler ve indirmeler için Go ile performans iyileştirme

Bir uygulama Go 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 ayarlamayla ilgili dikkat edilmesi gereken bazı noktalar açıklanır. 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.

Karşıya yüklemeler için performans ayarlama

Veri aktarımı seçeneklerinin düzgün ayarlanması, karşıya yüklemeler için güvenilir performansın anahtarıdır. Depolama aktarımları, bu özelliklerin 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 ölçek hedefleri.

Karşıya yüklemeler için aktarım seçeneklerini ayarlayın

Toplam blob boyutu 256 MB'tan küçük veya buna eşitse, veriler tek bir Put Blob isteğiyle karşıya yüklenir. Blob boyutu 256 MB'tan büyükse veya blob boyutu bilinmiyorsa, blob, bir dizi Put Block çağrısı ve ardından Put Block List kullanılarak parça parça yüklenir.

Aşağıdaki özellikler uygulamanızın gereksinimlerine göre yapılandırılabilir ve ayarlanabilir:

  • BlockSize: Blok blobu öbekler halinde karşıya yüklenirken bayt cinsinden aktarım uzunluğu üst sınırı. Varsayılan değer 4 MB'tır.
  • Concurrency: Paralel olarak kullanılabilecek en fazla alt iletim sayısı. Varsayılan değer 5'tir.

Bu yapılandırma seçenekleri, aşağıdaki yöntemler kullanılarak yükleme sırasında kullanılabilir.

Upload yöntemi bu seçenekleri desteklemez ve tek bir istekte verileri karşıya yükler.

Not

İstemci kitaplıkları, sağlanmadıysa her veri aktarımı seçeneği 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ış veri aktarımı seçenekleri aşırı uzun işlemlere ve hatta istek zaman aşımlarına neden olabilir. Bu değerleri test etmek ve uygulamanızın ve ortamınızın ihtiyaçlarına göre ayarlamak için proaktif olmak en iyisidir.

Blok Boyutu

BlockSize değişken, blok blobunu parçalar halinde karşıya yüklerken bayt cinsinden aktarımın uzunluk üst sınırıdır.

Verilerin verimli bir şekilde ilerlemesini sağlamak için istemci kitaplıkları her aktarımda her zaman BlockSize değerine ulaşamayabilir. İşleme bağlı olarak aktarım boyutu için desteklenen maksimum değer farklılık gösterebilir. Blob depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için Blob depolama için Ölçek Hedefleri bölümündeki tabloya bakın.

Kod örneği

Aşağıdaki kod örneği bir UploadFileOptions örneği için değerleri tanımlamayı ve bu yapılandırma seçeneklerini UploadFile'a parametre olarak geçirmeyi 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.

func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the data to a block blob with transfer options
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file,
        &azblob.UploadFileOptions{
            BlockSize:   int64(8 * 1024 * 1024), // 8 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

Bu örnekte, Concurrency alanını kullanarak paralel aktarım çalışanı sayısını 2 olarak ayarlıyoruz. Bu yapılandırma aynı anda en fazla iki bağlantı açarak karşıya yüklemenin paralel olarak gerçekleşmesini sağlar. Blob boyutu 256 MB'tan büyükse, blob, Block_Size alanı tarafından ayarlanan maksimum parça boyutu 8 MiB olacak şekilde parçalara ayrılarak yüklenir.

Karşıya yüklemeler için performans açısından dikkate alınması gerekenler

Karşıya yükleme sırasında Depolama istemci kitaplıkları, istemci oluşturma sırasında tanımlanan yapılandırma seçeneklerine göre belirli bir karşıya yükleme akışını birden çok alt yüke böler. Her alt yüklemenin REST işlemine özel kendi çağrısı vardır. 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).

İstemci kitaplığının arabelleğe almayı nasıl işlediğini aşağıdaki bölümlerde öğrenebilirsiniz.

Not

Blok blobları en fazla 50.000 blok blok sayısına sahiptir. Blok blobunuzun maksimum boyutu, Block_Size boyutunun 50.000 katıdır.

Karşıya yüklemeler sırasında bekleme süresi

Depolama REST katmanı, başladığınız yerden devam eden bir REST karşıya yükleme işlemini desteklemez; her bir aktarım ya tamamlanır ya da kaybolur. 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, BlockSize için daha küçük bir değeri göz önünde bulundurmanın bir nedenidir. BlockSize değerinin azaltılması, her istekte ve başarısız bir isteğin her yeniden denenmesinde arabelleğe alınan maksimum veri miktarını azaltır. Eğer belirli bir boyuttaki veri aktarımları sırasında sık sık zaman aşımlarıyla karşılaşıyorsanız, BlockSize değerini azaltmak arabelleğe alma süresini kısaltabilir ve daha iyi performans sağlayabilir.

İndirmeler için performans ayarlama

Veri aktarımı seçeneklerinin düzgün ayarlanması, indirmeler için güvenilir performansın anahtarıdır. Depolama aktarımları, bu özelliklerin değerlerine göre birkaç alt iletide bölümlenir.

İndirmeler için aktarım seçeneklerini ayarlama

Aşağıdaki özellikler uygulamanızın gereksinimlerine göre ayarlanabilir:

  • BlockSize: Blobu indirmek için kullanılan en büyük öbek boyutu. Varsayılan değer 4 MB'tır.
  • Concurrency: Paralel olarak kullanılabilecek en fazla alt iletim sayısı. Varsayılan değer 5'tir.

Aşağıdaki yöntemler kullanılarak indirilirken bu seçenekler kullanılabilir:

DownloadStream yöntemi bu seçenekleri desteklemez ve verileri tek bir istekte indirir.

Kod örneği

Aşağıdaki kod örneğinde bir DownloadFileOptions örneği için değerlerin nasıl tanımlanacağı ve bu yapılandırma seçeneklerinin DownloadFile'a parametre olarak nasıl geçirildiği gösterilmektedir.

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.

func downloadBlobTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Create or open a local file where we can download the blob
	file, err := os.Create("path/to/sample/file")
	handleError(err)

	// Download the blob to the local file
	_, err = client.DownloadFile(context.TODO(), containerName, blobName, file,
		&azblob.DownloadFileOptions{
			BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
			Concurrency: uint16(2),
		})
	handleError(err)
}

İndirmeler için performansla ilgili dikkat edilmesi gerekenler

İndirme sırasında Depolama istemci kitaplıkları, istemci oluşturma sırasında tanımlanan yapılandırma seçeneklerine göre belirli bir indirme isteğini birden çok alt yüke böler. Her alt indirmenin, REST işlemine kendine ait bir ç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.

  • Bu makale, Go 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.