2 pontos por GN⁺ 2024-03-11 | 1 comentários | Compartilhar no WhatsApp

S3 é arquivo, mas não é um sistema de arquivos

  • O Amazon S3 é uma tecnologia de nuvem original lançada em 2006, chamada de "armazenamento de objetos", mas na prática voltada para arquivos.
  • A ideia de que o S3 seria um "Amazon Cloud Filesystem" é uma crença útil para incentivar a adoção do S3, mas, na realidade, o S3 não é um sistema de arquivos.

O que é um sistema de arquivos e a "profundidade" de um módulo

  • A API de arquivos do Unix é composta por cinco funções básicas, que fornecem tudo o que é necessário para ler e gravar arquivos.
  • Essas funções lidam com muitos problemas, como buffering, cache de páginas, fragmentação, permissões, escalonamento de IO e outros, sem expor isso ao usuário.
  • Módulos profundos têm a vantagem de permitir que o usuário use funcionalidades sem precisar pensar na complexidade.

Características do S3 (isso também é profundo)

  • O S3 não reimplementa a API de sistema de arquivos do Unix, e sua forma básica de chamadas é diferente.
  • A API do S3 é mais simples do que a API de arquivos do Unix, mas tem a limitação de não permitir sobrescritas parciais de objetos.

Softwares de sistema de arquivos, especialmente bancos de dados, não podem ser migrados para o Amazon S3

  • Bancos de dados precisam de um lugar para armazenar dados, e isso normalmente fica em vários arquivos dentro de um sistema de arquivos.
  • Bancos de dados dependem fortemente da capacidade de fazer sobrescritas parciais, o que não é possível no S3.

O que o S3 faz bem e o que não faz

  • A vantagem do S3 é que a largura de banda de leitura e escrita é muito alta.
  • Porém, o S3 não tem sobrescrita parcial, operações de renomear ou mover, e também é lento para listar arquivos.
  • Ainda assim, o S3 exige pouca manutenção e simplifica tarefas como configuração de backup, replicação e provisionamento.

A importância da profundidade do módulo entre organizações

  • Não é surpreendente que o S3 tenha se tornado a primeira API de nuvem popular, já que APIs profundas ajudam a gerenciar a complexidade entre organizações.
  • Integrar softwares corporativos complexos, como o SAP, é um trabalho doloroso, e isso acontece porque o SAP não é um módulo profundo.

Outras informações

  • Este artigo não pretende sugerir que o S3 é superestimado; ele explica o conceito de módulos profundos em comparação com módulos relativamente rasos.
  • Alguns bancos de dados foram projetados para usar a API do S3 como armazenamento; isso é possível, mas não é transparente.
  • No S3, muitos formatos de arquivo têm desempenho inferior ao de disco.

Opinião do GN⁺

  • É importante entender que o S3 não é um substituto para um sistema de arquivos, mas sim uma solução de armazenamento otimizada para casos de uso específicos. Por exemplo, ele é adequado para armazenar e transferir arquivos grandes e imutáveis, mas não é indicado para aplicações que exigem atualizações parciais frequentes, como bancos de dados.
  • O desempenho e a escalabilidade do S3 são muito altos, mas, ao considerar custo-benefício e complexidade de gerenciamento, ele não é adequado para todos os projetos. Por exemplo, o projeto open source MinIO pode ser uma boa alternativa para organizações que desejam construir um armazenamento compatível com S3 em sua própria infraestrutura.
  • Ao usar o S3, há considerações adicionais como consistência dos dados, custos de rede e controle de acesso, e esses fatores podem impactar o design de todo o sistema.
  • Embora os casos de uso do S3 possam ser limitados, ele é uma ferramenta muito poderosa em aplicações específicas, como data lakes ou soluções de backup. Sua capacidade de armazenar dados com segurança e recuperá-los rapidamente quando necessário oferece valor importante para muitos negócios.
  • Este artigo pode ajudar na tomada de decisões técnicas ao oferecer uma compreensão profunda dos detalhes técnicos do S3 e de casos de uso reais.

