Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2022-11-24 GMT+08:00

Carregamento de multiparte

Carregamento de multiparte permite carregar um único objeto como um grupo de partes separadamente. Cada parte é uma parte de dados de objetos consecutivos. Você pode fazer carregamento de partes de objetos em qualquer sequência ou carregá-las de forma independente. Uma parte pode ser recarregada após uma falha de carregamento, sem afetar outras partes. Depois que todas as partes são carregadas, o OBS mescla essas partes para criar o objeto. Geralmente, se o tamanho de um objeto atingir 100 MB, o carregamento de multiparte é recomendado. Por exemplo, você deseja carregar um objeto (500 MB) em um bucket do OBS. Nesse caso, você pode usar a ferramenta OBS Browser+ para carregar o objeto em várias partes. A ferramenta divide automaticamente o objeto em várias partes para carregamento. Como alternativa, você pode fazer uma chamada de API para carregamento de multiparte, melhorando a eficiência do carregamento e reduzindo falhas.

Carregamento de multiparte oferece os seguintes benefícios:

  • Melhoramento do taxa de transferência: Você pode fazer carregamento de partes em paralelo para melhorar a taxa de transferência.
  • Recuperação rápida de quaisquer falhas de rede: Peças de tamanho pequeno podem minimizar o impacto da falha no carregamento causada por erros de rede.
  • Suspensão conveniente e retomada do carregamento de objetos: Você pode fazer o carregamento de partes a qualquer momento. Um carregamento de multiparte não tem um período de validade. Você deve concluir ou cancelar explicitamente o carregamento de multiparte.
  • Iniciação do carregamento antes de saber o tamanho de um objeto: Você pode carregar um objeto ao criá-lo.

A API de carregamento de multiparte permite o carregamento de um objeto grande em várias partes. Você pode fazer carregamento de um novo objeto grande ou criar uma cópia de um objeto existente usando essa API.

O procedimento para carregar várias seções é o seguinte: Iniciação do carregamento (inicialização da tarefa de carregamento), carregamento de partes e conclusão do carregamento (mescla das partes carregadas). Ao receber uma solicitação de mescla de partes, o OBS mescla as partes carregadas para criar um novo objeto. O objeto pode ser acessado como outros objetos.

Você pode listar todas as tarefas de carregamento de multiparte em andamento ou obter a lista de partes carregadas de uma tarefa de carregamento de multiparte especificada. A seguir, descrevem-se as operações detalhadas.

Inicialização de uma tarefa de carregamento de multiparte

Quando você envia uma solicitação para iniciar o carregamento de multiparte, o OBS retorna uma resposta com o ID de carregamento, que é o identificador exclusivo do carregamento de multiparte. Esse ID deve ser incluído na solicitação para fazer carregamento de partes, listar partes carregadas, concluir um carregamento de multiparte ou cancelar um carregamento de multiparte.

Carregamento de uma parte

Ao carregar partes, você deve especificar o ID de carregamento e os números de parte. Você pode selecionar qualquer número de parte entre 1 e 10.000. Um número de parte identifica exclusivamente uma parte e sua localização no objeto que você está carregando. Se o número de uma parte carregada for usado para carregar uma nova parte, a parte carregada será sobrescrita. Sempre que você carrega uma parte, o OBS retorna o cabeçalho ETag na resposta. Para cada tarefa de carregamento de parte, é necessário registrar os números de parte e os valores de ETag. Esses números de parte e valores de ETag são necessários nas operações subseqüentes de conclusão da tarefa de carregamento de multiparte.

Depois que a tarefa de carregamento de multiparte é inicializada e uma ou mais partes são carregadas, você deve mesclar as partes ou cancelar a tarefa de carregamento de multiparte. Caso contrário, você tem que pagar pela taxa de armazenamento das partes carregadas. O OBS libera o armazenamento e pára de cobrar a taxa de armazenamento somente depois que as partes carregadas são mescladas ou a tarefa de carregamento de multiparte é cancelada.

Quando várias operações de carregamento simultâneas são executadas para a mesma parte de um objeto, o servidor está em conformidade com a política Last Write Win, mas a hora referida em Last Write é a hora em que os metadados da parte são criados. Para garantir a precisão dos dados, o cliente deve ser bloqueado durante o carregamento simultâneo para a mesma parte de um objeto. O carregamento simultâneo de diferentes partes de um objeto não requer que o cliente seja bloqueado.

