Bagikan melalui


Penyetelan performa untuk unggahan dan unduhan dengan Java

Saat aplikasi mentransfer data menggunakan pustaka klien Azure Storage untuk Java, ada beberapa faktor yang dapat memengaruhi kecepatan, penggunaan memori, dan bahkan keberhasilan atau kegagalan permintaan. Untuk memaksimalkan performa dan keandalan transfer data, penting untuk proaktif dalam mengonfigurasi opsi transfer pustaka klien berdasarkan lingkungan tempat aplikasi Anda berjalan.

Artikel ini membahas beberapa pertimbangan untuk menyetel opsi transfer data. Ketika disetel dengan benar, pustaka klien dapat mendistribusikan data secara efisien di beberapa permintaan, yang dapat mengakibatkan peningkatan kecepatan operasi, penggunaan memori, dan stabilitas jaringan.

Penyetelan performa untuk unggahan

Menyetel opsi transfer data dengan benar adalah kunci untuk performa yang dapat diandalkan untuk unggahan. Transfer penyimpanan dipartisi ke dalam beberapa subtransfer berdasarkan nilai argumen ini. Ukuran transfer maksimum yang didukung bervariasi menurut operasi dan versi layanan, jadi pastikan untuk memeriksa dokumentasi untuk menentukan batas. Untuk informasi selengkapnya tentang batas ukuran transfer untuk penyimpanan Blob, lihat Menskalakan target untuk penyimpanan Blob.

Mengatur opsi transfer untuk unggahan

Anda dapat mengonfigurasi nilai di ParallelTransferOptions untuk meningkatkan performa operasi transfer data. Nilai berikut dapat disetel untuk unggahan berdasarkan kebutuhan aplikasi Anda:

  • maxSingleUploadSize: Ukuran blob maksimum dalam byte untuk satu unggahan permintaan.
  • blockSize: Ukuran blok maksimum yang akan ditransfer untuk setiap permintaan.
  • maxConcurrency: Jumlah maksimum permintaan paralel yang dikeluarkan pada waktu tertentu sebagai bagian dari transfer paralel tunggal.

Catatan

Pustaka klien akan menggunakan default untuk setiap opsi transfer data, jika tidak disediakan. Default ini biasanya dilakukan di lingkungan pusat data, tetapi tidak mungkin cocok untuk lingkungan konsumen rumahan. Opsi transfer data yang disetel dengan buruk dapat mengakibatkan operasi yang terlalu panjang dan bahkan meminta batas waktu. Yang terbaik adalah proaktif dalam menguji nilai-nilai ini, dan menyetelnya berdasarkan kebutuhan aplikasi dan lingkungan Anda.

maxSingleUploadSize

Nilainya maxSingleUploadSize adalah ukuran blob maksimum dalam byte untuk satu unggahan permintaan. Nilai ini dapat diatur menggunakan metode berikut:

Jika ukuran data kurang dari atau sama dengan maxSingleUploadSize, blob diunggah dengan satu permintaan Put Blob . Jika ukuran blob lebih besar dari maxSingleUploadSize, atau jika ukuran blob tidak diketahui, blob diunggah dalam gugus menggunakan serangkaian panggilan Put Block diikuti oleh Put Block List.

Penting untuk dicatat bahwa nilai yang Anda tentukan blockSizetidak membatasi nilai yang Anda tentukan untuk maxSingleUploadSize. Argumen maxSingleUploadSize menentukan batasan ukuran terpisah untuk permintaan untuk melakukan seluruh operasi sekaligus, tanpa subtransfer. Sering kali kasus yang Anda inginkan maxSingleUploadSizesetidaknya sebesar nilai yang Anda tentukan untuk blockSize, jika tidak lebih besar. Tergantung pada ukuran transfer data, pendekatan ini bisa lebih berkinerja, karena transfer selesai dengan satu permintaan dan menghindari overhead beberapa permintaan.

Jika Anda tidak yakin nilai apa yang terbaik untuk situasi Anda, opsi yang aman adalah mengatur maxSingleUploadSize ke nilai yang sama yang digunakan untuk blockSize.

blockSize

Nilainya blockSize adalah panjang maksimum transfer dalam byte saat mengunggah blob blok dalam gugus. Nilai ini dapat diatur menggunakan metode berikut:

Nilainya blockSize adalah panjang maksimum transfer dalam byte saat mengunggah blob blok dalam gugus. Seperti disebutkan sebelumnya, nilai ini tidak membatasi maxSingleUploadSize, yang bisa lebih besar dari blockSize.

Agar data tetap bergerak secara efisien, pustaka klien mungkin tidak selalu mencapai blockSize nilai untuk setiap transfer. Tergantung pada operasi, nilai maksimum yang didukung untuk ukuran transfer dapat bervariasi. Untuk informasi selengkapnya tentang batas ukuran transfer untuk penyimpanan Blob, lihat bagan di Target skala untuk penyimpanan Blob.

maxConcurrency

Nilainya maxConcurrency adalah jumlah maksimum permintaan paralel yang dikeluarkan pada waktu tertentu sebagai bagian dari transfer paralel tunggal. Nilai ini dapat diatur menggunakan metode berikut:

Contoh kode

Pastikan Anda memiliki arahan berikut import untuk digunakan ParallelTransferOptions untuk unggahan:

import com.azure.storage.blob.models.*;

