Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Armazenamento de Objetos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Armazenamento de Objetos

1. Definição e Paradigma

No ecossistema de um servidor web moderno, o armazenamento de objetos (Object Storage) representa uma mudança de paradigma em relação ao sistema de arquivos tradicional (posicional e hierárquico). Enquanto o servidor web padrão lida com arquivos em árvores de diretórios, a arquitetura moderna de aplicações web separa a lógica do servidor do armazenamento de dados não estruturados, tratando cada arquivo — seja uma imagem, um vídeo ou um log — como um objeto isolado, identificado por uma chave única e enriquecido com metadados.

Comparação de Paradigmas

Paradigma Modelo Acesso Latência típica Exemplos
Arquivo em bloco LUN/iSCSI Bloco bruto < 1 ms SAN, EBS, iSCSI
Sistema de arquivos Posicional hierárquico open() syscall 1-5 ms ext4, XFS, NFS, SMB
Objeto Plano, chave/valor API REST HTTP 10-50 ms (p99) S3, MinIO, GCS
Banco de dados Estruturado SQL/NoSQL 1-10 ms PostgreSQL, MongoDB

2. A Estrutura do Objeto

Diferente de um arquivo em disco rígido comum, que possui apenas nome e extensão limitada, um objeto no armazenamento web é composto por três partes fundamentais:

  • Dados (Payload): O conteúdo binário do arquivo em si (ex: os bytes de uma foto .jpg).
  • Metadados: Informações contextuais expansíveis definidas como pares chave-valor. Além de data de criação e Content-Type, podem incluir autor, permissões de acesso (ACLs), tipo de criptografia e tags personalizadas para indexação. Limite típico: 2 KB em S3.
  • Identificador Único (Chave): Uma string (geralmente uma URL ou um UUID) que permite recuperar o objeto sem que o servidor precise saber em qual pasta ou disco físico ele reside.

3. Espaço de Endereçamento Flat (Plano)

Ao contrário do gerenciamento de repositórios tradicional que usa /var/www/html/uploads/2024/foto.jpg, o armazenamento de objetos utiliza um sistema plano:

  • Buckets (Baldes): Containers lógicos de nível superior com nome globalmente único (ex: minha-empresa-prod-uploads). Em S3, nomes devem ser únicos em toda a AWS.
  • Navegação Virtual: Embora seja possível usar barras na chave do objeto (ex: images/logo.png), isso é apenas uma convenção de nomenclatura. Para o sistema de armazenamento, o caminho inteiro é apenas a chave do objeto dentro do bucket plano.
  • Delimitador comum: A API ListObjects suporta delimiter=/ para emular pastas, mas o armazenamento subjacente permanece plano.

4. Escalabilidade e Disponibilidade

O armazenamento de objetos é a base para a escalabilidade horizontal de servidores web:

  • Independência de Estado (Stateless): Com 10 servidores web atrás de um Load Balancer, não é necessário sincronizar pastas locais de uploads. Todos se conectam a um repositório de objetos centralizado (AWS S3, Google Cloud Storage ou MinIO).
  • Replicação Geográfica: Objetos são automaticamente replicados entre diferentes zonas de disponibilidade. Se um data center falha, o servidor web busca o objeto em outra localidade de forma transparente.
  • Durabilidade: S3 Standard oferece 99,999999999% (11 noves) de durabilidade, replicando cada objeto em pelo menos 3 zonas.

5. Acesso via API REST

Um servidor web tradicional acessa arquivos via chamadas de sistema (open(), read(), write()). No armazenamento de objetos, a interação ocorre via protocolo HTTP/HTTPS utilizando uma API REST padronizada pela AWS S3 (que se tornou o padrão de fato, copiado por MinIO, Ceph RGW, Wasabi, Backblaze B2):

Método HTTP Operação S3 Função
PUT PutObject Carregar objeto
GET GetObject Recuperar objeto
HEAD HeadObject Ler apenas metadados (útil para verificar ETag sem baixar)
DELETE DeleteObject Remover objeto
POST CreateMultipartUpload Iniciar upload multiparte
GET ?listing ListObjects Listar chaves em um bucket

Autenticação S3 (SigV4)