Cópia de uma parte

Depois de criar um trabalho de carregamento de multiparte, você pode especificar os ID de carregamento e partes de carregamento para a tarefa de carregamento especificada. Você também pode chamar a API para cópia de partes para adicionar partes. Uma parte de um objeto ou todo o objeto pode ser copiado como uma parte.

Não é possível determinar se uma solicitação foi executada com sucesso usando apenas status_code no cabeçalho retornado pelo HTTP. Se 200 em status_code for retornado, o servidor recebeu a solicitação e começa a processar a solicitação. O corpo na resposta mostra se a solicitação foi executada com sucesso. A solicitação é executada com sucesso somente quando o corpo contém Etag. Caso contrário, o pedido não será executado.

Se você copiar o objeto de origem como uma parte chamada part1 e outra parte1 já existir antes da operação de cópia, a parte1 original será substituída pela nova após a operação de cópia. Depois que a cópia for bem-sucedida, somente a nova parte1 será exibida. Os dados da antiga parte 1 serão apagados. Portanto, assegure-se de que a parte de destino não exista ou não tenha valor ao copiar uma parte. Caso contrário, os dados podem ser apagados por engano. O objeto de origem não muda durante a cópia.

Mescla de componentes e cancelamento de uma tarefa de carregamento de multiparte

Ao mesclar partes, o OBS cria um objeto ao padronizar múltiplas partes em ordem crescente. Se algum metadado de objeto for fornecido na inicialização de uma tarefa de carregamento de parte, o OBS associará os metadados ao objeto. Depois que o carregamento de multiparte for concluído, as partes não existirão mais. Uma solicitação de mescla de partes deve conter o ID de carregamento, números de parte e uma lista de valores ETag correspondentes. As respostas do OBS incluem o ETag que identifica exclusivamente os dados do objeto composto. O ETag não é o valor de hash MD5 dos dados do objeto. Você pode cancelar uma tarefa de carregamento de multiparte. Depois que uma tarefa de carregamento de multiparte é cancelada, o ID de carregamento não pode ser usado para carregar qualquer parte. Em seguida, o OBS libera o armazenamento de todas as partes carregadas. Se você parar um carregamento de multiparte em andamento, o carregamento ainda será concluído (o resultado pode ser bem-sucedido ou fracassado). Para liberar a capacidade de armazenamento ocupada por todos os componentes carregados, cancele o carregamento de multiparte após a conclusão de toda a tarefa.

Se 10 partes forem carregadas, mas apenas nove forem selecionadas para mescla, as partes que não forem mescladas serão automaticamente excluídas pelo sistema. As partes que não são mescladas não podem ser restauradas após serem excluídas. Antes de mesclar as partes, adote a API usada para listar as partes que foram carregadas para verificar todas as partes para garantir que nenhuma parte seja perdida.

Listagem de partes carregadas

Você pode listar as partes de uma tarefa de carregamento de multiparte especificada ou as partes de todas as tarefas de carregamento de multiparte em andamento. As informações sobre as partes carregadas em um carregamento de multiparte específico serão retornadas para uma solicitação de lista de partes carregadas. Para cada solicitação para listar partes carregadas, o OBS retorna informações sobre partes carregadas no carregamento de multiparte específico. Informações sobre um máximo de 1000 partes podem ser devolvidas. Se mais de 1000 partes forem carregadas em um carregamento de multiparte, você precisará enviar várias solicitações para listar todas as partes carregadas. A lista de partes carregadas não inclui partes mescladas.

Uma lista devolvida só pode ser usada para verificação. Após a conclusão de um carregamento de multiparte, o resultado na lista não é mais válido. No entanto, quando os números de parte e os valores de ETag retornados pelo OBS são carregados, a lista de números de parte especificados pelo usuário será reservada.

Listagem de tarefas de carregamento de multiparte