1 comentários

 
GN⁺ 2024-03-11
Opiniões no Hacker News
  • Nunca ouvi falar de problemas com a durabilidade do S3, mas também nunca vi essas afirmações serem testadas. Fico curioso sobre essas alegações.

    • A durabilidade do S3 é líder no setor e não pode ser comparada a sistemas de arquivos tradicionais.
    • A separação entre zonas de disponibilidade da AWS é superior à de outros provedores de nuvem.
    • O S3 se preocupa muito com integridade de dados e desastres naturais.
    • O S3 opera em escala suficiente para detectar bit rot.
    • Eu não armazenaria dados importantes em nenhum outro lugar além do S3.
    • Fonte: alguém que escreveu o sistema de billing do S3.
  • Listar arquivos é lento. O S3 é muito rápido para leitura e escrita, mas listar arquivos é muito lento.

    • O útil no S3 não é a leitura e escrita rápidas, e sim a capacidade de listar arquivos.
    • Em buckets sem versionamento, listar um prefixo específico é, na prática, possível em tempo constante.
    • É possível particionar os dados de várias formas e usar os identificadores necessários sem se preocupar com desempenho.
  • Fiquei surpreso recentemente com o quão lento é listar arquivos. Ao trabalhar em scripts para gerenciar assets no S3, percebi que precisava de um cache da listagem de arquivos.

    • Há cerca de 100.000 diretórios no nível raiz, e cada um contém alguns diretórios com alguns arquivos.
    • Listar os arquivos recursivamente leva 15 minutos.
    • Fico me perguntando por que a Amazon não resolveu esse problema.
  • O Amazon S3 é a tecnologia original da nuvem e foi lançado em 2006. "Objetos" estavam em alta na época, e o S3 passou a ser chamado de "armazenamento de objetos".

    • O S3 não é um sistema de arquivos, e sim um armazenamento de objetos.
    • O S3 não é um arquivo, nem um sistema de arquivos.
    • O que se espera da abstração de arquivo é mutabilidade.
    • O S3 fornece uma lista mutável de objetos imutáveis.
    • O S3 resolve um problema diferente, e as tentativas de fazê-lo parecer um sistema de arquivos vêm de um mal-entendido por parte dos clientes.
  • Há uma discussão comparando a API do object_store do Apache Arrow com a API oferecida pelo Apache OpenDAL.

    • O Apache OpenDAL é uma biblioteca que fornece uma API semelhante a FS para vários armazenamentos em nuvem, incluindo o S3.
    • Alguns sistemas de banco de dados, como GreptimeDB e Databend, usam o OpenDAL para acessar dados em armazenamento em nuvem.
    • Outras soluções, como Alluxio e JuiceFS, também gerenciam uma interface semelhante a sistema de arquivos sobre o S3.
  • Softwares de sistema de arquivos, especialmente bancos de dados, não podem ser portados para o Amazon S3.

    • Mas podem, sim, ser portados.
    • Não é necessário sobrescrever o arquivo inteiro do banco de dados a cada INSERT/UPDATE/DELETE.
    • No caso do SQLite, existem ferramentas como o Litestream, que oferecem suporte a replicação e restauração via S3.
  • Uso o Minio como "S3" local para armazenar datasets e checkpoints de modelos.

    • O Minio tem muitos recursos de que eu não preciso.
    • Qual é a melhor opção atual, self-hosted e de nó único, para algo mínimo parecido com S3 que permita fazer CRUD de arquivos e ver listagens?
  • Vale a pena mencionar o Backblaze B2 quando se fala de S3.

    • Estou muito satisfeito com ele por custar 3 vezes menos que o S3.
  • O S3 pode ser mal utilizado como se fosse um sistema de arquivos.

    • O S3 quer objetos, e aqui há objetos de 512 ou 4096 bytes chamados clusters.