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 blockSize
tidak 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 maxSingleUploadSize
setidaknya 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
- Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Java. Lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Anda.
- Untuk memahami selengkapnya tentang faktor-faktor yang dapat memengaruhi performa untuk operasi Azure Storage, lihat Latensi di penyimpanan Blob.
- Untuk melihat daftar pertimbangan desain untuk mengoptimalkan performa aplikasi menggunakan penyimpanan Blob, lihat Daftar periksa performa dan skalabilitas untuk penyimpanan Blob.