Armazenando objetos grandes

O IBM Cloud® Object Storage pode suportar objetos únicos tão grandes quanto 10 TB ao usar uploads de múltiplas partes.

Os objetos grandes também podem ser transferidos por upload usando o console com o Aspera high-speed transfer ativado. Na maioria dos cenários, o Aspera high-speed transfer resulta em um desempenho significativamente maior para transferir dados, especialmente em longas distâncias ou sob condições de rede instável.

Fazendo upload de objetos em múltiplas partes

As operações de upload de múltiplas partes são recomendadas para gravar objetos maiores no Object Storage. Um upload de um único objeto é executado como um conjunto de partes e essas partes podem ser transferidas por upload independentemente em qualquer ordem e em paralelo. Após a conclusão do upload, o Object Storage então apresenta todas as partes como um único objeto. Isso fornece muitos benefícios: as interrupções de rede não fazem com que grandes uploads falhem, os uploads podem ser pausados e reiniciados ao longo do tempo e os objetos podem ser transferidos por upload conforme eles estão sendo criados.

Os uploads de múltiplas partes estão disponíveis somente para objetos maiores que 5 MB. Para objetos menores que 50 GB, um tamanho de parte de 20 MB a 100 MB é recomendado para desempenho ideal. Para objetos maiores, o tamanho da parte pode ser aumentado sem impacto significativo no desempenho. Os uploads de múltiplas partes são limitados a não mais que 10.000 partes de 5 GB cada até um tamanho máximo de objeto de 10 TB.

Devido à complexidade envolvida no gerenciamento e otimização de uploads feitos em paralelo, muitos desenvolvedores usam bibliotecas que fornecem suporte de upload de múltiplas partes.

A maioria das ferramentas, como as CLIs ou o IBM Cloud Console, assim como as bibliotecas e os SDKs mais compatíveis, transferirá automaticamente os objetos em uploads de múltiplas partes.

Usando a API de REST ou os SDKs

Os uploads de múltiplas partes incompletos persistem até que o objeto seja excluído ou que o upload de múltiplas partes seja interrompido. Se um upload de múltiplas partes incompleto não for interrompido, o upload parcial continuará a usar recursos. As interfaces devem ser projetadas tendo esse ponto em mente e limpar os uploads de múltiplas partes incompletos.

Há três fases para fazer upload de um objeto em múltiplas partes:

  1. O upload é iniciado e um UploadId é criado.
  2. As partes individuais são transferidas por upload especificando seus números de partes sequenciais e o UploadId para o objeto.
  3. Quando todas as partes concluem o upload, o upload é concluído enviando uma solicitação com o UploadId e um bloco XML que lista cada número de parte e seu respectivo valor Etag.

Para obter mais informações sobre terminais, consulte Terminais e locais de armazenamento

Iniciar um upload de múltiplas partes

Um POST emitido para um objeto com o parâmetro de consulta upload cria um novo valor UploadId, que é, então, referenciado por cada parte do objeto que está sendo transferido por upload.

Sintaxe

POST https://{endpoint}/{bucket-name}/{object-name}?uploads= # path style
POST https://{bucket-name}.{endpoint}/{object-name}?uploads= # virtual host style

Exemplo de solicitação

POST /some-bucket/multipart-object-123?uploads= HTTP/1.1
Authorization: Bearer {token}
Host: s3.us.cloud-object-storage.appdomain.cloud

Exemplo de resposta

HTTP/1.1 200 OK
Date: Fri, 03 Mar 2017 20:34:12 GMT
X-Clv-Request-Id: 258fdd5a-f9be-40f0-990f-5f4225e0c8e5
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
Content-Type: application/xml
Content-Length: 276
<InitiateMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Bucket>some-bucket</Bucket>
  <Key>multipart-object-123</Key>
  <UploadId>0000015a-95e1-4326-654e-a1b57887784f</UploadId>
</InitiateMultipartUploadResult>

