Настройка производительности для отправки и скачивания с помощью Go
Когда приложение передает данные с помощью клиентской библиотеки служба хранилища Azure для Go, существует несколько факторов, которые могут повлиять на скорость, использование памяти и даже на успех или сбой запроса. Чтобы повысить производительность и надежность передачи данных, важно упреждать настройку параметров передачи клиентской библиотеки в зависимости от среды, в которой работает ваше приложение.
В этой статье рассматриваются некоторые рекомендации по настройке параметров передачи данных. При правильной настройке клиентская библиотека может эффективно распределять данные по нескольким запросам, что может привести к повышению скорости операций, использованию памяти и стабильности сети.
Настройка производительности для отправки
Правильная настройка параметров передачи данных является ключом к надежной производительности для отправки. Передача хранилища секционируется на несколько подтрансферов на основе значений этих свойств. Максимальный поддерживаемый размер передачи зависит от версии операции и службы, поэтому обязательно проверьте документацию, чтобы определить ограничения. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. в разделе "Целевые объекты масштабирования" для хранилища BLOB-объектов.
Настройка параметров передачи для отправки
Если общий размер большого двоичного объекта меньше или равен 256 МБ, данные передаются с одним запросом Put BLOB-объектов . Если размер большого двоичного объекта превышает 256 МБ или размер большого двоичного объекта неизвестен, большой двоичный объект отправляется в блоки с помощью ряда вызовов Put Block, за которым следует put Block List.
Следующие свойства можно настроить и настроить на основе потребностей приложения:
BlockSize
: максимальная длина передачи в байтах при отправке блочного большого двоичного объекта в блоках. Значение по умолчанию — 4 МБ.Concurrency
: максимальное количество подтрансферов, которые можно использовать параллельно. Значение по умолчанию — 5.
Эти параметры конфигурации доступны при отправке с помощью следующих методов:
Метод Upload не поддерживает эти параметры и передает данные в одном запросе.
Примечание.
Клиентские библиотеки используют значения по умолчанию для каждого параметра передачи данных, если они не указаны. Эти значения по умолчанию обычно выполняются в среде центра обработки данных, но, скорее всего, не подходят для домашних сред потребителей. Плохо настроенные параметры передачи данных могут привести к чрезмерно длительным операциям и даже времени ожидания запросов. Рекомендуется проактивно протестировать эти значения и настроить их на основе потребностей приложения и среды.
BlockSize
Аргументом BlockSize
является максимальная длина передачи в байтах при отправке блочного большого двоичного объекта в блоках.
Для эффективного перемещения данных клиентские библиотеки могут не всегда достигать значения для каждой BlockSize
передачи. В зависимости от операции максимальный поддерживаемый размер передачи может отличаться. Дополнительные сведения об ограничениях размера передачи для хранилища BLOB-объектов см. на диаграмме в целевых объектах масштабирования для хранилища BLOB-объектов.
Пример кода
В следующем примере кода показано, как определить значения для экземпляра UploadFileOptions и передать эти параметры конфигурации в качестве параметра в UploadFile.
Значения, указанные в этом примере, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
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)
}
В этом примере мы задали число параллельных рабочих ролей передачи 2, используя Concurrency
поле. Эта конфигурация открывает до двух подключений одновременно, что позволяет выполнять отправку параллельно. Если размер большого двоичного объекта превышает 256 МБ, большой двоичный объект отправляется в блоки с максимальным размером 8 МиБ, как указано Block_Size
в поле.
Рекомендации по производительности отправки
Во время отправки клиентские библиотеки хранилища разделяют заданный поток отправки на несколько подзагрузок на основе параметров конфигурации, определенных во время построения клиента. Каждая подзагрузка имеет собственный выделенный вызов операции REST. Клиентская библиотека хранилища управляет этими операциями REST параллельно (в зависимости от параметров передачи) для завершения полной отправки.
Вы можете узнать, как клиентская библиотека обрабатывает буферизацию в следующих разделах.
Примечание.
Блочные большие двоичные объекты имеют максимальное количество блоков в 50 000 блоков. Максимальный размер большого двоичного объекта блока составляет 50 000 раз Block_Size
.
Буферизация во время отправки
Уровень REST хранилища не поддерживает получение операции отправки REST, в которой вы оставили его. отдельные передачи либо завершены, либо потеряны. Чтобы обеспечить устойчивость потоковой передачи, клиентские библиотеки хранилища буферные данные для каждого отдельного вызова REST перед началом отправки. Помимо ограничений скорости сети, это поведение буферизации является причиной для рассмотрения меньшего значения BlockSize
, даже при передаче в последовательности. Уменьшение значения BlockSize
уменьшает максимальный объем данных, буферизуемых по каждому запросу, и каждое повторение неудачного запроса. Если во время передачи данных определенного размера возникают частые тайм-ауты, снижение значения BlockSize
уменьшает время буферизации и может привести к повышению производительности.
Настройка производительности для загрузки
Правильная настройка параметров передачи данных является ключом к надежной производительности для загрузки. Передача хранилища секционируется на несколько подтрансферов на основе значений этих свойств.
Настройка параметров передачи для скачивания
Следующие свойства можно настроить на основе потребностей приложения:
BlockSize
: максимальный размер блока, используемый для скачивания большого двоичного объекта. Значение по умолчанию — 4 МБ.Concurrency
: максимальное количество подтрансферов, которые можно использовать параллельно. Значение по умолчанию — 5.
Эти параметры доступны при скачивании с помощью следующих методов:
Метод DownloadStream не поддерживает эти параметры и загружает данные в одном запросе.
Пример кода
В следующем примере кода показано, как определить значения для экземпляра DownloadFileOptions и передать эти параметры конфигурации в качестве параметра в DownloadFile.
Значения, указанные в этом примере, не предназначены для рекомендации. Чтобы правильно настроить эти значения, необходимо учитывать конкретные потребности приложения.
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)
}
Рекомендации по повышению производительности для загрузки
Во время скачивания клиентские библиотеки хранилища разделяют заданный запрос загрузки на несколько подзагрузок на основе параметров конфигурации, определенных во время построения клиента. Каждая подзагрузка имеет собственный выделенный вызов операции REST. В зависимости от параметров передачи клиентские библиотеки управляют этими операциями REST параллельно, чтобы завершить полную загрузку.
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Go. Полный список статей руководства разработчика см. в статье о создании приложения.
- Дополнительные сведения о факторах, которые могут повлиять на производительность операций служба хранилища Azure, см. в статье "Задержка в хранилище BLOB-объектов".
- Чтобы просмотреть список рекомендаций по проектированию для оптимизации производительности приложений с помощью хранилища BLOB-объектов, см . контрольный список производительности и масштабируемости для хранилища BLOB-объектов.