Todos os artigos
108 artigos · atualizado semanalmente Veja nossas Ferramentas
Todos os artigos
Tutoriais

Object Storage: o que é, como funciona e quando usar

Entenda como o object storage funciona, quando usar e os erros comuns ao guardar arquivos na nuvem sem estourar a fatura.

Object Storage: o que é, como funciona e quando usar
COVER · Tutoriais

Você subiu a aplicação para a nuvem, o tráfego cresceu, e de repente o disco da máquina virtual está cheio de uploads de usuários: fotos de perfil, PDFs, vídeos. A solução óbvia parece ser "aumentar o disco". Só que esse caminho cobra caro: o disco vive amarrado a uma única instância, escalar significa parar a máquina, e fazer backup de milhões de arquivinhos vira um pesadelo. É exatamente esse o problema que o object storage resolve — e por isso virou o jeito padrão de guardar arquivos na nuvem, do upload de avatar ao petabyte de logs.

O que é object storage, na prática

Object storage é uma forma de armazenar dados como objetos independentes, em vez de blocos num disco ou arquivos numa árvore de pastas. Cada objeto carrega três coisas juntas:

  • Os dados em si (o conteúdo do arquivo: a imagem, o vídeo, o JSON);
  • Metadados ricos (tipo do conteúdo, data, e qualquer chave/valor que você quiser anexar — owner_id, processed=true, etc.);
  • Um identificador único que serve de endereço para recuperar aquele objeto.

A analogia que mais ajuda é a do valet de estacionamento: você entrega o carro (o objeto), recebe um recibo (a chave), e não precisa saber em qual vaga ele foi parar. O sistema cuida disso. Você só apresenta a chave quando quiser o carro de volta.

Os objetos ficam dentro de buckets — contêineres lógicos que agrupam dados. E aqui está o detalhe que confunde muita gente: dentro de um bucket não existem pastas de verdade. O namespace é plano. Quando você vê fotos/2026/perfil.jpg, isso é só a chave do objeto — uma string com barras que a interface mostra como se fosse diretório. Não há hierarquia real por baixo.

Como o acesso funciona: tudo é HTTP

A grande virada do object storage é que você não monta um disco nem abre um arquivo via sistema operacional. Você fala com uma API HTTP, quase sempre compatível com o protocolo S3 (criado pela Amazon e adotado como padrão de fato pela indústria). Salvar e ler um objeto vira uma requisição:

PUT  /meu-bucket/fotos/perfil.jpg     → grava o objeto
GET  /meu-bucket/fotos/perfil.jpg     → lê o objeto
DELETE /meu-bucket/fotos/perfil.jpg   → apaga o objeto

Na prática você usa um SDK em vez de montar a requisição na mão. Em Node, por exemplo:

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const s3 = new S3Client({ region: "us-east-1" });

await s3.send(new PutObjectCommand({
  Bucket: "meu-bucket",
  Key: "fotos/perfil.jpg",
  Body: fileBuffer,
  ContentType: "image/jpeg",
  Metadata: { ownerId: "42" },
}));

Como tudo é HTTP, o mesmo objeto pode ser servido direto para o navegador, distribuído por uma CDN, ou acessado de qualquer lugar do mundo sem montar volume nenhum. Essa propriedade — acesso por URL — é o que torna object storage perfeito para conteúdo estático.

Object storage vs block storage: a diferença que muda tudo

Essa é a dúvida número um de quem está começando. A regra mental é curta:

Object storage Block storage
Unidade Objeto + metadados + chave Blocos de tamanho fixo
Acesso API HTTP (S3) Disco montado pelo SO
Escala Praticamente ilimitada Limitada ao volume
Latência Maior Muito baixa
Uso típico Arquivos, backup, mídia, web Banco de dados, disco de VM

Block storage é o "HD" da máquina: o sistema operacional enxerga um disco, lê e escreve blocos, e isso é ótimo para banco de dados e leitura/escrita aleatória de baixa latência. Mas ele vive preso a uma instância e não escala sozinho.

Object storage troca latência por escala e durabilidade. Não serve para rodar o .mdf do seu Postgres em cima dele, mas é imbatível para guardar volume — petabytes de arquivos não estruturados, acessados por HTTP, com durabilidade altíssima (os provedores costumam anunciar "onze noves", 99,999999999%, replicando cada objeto em várias máquinas).