Fazer upload de uma parte

Uma solicitação PUT que é emitida para um objeto com parâmetros de consulta partNumber e uploadId fará upload de uma parte de um objeto. As partes podem ser transferidas por upload em série ou em paralelo, mas devem ser numeradas em ordem.

Sintaxe

PUT https://{endpoint}/{bucket-name}/{object-name}?partNumber={sequential-integer}&uploadId={uploadId}= # path style
PUT https://{bucket-name}.{endpoint}/{object-name}?partNumber={sequential-integer}&uploadId={uploadId}= # virtual host style

Exemplo de solicitação

PUT /some-bucket/multipart-object-123?partNumber=1&uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Content-Type: application/pdf
Host: s3.us.cloud-object-storage.appdomain.cloud
Content-Length: 13374550

Exemplo de resposta

HTTP/1.1 200 OK
Date: Sat, 18 Mar 2017 03:56:41 GMT
X-Clv-Request-Id: 17ba921d-1c27-4f31-8396-2e6588be5c6d
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
ETag: "7417ca8d45a71b692168f0419c17fe2f"
Content-Length: 0

Concluir um upload de múltiplas partes

Uma solicitação POST que é emitida para um objeto com o parâmetro de consulta uploadId e o bloco XML apropriado no corpo concluirá um upload de múltiplas partes.

Sintaxe

POST https://{endpoint}/{bucket-name}/{object-name}?uploadId={uploadId}= # path style
POST https://{bucket-name}.{endpoint}/{object-name}?uploadId={uploadId}= # virtual host style
<CompleteMultipartUpload>
  <Part>
    <PartNumber>{sequential part number}</PartNumber>
    <ETag>{ETag value from part upload response header}</ETag>
  </Part>
</CompleteMultipartUpload>

Exemplo de solicitação

POST /some-bucket/multipart-object-123?uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Content-Type: text/plain; charset=utf-8
Host: s3.us.cloud-object-storage.appdomain.cloud
Content-Length: 257
<CompleteMultipartUpload>
  <Part>
    <PartNumber>1</PartNumber>
    <ETag>"7417ca8d45a71b692168f0419c17fe2f"</ETag>
  </Part>
  <Part>
    <PartNumber>2</PartNumber>
    <ETag>"7417ca8d45a71b692168f0419c17fe2f"</ETag>
  </Part>
</CompleteMultipartUpload>

Exemplo de resposta

HTTP/1.1 200 OK
Date: Fri, 03 Mar 2017 19:18:44 GMT
X-Clv-Request-Id: c8be10e7-94c4-4c03-9960-6f242b42424d
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5
ETag: "765ba3df36cf24e49f67fc6f689dfc6e-2"
Content-Type: application/xml
Content-Length: 364
<CompleteMultipartUploadResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Location>http://s3.us.cloud-object-storage.appdomain.cloud/zopse/multipart-object-123</Location>
  <Bucket>some-bucket</Bucket>
  <Key>multipart-object-123</Key>
  <ETag>"765ba3df36cf24e49f67fc6f689dfc6e-2"</ETag>
</CompleteMultipartUploadResult>

Interromper uploads de múltiplas partes incompletos

Uma solicitação DELETE emitida para um objeto com o parâmetro de consulta uploadId exclui todas as partes não concluídas de um upload de múltiplas partes.

Sintaxe

DELETE https://{endpoint}/{bucket-name}/{object-name}?uploadId={uploadId}= # path style
DELETE https://{bucket-name}.{endpoint}/{object-name}?uploadId={uploadId}= # virtual host style

Exemplo de solicitação

DELETE /some-bucket/multipart-object-123?uploadId=0000015a-df89-51d0-2790-dee1ac994053 HTTP/1.1
Authorization: Bearer {token}
Host: s3.us.cloud-object-storage.appdomain.cloud

Exemplo de resposta