Cada requisição é autenticada via AWS Signature Version 4 (RFC 2017 da AWS), que assina HMAC-SHA256 do canonical request usando a chave secreta do usuário. Permite delegar acesso temporário via STS (Security Token Service).

6. Casos de Uso no Servidor Web

Caso Padrão Observações
Conteúdo estático de larga escala Hospedar diretamente em bucket público Redirecionar CDN para o bucket
Upload de usuários Pre-signed URL (validade 5-60 min) Cliente envia direto ao S3, sem passar pelo servidor
Backups e logs Lifecycle: Standard → IA → Glacier Reduz custo após 30 dias
Distribuição via CDN CloudFront/Cloudflare na frente do bucket Cache na borda
Imagens dinâmicas Lambda@Edge + S3 Redimensionamento on-the-fly
Static website hosting Habilitar em bucket S3 Sem TLS customizado (usar CloudFront)

7. Desempenho e Latência

O armazenamento de objetos prioriza taxa de transferência (throughput) e durabilidade sobre a latência de acesso aleatório. Por ser baseado em HTTP, o primeiro byte demora mais para chegar do que em um SSD local, mas o sistema entrega milhares de objetos simultaneamente sem degradar a performance, algo impossível para um sistema de arquivos convencional sob carga extrema.

Métricas Típicas (S3 Standard)

Métrica Valor
TTFB (Time to First Byte) 10-30 ms
Throughput por objeto 5-25 MB/s em GET único
Throughput multipart (10 conexões) 200+ MB/s
Máximo por objeto 5 TB (com multipart upload)
Máximo por upload 10.000 partes
Requisições por segundo por prefixo 5.500 GET, 3.500 PUT

8. Funcionalidades Avançadas

  • Versionamento: Mantém múltiplas versões do mesmo objeto (habilitado por bucket). Útil para recover de deleções acidentais.
  • MFA Delete: Exige token MFA para deletar versões ou alterar estado de versionamento.
  • Server-Side Encryption: SSE-S3 (gerenciado pela AWS), SSE-KMS (com Customer Master Key), SSE-C (chave fornecida pelo cliente).
  • Lifecycle Rules: Transição automática entre classes (Standard → IA → Glacier → Deep Archive) ou expiração programada.
  • Object Lock (WORM): Modo Compliance ou Governance, retém objeto por N dias inalterável. Atende SEC 17a-4.
  • CORS: Configuração no bucket permite requisições cross-origin direto do navegador.
  • Event Notifications: Dispara Lambda/SNS/SQS quando objeto é criado/removido.

9. Implementações Comuns

Solução Tipo Característica
AWS S3 Cloud Pioneiro, padrão de facto da API
Google Cloud Storage Cloud Interoperável com S3
Azure Blob Storage Cloud API própria + compatibilidade S3
MinIO Self-hosted Open source, API S3
Ceph RGW Self-hosted Open source, integrado com Ceph
Backblaze B2 Cloud Custo baixo, API S3
Wasabi Cloud Sem taxas de egress
OpenStack Swift Self-hosted API própria (v1), diferente do S3

10. Auditoria e Diagnóstico

# Listando objetos em um bucket (MinIO ou S3 via aws-cli)
aws s3 ls s3://meu-bucket/images/ --recursive --human-readable

# Gerando URL pré-assinada para upload direto (validade 1 hora)
aws s3 presign s3://meu-bucket/arquivo.pdf --expires-in 3600

# Sincronizando pasta local com bucket (estilo rsync)
aws s3 sync ./build/ s3://meu-bucket/site/ --delete --exclude "*.log"

# Verificando integridade via ETag (MD5 em uploads simples)
aws s3api head-object --bucket meu-bucket --key imagem.jpg --query ETag

# Testando latência TTFB com curl
curl -o /dev/null -s -w "TTFB: %{time_starttransfer}s\n" \
  https://meu-bucket.s3.amazonaws.com/imagem.jpg

11. Conclusão

O armazenamento de objetos é o pilar que sustenta a escalabilidade horizontal da web moderna. Ao abstrair a complexidade do sistema de arquivos em uma API REST simples, ele permite que servidores web stateless cresçam horizontalmente sem gargalos de sincronização. A compreensão do modelo flat, das classes de armazenamento, do upload multiparte e das URLs pré-assinadas é pré-requisito para arquitetar aplicações distribuídas eficientes, duráveis e econômicas.