Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando uma aplicação transfere dados usando a biblioteca cliente Armazenamento do Azure para JavaScript, existem vários fatores que podem afetar a velocidade, o uso de memória e até o sucesso ou fracasso do pedido. Para maximizar o desempenho e a confiabilidade das transferências de dados, é importante ser proativo na configuração das opções de transferência da biblioteca do cliente com base no ambiente em que seu aplicativo é executado.
Este artigo apresenta várias considerações para ajustar as opções de transferência de dados. Quando ajustada corretamente, a biblioteca do cliente pode distribuir dados de forma eficiente entre várias solicitações, o que pode resultar em maior velocidade de operação, uso de memória e estabilidade de rede.
Ajuste de desempenho para uploads
Ajustar corretamente as opções de transferência de dados é a chave para um desempenho confiável para uploads. As transferências de armazenamento são particionadas em várias subtransferências com base nos valores desses argumentos. O tamanho máximo de transferência suportado varia de acordo com a operação e a versão do serviço, portanto, certifique-se de verificar a documentação para determinar os limites. Para obter mais informações sobre limites de tamanho de transferência para armazenamento de blobs, consulte Alvos de escalabilidade para armazenamento de blobs.
Definir opções de transferência para carregamentos
Pode configurar propriedades no BlockBlobParallelUploadOptions para melhorar o desempenho das operações de transferência de dados. A tabela seguinte lista as propriedades que pode configurar, juntamente com uma descrição:
| Propriedade | Descrição |
|---|---|
blockSize |
O tamanho máximo do bloco a transferir para cada pedido como parte de uma operação de upload. Para saber mais, veja blockSize. |
maxSingleShotSize |
Se o tamanho dos dados for menor ou igual a esse valor, são carregados num único put em vez de divididos em blocos. Se os dados forem carregados em uma única captura, o tamanho do bloco será ignorado. O valor padrão é 256 MB. Se personalizar esta propriedade, terá de usar um valor igual ou inferior a 256 MB. Para saber mais, consulte maxSingleShotSize. |
concurrency |
O número máximo de pedidos paralelos emitidos em qualquer momento como parte de uma única transferência paralela. |
Nota
As bibliotecas de cliente usarão padrões para cada opção de transferência de dados, se não forem fornecidas. Esses padrões geralmente têm bom desempenho em centros de dados, mas é provável que não sejam adequados para ambientes domésticos. Opções de transferência de dados mal ajustadas podem resultar em operações excessivamente longas e até mesmo tempos limite de solicitação. É melhor ser proativo ao testar esses valores e ajustá-los com base nas necessidades do seu aplicativo e ambiente.
maxSingleShotSize
O valor maxSingleShotSize é o tamanho máximo do blob, em bytes, para um carregamento num único pedido.
Se o tamanho dos dados for menor ou igual a maxSingleShotSize, o blob é carregado com um único pedido Put Blob . Se o tamanho do blob for maior que maxSingleShotSize, ou se o tamanho do blob for desconhecido, o blob é carregado em blocos usando uma série de chamadas Put Block seguidas por Put Block List.
É importante observar que o valor especificado para blockSizenão limita o valor definido para maxSingleShotSize. O maxSingleShotSize argumento define uma limitação de tamanho separada para uma solicitação para executar toda a operação de uma só vez, sem subtransferências. Muitas vezes, você quer maxSingleShotSize ser pelo menosse não maior. Dependendo do tamanho da transferência de dados, essa abordagem pode ser mais eficiente, pois a transferência é concluída com uma única solicitação e evita a sobrecarga de várias solicitações.
Se você não tiver certeza de qual valor é melhor para sua situação, uma opção segura é definir maxSingleShotSize para o mesmo valor usado para blockSize.
blockSize
O valor de blockSize é o tamanho máximo de uma transferência, em bytes, ao enviar um blob de blocos por partes.
Como mencionado anteriormente, este valor não limita maxSingleShotSize, que pode ser maior do que blockSize.
Para manter os dados em circulação de forma eficiente, as bibliotecas de cliente podem nem sempre atingir, em todas as transferências, o valor blockSize. Dependendo da operação, o valor máximo suportado para o tamanho da transferência pode variar. Para obter mais informações sobre limites de tamanho de transferência para armazenamento Blob, consulte o gráfico em Metas de escala para o armazenamento Blob.
Exemplo de código
O exemplo de código seguinte mostra como definir valores para BlockBlobParallelUploadOptions e incluir as opções como parte de uma chamada de método de upload. Os valores fornecidos nas amostras não têm a intenção de ser uma recomendação. Para ajustar corretamente esses valores, você precisa considerar as necessidades específicas do seu aplicativo.
// Specify data transfer options
const uploadOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
}
// Create blob client from container client
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
// Upload blob with transfer options
await blockBlobClient.uploadFile(localFilePath, uploadOptions);
Neste exemplo, definimos o número máximo de trabalhadores de transferência paralela para 2 usando a concurrency propriedade. Também definimos maxSingleShotSize para 8 MiB. Se o tamanho do blob for menor que 8 MiB, apenas uma única solicitação será necessária para concluir a operação de upload. Se o tamanho do blob for superior a 8 MiB, o blob é carregado em blocos com um tamanho máximo de bloco de 4 MiB, que definimos na blockSize propriedade.
Considerações de desempenho para uploads
Durante um upload, as bibliotecas clientes de Storage dividem um dado fluxo de upload em múltiplos subuploads com base nas opções de configuração definidas por BlockBlobParallelUploadOptions. Cada subupload tem sua própria chamada dedicada para a operação REST. Neste exemplo, a operação é Put Block. A biblioteca do cliente de armazenamento gerencia essas operações REST em paralelo (dependendo das opções de transferência) para concluir o carregamento completo.
Nota
Os blobs de bloco têm uma contagem máxima de blocos de 50.000 blocos. O tamanho máximo do blob de bloco, então, é de 50.000 vezes block_size.
Armazenamento em buffer durante carregamentos
A camada REST de armazenamento não suporta retomar uma operação de upload REST de onde você parou; as transferências individuais são concluídas ou perdidas. Para garantir a resiliência nos carregamentos em fluxo, as bibliotecas de clientes de armazenamento armazenam temporariamente os dados para cada chamada REST individual antes de começar o carregamento. Além das limitações de velocidade da rede, esse comportamento de buffer é um motivo para considerar um valor menor para blockSize, mesmo ao carregar em sequência. Diminuir o valor de blockSize diminui a quantidade máxima de dados armazenados em buffer em cada solicitação e cada nova tentativa de uma solicitação com falha. Se estiver a experienciar timeouts frequentes durante transferências de dados de determinado tamanho, reduzir o valor de blockSize reduz o tempo de buffering e pode resultar em melhor desempenho.
Ajuste de desempenho para downloads
A afinação das opções de transferência de dados para downloads está disponível apenas quando se utiliza o método downloadToBuffer . Este método descarrega um blob em paralelo a um buffer baseado nos valores definidos em BlobDownloadToBufferOptions. Outros métodos de download não suportam ajustar opções de transferência de dados.
Definir opções de transferência para downloads
Os seguintes valores podem ser ajustados para as transferências ao utilizar o método downloadToBuffer:
- Tamanho do bloco: O tamanho máximo do bloco a transferir para cada pedido.
- Concorrência: O número máximo de pedidos paralelos emitidos em qualquer momento como parte de uma única transferência paralela.
Considerações sobre o desempenho de downloads
Durante um download usando downloadToBuffer, as bibliotecas cliente de Armazenamento dividem um pedido de download em múltiplos subdownloads com base nas opções de configuração definidas por BlobDownloadToBufferOptions. Cada subdownload tem sua própria chamada dedicada para a operação REST. Dependendo das opções de transferência, as bibliotecas de cliente gerenciam essas operações REST em paralelo para concluir o download completo.
Exemplo de código
O exemplo de código seguinte mostra como definir valores para BlobDownloadToBufferOptions e incluir as opções como parte de uma chamada de método downloadToBuffer . Os valores fornecidos nas amostras não têm a intenção de ser uma recomendação. Para ajustar corretamente esses valores, você precisa considerar as necessidades específicas do seu aplicativo.
// Specify data transfer options
const downloadToBufferOptions = {
blockSize: 4 * 1024 * 1024, // 4 MiB max block size
concurrency: 2, // maximum number of parallel transfer workers
}
// Download data to buffer
const result = await client.downloadToBuffer(offset, count, downloadToBufferOptions);
Validação de transferência com CRC64-NVME
Além da afinação de desempenho com BlockBlobParallelUploadOptions e BlobDownloadToBufferOptions, pode configurar validação de transferência para verificar a integridade dos dados para uploads e downloads. Embora CRC64-NVME seja geralmente eficiente para calcular, permitir a validação da transferência pode ter implicações de desempenho que devem ser consideradas juntamente com outras decisões de afinação.
A validação de transferência com CRC64-NVME proporciona integridade de dados ao nível do cliente para Armazenamento de Blobs do Azure, permitindo-lhe verificar se os dados enviados pela sua aplicação são os mesmos armazenados e lidos de Azure. Quando ativado, o Blob SDK calcula e valida somas de verificação CRC64-NVME durante as operações de upload e download, ao passo que o serviço calcula e valida, de forma independente, somas de verificação CRC64-NVME para os dados que recebe e devolve. A validação é realizada em cada pedido e em todo o fluxo de dados, garantindo que todo o blob é verificado mesmo quando os dados são transferidos em partições, como carregamentos de blocos ou leituras à distância. Consulte o Formato de Corpo Estruturado para mais detalhes.
As opções de validação de transferência podem ser definidas ao nível do cliente usando o BlobClientConfig, que aplica opções de validação a todos os métodos chamados a partir de uma instância BlobClient . Em alternativa, pode sobrescrever opções de validação de transferência ao nível da operação através de opções, como BlobUploadOptions ou BlobDownloadOptions.
const blobServiceClient = new BlobServiceClient(
`https://${account}.blob.core.windows.net`,
new DefaultAzureCredential(),
{
uploadContentChecksumAlgorithm: "StorageCrc64",
downloadContentChecksumAlgorithm: "StorageCrc64",
}
);
Conteúdo relacionado
- Para entender mais sobre os fatores que podem influenciar o desempenho das operações de Armazenamento do Azure, consulte Latência no armazenamento de Blob.
- Para ver uma lista de considerações de design para otimizar o desempenho de aplicativos que usam armazenamento de Blob, consulte Lista de verificação de desempenho e escalabilidade para armazenamento de Blob.