Contoh kode berikut menunjukkan cara mengatur nilai untuk ParallelTransferOptions dan menyertakan opsi sebagai bagian dari instans BlobUploadFromFileOptions . Jika Anda tidak mengunggah dari file, Anda dapat mengatur opsi serupa menggunakan BlobParallelUploadOptions. Nilai yang disediakan dalam sampel ini tidak dimaksudkan untuk menjadi rekomendasi. Untuk menyetel nilai-nilai ini dengan benar, Anda perlu mempertimbangkan kebutuhan spesifik aplikasi Anda.

ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
        .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
        .setMaxConcurrency(2)
        .setMaxSingleUploadSizeLong((long) 8 * 1024 * 1024); // 8 MiB max size for single request upload

BlobUploadFromFileOptions options = new BlobUploadFromFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);

Response<BlockBlobItem> blockBlob = blobClient.uploadFromFileWithResponse(options, null, null);

Dalam contoh ini, kami mengatur jumlah maksimum pekerja transfer paralel ke 2 menggunakan metode .setMaxConcurrency Kami juga mengatur maxSingleUploadSize ke 8 MiB menggunakan setMaxSingleUploadSizeLong metode . Jika ukuran blob lebih kecil dari 8 MiB, hanya satu permintaan yang diperlukan untuk menyelesaikan operasi unggahan. Jika ukuran blob lebih besar dari 8 MiB, blob diunggah dalam gugus dengan ukuran gugus maksimum 4 MiB, yang kami tetapkan menggunakan setBlockSizeLong metode .

Pertimbangan performa untuk unggahan

Selama pengunggahan, pustaka klien Storage membagi aliran unggahan tertentu menjadi beberapa subupload berdasarkan opsi konfigurasi yang ditentukan oleh ParallelTransferOptions. Setiap subupload memiliki panggilan khususnya sendiri ke operasi REST. Untuk objek BlobClient , operasi ini adalah Put Block. Pustaka klien Storage mengelola operasi REST ini secara paralel (tergantung opsi transfer) untuk menyelesaikan unggahan lengkap.

Catatan

Blob blok memiliki jumlah blok maksimum 50.000 blok. Ukuran maksimum blob blok Anda, kemudian, adalah 50.000 kali block_size.

Buffering selama pengunggahan

Lapisan Storage REST tidak mendukung pengambilan operasi pengunggahan REST tempat Anda meninggalkan; transfer individu selesai atau hilang. Untuk memastikan ketahanan untuk unggahan streaming, klien Storage pustaka data buffer untuk setiap panggilan REST individu sebelum memulai unggahan. Selain batasan kecepatan jaringan, perilaku buffering ini adalah alasan untuk mempertimbangkan nilai yang lebih kecil untuk blockSize, bahkan ketika mengunggah secara berurutan. Mengurangi nilai blockSize mengurangi jumlah maksimum data yang di-buffer pada setiap permintaan dan setiap percobaan ulang permintaan yang gagal. Jika Anda sering mengalami batas waktu selama transfer data dengan ukuran tertentu, mengurangi nilai blockSize mengurangi waktu buffering, dan dapat mengakibatkan performa yang lebih baik.

Penyetelan performa untuk unduhan

Menyetel opsi transfer data dengan benar adalah kunci untuk performa yang dapat diandalkan untuk unduhan. Transfer penyimpanan dipartisi ke dalam beberapa subtransfer berdasarkan nilai yang ditentukan dalam ParallelTransferOptions.

Mengatur opsi transfer untuk unduhan

Nilai berikut dapat disetel untuk unduhan berdasarkan kebutuhan aplikasi Anda:

  • blockSize: Ukuran blok maksimum untuk ditransfer untuk setiap permintaan. Anda dapat mengatur nilai ini dengan menggunakan metode setBlockSizeLong .
  • maxConcurrency: Jumlah maksimum permintaan paralel yang dikeluarkan pada waktu tertentu sebagai bagian dari transfer paralel tunggal. Anda dapat mengatur nilai ini dengan menggunakan metode setMaxConcurrency .

Contoh kode

Pastikan Anda memiliki direktif berikut import untuk digunakan ParallelTransferOptions untuk mengunduh:

import com.azure.storage.common.*;

Contoh kode berikut menunjukkan cara mengatur nilai untuk ParallelTransferOptions dan menyertakan opsi sebagai bagian dari instans BlobDownloadToFileOptions .

ParallelTransferOptions parallelTransferOptions = new ParallelTransferOptions()
        .setBlockSizeLong((long) (4 * 1024 * 1024)) // 4 MiB block size
        .setMaxConcurrency(2);

BlobDownloadToFileOptions options = new BlobDownloadToFileOptions("<localFilePath>");
options.setParallelTransferOptions(parallelTransferOptions);

blobClient.downloadToFileWithResponse(options, null, null);

Pertimbangan performa untuk unduhan

Selama pengunduhan, pustaka klien Storage membagi permintaan unduhan tertentu menjadi beberapa subdownload berdasarkan opsi konfigurasi yang ditentukan oleh ParallelTransferOptions. Setiap subdownload memiliki panggilan khususnya sendiri ke operasi REST. Bergantung pada opsi transfer, pustaka klien mengelola operasi REST ini secara paralel untuk menyelesaikan unduhan lengkap.

Langkah berikutnya