Настройка производительности для отправки и скачивания с помощью Java
Если приложение передает данные с помощью клиентской библиотеки служба хранилища Azure для Java, существует несколько факторов, которые могут повлиять на скорость, использование памяти и даже на успех или сбой запроса. Чтобы повысить производительность и надежность передачи данных, важно упреждать настройку параметров передачи клиентской библиотеки в зависимости от среды, в которой работает ваше приложение.
В этой статье рассматриваются некоторые рекомендации по настройке параметров передачи данных. При правильной настройке клиентская библиотека может эффективно распределять данные по нескольким запросам, что может привести к повышению скорости операций, использованию памяти и стабильности сети.
Настройка производительности для отправки
Правильная настройка параметров передачи данных является ключом к надежной производительности для отправки. Передача хранилища секционируется на несколько подтрансферов на основе значений этих аргументов. Максимальный поддерживаемый размер передачи зависит от версии операции и службы, поэтому обязательно проверьте документацию, чтобы определить ограничения. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. в разделе "Целевые объекты масштабирования" для хранилища BLOB-объектов.
Настройка параметров передачи для отправки
Значения в ParallelTransferOptions можно настроить для повышения производительности операций передачи данных. Следующие значения можно настроить для отправки в зависимости от потребностей приложения:
- maxSingleUploadSize: максимальный размер большого двоичного объекта в байтах для отправки одного запроса.
- blockSize: максимальный размер блока для передачи каждого запроса.
- maxConcurrency: максимальное число параллельных запросов, выданных в любое время в рамках одной параллельной передачи.
Примечание.
Клиентские библиотеки будут использовать значения по умолчанию для каждого параметра передачи данных, если они не указаны. Эти значения по умолчанию обычно выполняются в среде центра обработки данных, но, скорее всего, не подходят для домашних сред потребителей. Плохо настроенные параметры передачи данных могут привести к чрезмерно длительным операциям и даже времени ожидания запросов. Рекомендуется проактивно протестировать эти значения и настроить их на основе потребностей приложения и среды.
maxSingleUploadSize
Это maxSingleUploadSize
значение — максимальный размер большого двоичного объекта в байтах для отправки одного запроса. Это значение можно задать с помощью следующего метода:
Если размер данных меньше или равен maxSingleUploadSize
, большой двоичный объект отправляется с одним запросом Put BLOB-объектов . Если размер большого двоичного объекта больше maxSingleUploadSize
или размер большого двоичного объекта неизвестен, большой двоичный объект отправляется в блоки с помощью ряда вызовов put Block, за которым следует put Block List.
Важно отметить, что указанное значение blockSize
не ограничивает заданное maxSingleUploadSize
значение. Аргумент maxSingleUploadSize
определяет отдельное ограничение размера для запроса на выполнение всей операции одновременно без подтрансферов. Это часто случается, что вы хотите maxSingleUploadSize
быть по крайней мере столько, сколько значения, для которого вы определяете blockSize
, если не больше. В зависимости от размера передачи данных этот подход может быть более производительным, так как передача выполняется с одним запросом и позволяет избежать затрат на несколько запросов.
Если вы не уверены, какое значение лучше всего подходит для вашей ситуации, безопасный параметр — задать maxSingleUploadSize
то же значение, которое используется для blockSize
.
blockSize
Значением blockSize
является максимальная длина передачи в байтах при отправке блочного большого двоичного объекта в блоках. Это значение можно задать с помощью следующего метода:
Значением blockSize
является максимальная длина передачи в байтах при отправке блочного большого двоичного объекта в блоках. Как упоминалось ранее, это значение не ограничиваетсяmaxSingleUploadSize
, что может быть большеblockSize
.
Для эффективного перемещения данных клиентские библиотеки могут не всегда достигать значения для каждой blockSize
передачи. В зависимости от операции максимальный поддерживаемый размер передачи может отличаться. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. на диаграмме в целевых объектах масштабирования для хранилища BLOB-объектов.
maxConcurrency
Это maxConcurrency
значение — максимальное количество параллельных запросов, выданных в любое время в рамках одной параллельной передачи. Это значение можно задать с помощью следующего метода:
Пример кода
Убедитесь, что для отправки используется ParallelTransferOptions
следующая import
директива:
import com.azure.storage.blob.models.*;
В следующем примере кода показано, как задать значения для ParallelTransferOptions и включить параметры в составе экземпляра BlobUploadFromFileOptions . Если вы не отправляете из файла, можно задать аналогичные параметры с помощью BlobParallelUploadOptions. Значения, указанные в этом примере, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
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);
В этом примере мы задали максимальное число параллельных рабочих ролей передачи 2 с помощью setMaxConcurrency
метода. Мы также устанавливаем maxSingleUploadSize
значение 8 MiB с помощью setMaxSingleUploadSizeLong
метода. Если размер большого двоичного объекта меньше 8 МиБ, для завершения операции отправки требуется только один запрос. Если размер большого двоичного объекта превышает 8 МиБ, большой двоичный объект отправляется в блоки с максимальным размером 4 МиБ, который мы устанавливаем с помощью setBlockSizeLong
метода.
Рекомендации по производительности отправки
Во время отправки клиентские библиотеки хранилища разделяют заданный поток отправки на несколько подзагрузок на основе параметров конфигурации, определенных в соответствии с ParallelTransferOptions
параметрами конфигурации. Каждая подзагрузка имеет собственный выделенный вызов операции REST. BlobClient
Для объекта эта операция называется Put Block. Клиентская библиотека хранилища управляет этими операциями REST параллельно (в зависимости от параметров передачи) для завершения полной отправки.
Примечание.
Блочные большие двоичные объекты имеют максимальное количество блоков в 50 000 блоков. Максимальный размер большого двоичного объекта блока составляет 50 000 раз block_size
.
Буферизация во время отправки
Уровень REST хранилища не поддерживает получение операции отправки REST, в которой вы оставили его. отдельные передачи либо завершены, либо потеряны. Чтобы обеспечить устойчивость потоковой передачи, клиентские библиотеки хранилища буферные данные для каждого отдельного вызова REST перед началом отправки. Помимо ограничений скорости сети, это поведение буферизации является причиной для рассмотрения меньшего значения blockSize
, даже при передаче в последовательности. Уменьшение значения blockSize
уменьшает максимальный объем данных, буферизуемых по каждому запросу, и каждое повторение неудачного запроса. Если во время передачи данных определенного размера возникают частые тайм-ауты, снижение значения blockSize
уменьшает время буферизации и может привести к повышению производительности.
Настройка производительности для загрузки
Правильная настройка параметров передачи данных является ключом к надежной производительности для загрузки. Передача хранилища секционируется на несколько подтрансферов на основе значений, определенных в ParallelTransferOptions
.
Настройка параметров передачи для скачивания
Следующие значения можно настроить для скачивания в зависимости от потребностей приложения:
blockSize
: максимальный размер блока для передачи каждого запроса. Это значение можно задать с помощью метода setBlockSizeLong .maxConcurrency
: максимальное число параллельных запросов, выданных в любое время в рамках одной параллельной передачи. Это значение можно задать с помощью метода setMaxConcurrency .
Пример кода
Убедитесь, что для скачивания используется ParallelTransferOptions
следующая import
директива:
import com.azure.storage.common.*;
В следующем примере кода показано, как задать значения для ParallelTransferOptions и включить параметры в составе экземпляра 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);
Рекомендации по повышению производительности для загрузки
Во время скачивания клиентские библиотеки хранилища разделяют заданный запрос на загрузку на несколько подзагрузок на основе параметров конфигурации, определенных в ParallelTransferOptions
соответствии с параметрами конфигурации. Каждая подзагрузка имеет собственный выделенный вызов операции REST. В зависимости от параметров передачи клиентские библиотеки управляют этими операциями REST параллельно, чтобы завершить полную загрузку.
Следующие шаги
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Java. Полный список статей руководства разработчика см. в статье о создании приложения.
- Дополнительные сведения о факторах, которые могут повлиять на производительность операций служба хранилища Azure, см. в статье "Задержка в хранилище BLOB-объектов".
- Чтобы просмотреть список рекомендаций по проектированию для оптимизации производительности приложений с помощью хранилища BLOB-объектов, см . контрольный список производительности и масштабируемости для хранилища BLOB-объектов.