A escolha entre object storage e os modelos de nuvem onde ele roda merece um olhar mais amplo; se você está desenhando arquitetura, vale ler também sobre cloud pública, privada e híbrida para decidir onde esse storage vai morar, não só qual tipo usar.

Quando usar object storage

Use quando o dado for não estruturado, grande em volume e acessado mais por leitura do que por escrita aleatória. Os casos clássicos:

  • Uploads de usuário: avatares, anexos, documentos. Tira o arquivo do disco da aplicação e a aplicação fica stateless — você pode escalar instâncias sem se preocupar com qual delas guardou o quê.
  • Conteúdo estático para web: imagens, CSS, JS, vídeos servidos por CDN.
  • Backups e arquivamento: dumps de banco, snapshots, logs antigos. Muitos provedores oferecem classes "frias" (acesso raro) bem mais baratas por GB.
  • Data lake / analytics: jogar milhões de arquivos Parquet/JSON para processar depois.

Quando NÃO usar: se você precisa de baixa latência por operação, escrita aleatória dentro do arquivo, ou montar como disco de sistema — fique com block storage. Object storage não permite editar "um pedaço" de um objeto; para mudar 1 byte você reescreve o objeto inteiro.

Erros comuns que custam caro

Quem chega de file system tropeça sempre nos mesmos pontos:

  • Tratar object storage como banco de dados. Listar objetos é caro e lento; LIST num bucket com milhões de chaves não é um SELECT ... WHERE. Guarde os metadados pesquisáveis no seu banco e use o object storage só para o blob.
  • Bucket público sem querer. O vazamento de dados mais comum da última década foi bucket S3 exposto. Por padrão, deixe tudo privado e gere URLs pré-assinadas (links temporários, assinados, com validade) quando precisar dar acesso pontual.
  • Esquecer do custo de saída (egress). Guardar é barato; baixar costuma ser o que pesa na fatura. Sirva via CDN e ative cache.
  • Renomear arquivos achando que é grátis. Não existe "renomear" — é copiar para a chave nova e apagar a antiga. Em massa, isso vira custo e tempo.
  • Não versionar nem ter ciclo de vida. Ative versionamento para se proteger de exclusão acidental e configure regras de lifecycle para mover dados antigos para classes baratas ou apagá-los automaticamente.

Perguntas frequentes

Qual a diferença entre object storage e block storage? Block storage entrega blocos a um disco montado pelo sistema operacional, com latência baixíssima — ideal para banco de dados e disco de VM. Object storage entrega objetos completos via API HTTP, com escala praticamente ilimitada e durabilidade altíssima — ideal para arquivos, backup e mídia. Em uma frase: block para performance transacional, object para volume e escala.

Quando devo usar object storage? Sempre que o dado for não estruturado e em volume: uploads de usuário, conteúdo estático para web, backups, logs e data lakes. Tirar arquivos do disco da aplicação também é o que deixa sua app stateless e fácil de escalar horizontalmente.

Object storage é o mesmo que S3? Não exatamente. S3 é o serviço da Amazon, mas seu protocolo virou o padrão de fato — quase todo provedor (Google, Azure, Backblaze, Cloudflare R2, MinIO, Magalu, etc.) oferece uma API "compatível com S3". Na prática você programa contra a API do S3 e troca o endpoint conforme o provedor.

Posso editar parte de um objeto? Não. Objetos são imutáveis para edição parcial: mudar qualquer coisa significa reescrever o objeto inteiro com PUT. Por isso ele não serve para dados que sofrem escrita aleatória constante, como o arquivo de um banco de dados.

O que levar deste guia

Object storage não é "um disco mais barato" — é um modelo diferente: dados viram objetos com chave e metadados, acessados por HTTP, com escala e durabilidade que disco montado não alcança. Use para arquivos, mídia, backup e qualquer coisa não estruturada em volume; deixe banco de dados e baixa latência para o block storage. E lembre dos três cuidados que separam quem usa bem de quem toma susto na fatura ou no vazamento: bucket privado por padrão com URLs pré-assinadas, regras de lifecycle ativas, e metadados pesquisáveis no seu banco — não no LIST do bucket.

RD
Autor
Rafael Duarte
Desenvolvedor backend com passagem por fintech e SaaS B2B — trabalhou em times que escalaram APIs de zero a milhões de requisições. Carrega cicatrizes de produção suficientes para ter opiniões fortes sobre ferramentas, padrões e decisões de arquitetura. Não é acadêmico: leu a RFC do UUID quando precisou escolher entre v4 e v7 para uma tabela de alta escrita.
Ver perfil