Você pode obter a lista de tarefas de carregamento de multiparte inicializadas listando as tarefas de carregamento de multiparte no bucket. Tarefas de carregamento de multiparte inicializadas referem-se às tarefas de carregamento de multiparte que não são mescladas ou canceladas após a inicialização. Um máximo de 1000 tarefas de carregamento de multiparte podem ser retornadas para cada solicitação. Se o número de tarefas de carregamento de multiparte em andamento exceder 1000, você precisará enviar mais solicitações para consultar as tarefas restantes.

Tabela 1 lista as restrições na listagem de carregamentos de multiparte

Tabela 1 Restrições na listagem de carregamentos de multiparte

Item

Restrição

Tamanho do objeto

Até 48,8 TB

Número máximo de partes para cada tarefa de carregamento

10.000

Número da parte

1–10.000 (incluído)

Tamanho da parte

O tamanho da parte está entre 5 MB e 5 GB. O tamanho da última parte é entre 0 bytes a 5 GB.

Número máximo de partes carregadas retornadas em resposta à solicitação de lista de partes carregadas.

1000

Número máximo de tarefas de carregamento de multiparte inicializadas retornadas em resposta à solicitação de lista de tarefas de várias partes inicializadas.

1000

Operações e permissões de carregamento de multiparte

Você pode realizar o carregamento de multiparte somente após receber a permissão. Você pode usar ACL, políticas de bucket ou políticas de usuário para conceder aos usuários a permissão. A tabela a seguir lista as operações de carregamento de multiparte e as permissões necessárias que podem ser concedidas por ACL, políticas de bucket ou políticas de usuário.

Operação

Permissão necessária

Iniciação de uma tarefa de carregamento de multiparte

Para executar esta operação, você precisa ter a permissão PutObject.

O proprietário de um bucket pode permitir que os fiduciários executem a operação PutObject.

Carregamento de partes

Para executar esta operação, você precisa ter a permissão PutObject.

Somente o iniciador de um carregamento de multiparte pode carregar partes. O proprietário do bucket deve conceder ao iniciador de carregamento de multiparte a permissão PutObject para que o iniciador possa carregar partes do objeto.

Cópia de partes

Para executar esta operação, você precisa ter a permissão PutObject, bem como a permissão GetObject no objeto a ser copiado.

Somente o iniciador de um carregamento de multiparte pode copiar partes. O proprietário do bucket deve conceder ao iniciador de carregamento de multiparte a permissão PutObject para que o iniciador possa carregar partes do objeto.

Mescla de partes

Para executar esta operação, você precisa ter a permissão PutObject.

Somente o iniciador de um carregamento de multiparte pode mesclar partes. O proprietário do bucket deve conceder ao iniciador de carregamento de multiparte a permissão PutObject para que o iniciador possa concluir o carregamento de multiparte.

Cancelamento de uma tarefa de carregamento de multiparte

Para executar esta operação, você precisa ter a permissão AbortMultipartUpload.

Por padrão, somente o proprietário do bucket e o iniciador de carregamento de multiparte têm essa permissão. Além da configuração padrão, o proprietário do bucket pode permitir que os fiduciários executem essa operação. O proprietário do bucket também pode negar quaisquer fiduciários que estejam executando essa operação.

Listagem de partes carregadas

Para executar esta operação, você precisa ter a permissão ListMultipartUploadParts.

Por padrão, o proprietário do bucket pode listar as partes carregadas de qualquer carregamento de multiparte no bucket. O iniciador de carregamento de multiparte pode listar as partes carregadas de um carregamento de multiparte específico.

Além da configuração padrão, o proprietário do bucket pode permitir que os fiduciários executem essa operação. O proprietário do bucket também pode negar quaisquer fiduciários que estejam executando essa operação.

Listagem de tarefas de carregamento de multiparte

Para listar tarefas de carregamento de multiparte no bucket, você precisa ter a permissão ListBucketMultipartUploads.

Além da configuração padrão, o proprietário do bucket pode permitir que os fiduciários executem essa operação.

As API REST aplicáveis ao carregamento de multiparte

As seções a seguir na Referência de API de Object Storage Service descrevem as API REST relevantes para o carregamento de multiparte.

  • ListBucketMultipartUpload
  • InitiateMultipartUpload
  • UploadPart
  • UploadPart-Copy
  • ListParts
  • CompleteMultipartUpload
  • AbortMultipartUpload