HTTP/1.1 204 No Content
Date: Thu, 16 Mar 2017 22:07:48 GMT
X-Clv-Request-Id: 06d67542-6a3f-4616-be25-fc4dbdf242ad
Accept-Ranges: bytes
Server: Cleversafe/3.9.1.114
X-Clv-S3-Version: 2.5

Usando o S3cmd (CLI)

S3cmd é uma ferramenta de linha de comandos e cliente livres do Linux e Mac para fazer upload, recuperar e gerenciar dados em provedores de serviço de armazenamento em nuvem que usam o protocolo S3. Ele é projetado para usuários avançados que estão familiarizados com os programas de linha de comandos e são ideais para scripts em lote e backup automatizado. O S3cmd é gravado em Python. É um projeto de software livre disponível sob o GNU Public License v2 (GPLv2) e é grátis para uso comercial e privado.

S3cmd requer Python 2.6 ou mais recente e é compatível com Python 3. A maneira mais fácil de instalar o S3cmd é com o Python Package Index (PyPi).

pip install s3cmd

Depois que o pacote tiver sido instalado, capture o arquivo de configuração de exemplo do IBM Cloud® Object Storage aqui e atualize-o com suas credenciais do Cloud Object Storage (S3):

$ wget -O $HOME/.s3cfg https://gist.githubusercontent.com/greyhoundforty/676814921b8f4367fba7604e622d10f3/raw/422abaeb70f1c17cd5308745c0e446b047c123e0/s3cfg

As quatro linhas que precisam ser atualizadas são

  • access_key
  • secret_key
  • host_base
  • host_bucket {: S3cmd} Isso é o mesmo se você usar o arquivo de exemplo ou aquele gerado executando: s3cmd --configure.

Assim que essas linhas tiverem sido atualizadas com os detalhes do COS do portal do Cliente, será possível testar a conexão emitindo o comando s3cmd ls, que listará todos os depósitos na conta.

$ s3cmd ls
2017-02-03 14:52  s3://backuptest
2017-02-06 15:04  s3://coldbackups
2017-02-03 21:23  s3://largebackup
2017-02-07 17:44  s3://winbackup

A lista completa de opções e comandos juntamente com as informações básicas de uso estão disponíveis no site s3tools.

Uploads de múltiplas partes com S3cmd

Um comando put executará automaticamente um upload de múltiplas partes ao tentar fazer upload de um arquivo maior que o limite especificado.

s3cmd put FILE [FILE...] s3://BUCKET[/PREFIX]

O limite é determinado pela opção --multipart-chunk-size-mb:

--multipart-chunk-size-mb=SIZE
    Size of each chunk of a multipart upload. Files bigger
    than SIZE are automatically uploaded as multithreaded-
    multipart, smaller files are uploaded using the
    traditional method. SIZE is in megabytes, default
    chunk size is 15MB, minimum allowed chunk size is 5MB,
    maximum is 5GB.

Exemplo:

s3cmd put bigfile.pdf s3://backuptest/bigfile.pdf --multipart-chunk-size-mb=5

Saída:

upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf'  [part 1 of 4, 5MB] [1 of 1]
 5242880 of 5242880   100% in    2s  1731.92 kB/s  done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf'  [part 2 of 4, 5MB] [1 of 1]
 5242880 of 5242880   100% in    2s  2001.14 kB/s  done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf'  [part 3 of 4, 5MB] [1 of 1]
 5242880 of 5242880   100% in    2s  2000.28 kB/s  done
upload: 'bigfile.pdf' -> 's3://backuptest/bigfile.pdf'  [part 4 of 4, 4MB] [1 of 1]
 4973645 of 4973645   100% in    2s  1823.51 kB/s  done

Usando o SDK Java

O SDK Java fornece duas maneiras de executar uploads de objetos grandes:

Usando o SDK Python

O SDK Python fornece duas maneiras de executar uploads de objetos grandes:

Usando o SDK Node.js

O SDK Node.js fornece uma única maneira de executar uploads de objetos grandes: