[DevOps] Usando S3 como FileSystem.

S3 como FileSystem é Real

Olá pessoal, este é meu primeiro post aqui. Vou falar sobre um recurso relativamente novo que se tornou GA (Generally Available) há pouco tempo: a possibilidade de usar um S3 como "FileSystem", ou seja, como um ponto de montagem dentro do seu servidor Linux através do mountpoint-s3.

Para entender o quão interessante é esse recurso, precisamos conhecer as diferenças entre Object Storage e File Storage.

Object Storage

O armazenamento baseado em objeto difere, pois todo dado armazenado é tratado como objeto (apesar de não ser a melhor definição). Isso permite adicionar metadados a cada objeto, e cada objeto tem um identificador único (key), que direciona diretamente para esse objeto.

Exemplo: s3://NOME-DO-MEU-BUCKET/CHAVE-DO-MEU/OBJETO-1.json Exemplo: s3://NOME-DO-MEU-BUCKET/CHAVE-DO-MEU/OBJETO-2.json

Num primeiro momento, isso pode parecer uma estrutura de pasta, mas não se engane. Mesmo que OBJETO-1 e OBJETO-2 compartilhem o mesmo prefixo, não é uma pasta!

É importante notar que a AWS, por vezes, complica as coisas

image

Apesar de existir um botão chamado Criar pasta no console da AWS, isso cria um objeto vazio. A verdade dura é melhor que uma mentira suave.

Portanto, não há um sistema hierárquico de diretórios a ser gerenciado, proporcionando uma escalabilidade gigantesca.

Outra consideração é que não há uma maneira direta de atualizar um objeto, como adicionar mais informações a um objeto JSON. Você simplesmente substitui a versão antiga pela nova com um PUT.

File Storage

Por outro lado, temos um armazenamento baseado em arquivos com o qual todos estamos acostumados e que existe desde os primórdios. Esse tipo de armazenamento é muito conveniente quando precisamos lidar com arquivos mutáveis, pois temos muita liberdade para trabalhar da forma que quisermos com os arquivos através de POSIX file system.

O problema surge quando precisamos escalar o armazenamento, como em um Data lake. Nesse ponto, o acesso aos arquivos pode ficar lento devido à enorme quantidade de arquivos existentes, levando aplicações relacionadas ao processamento de dados a trabalharem com SDKs para interagir com o S3.

Mountpoint S3

Basicamente é um cliente de arquivo simples e de alto desempenho para montar um bucket S3 como um sistema de arquivos local. Com isso, suas aplicações podem acessar objetos armazenados no bucket por meio de operações de arquivo, como open e read. O mountpoint-s3 traduz automaticamente essas operações em chamadas de API de objeto S3, proporcionando às suas aplicações acesso ao armazenamento elástico e à taxa de transferência do s3 por meio de uma interface de arquivos, simplificando em muito a forma de interagir com esses objeto e trazendo mais agilidade para o desenvolvimento.

Beleza, mas como isso fica no servidor?

Bem, agora sim ele cria pastas utilizando o prefixo dos arquivos :D

Ex:

.
+-- CHAVE-DO-MEU
   |  +-- OBJETO-1.json
   |  +-- OBJETO-2.json

As limitações que um armazenamento baseado em objetos oferecem também se aplicam aqui, não é possível renomear arquivos, e nem acrescentar informações neles, no entando é um recurso muito interessante para se utilizar.

Exemplo de uso

Digamos que você tenha uma aplicação legado rodando no seu VMWare que esta com o uptime de 1216 dias, quem nunca foi atualizado e você tem pesadelos com o dia que esse servidor vai parar.

Nesse caso você pode se beneficiar do mountpoint-s3 para preparar uma arquitetura onde armazena a aplicação em um s3, monta isso em duas vms ec2 (em diferentes regioes) e disponibiliza através de um loadbalancer.

Dessa forma você pode começar a se beneficiar do que a cloud te oferece.

Já tinham ouvido falar sobre esse recurso? Vamos trocar uma ideia sobre as possibilidades que isso trás.