Migrando o armazenamento de arquivos para o Amazon S3

Se você implementou um aplicativo que armazena arquivos em um servidor da Web, provavelmente enfrentou os desafios quando se trata de dimensionamento. O upload de arquivos não apenas consome o armazenamento enquanto o aplicativo cresce, mas também afeta o desempenho enquanto acessa os arquivos em escala. Esta é uma das razões pelas quais muitos escolhem soluções Cloud Object Storage como o Amazon S3 para armazenar esses arquivos.

Vou tentar abordar alguns caminhos para migrar os uploads de um arquivo de aplicativo existente para o Amazon S3 com a natureza da alteração em seu aplicativo para ajudá-lo a tomar as decisões certas.

Em primeiro lugar, é importante entender que o Amazon S3 é um armazenamento de objeto distribuído altamente durável e disponível fornecido pela AWS. Além dos recursos básicos como armazenamento de objetos, ele fornece um modelo de controle de acesso, organização de arquivos usando buckets e caminhos, acesso a arquivos via HTTP, configuração de metadados, controle de versão, gerenciamento do ciclo de vida e integração com outros serviços da AWS. bem como via SDKs e APIs.

Atualizações freqüentes de arquivos?
Uma das limitações do Amazon S3 é que você não pode fazer atualizações parciais nos arquivos, ou seja, para cada uma das mudanças no arquivo, é necessário alterar o Amazon S3 e enviá-lo de volta. Portanto, se o seu aplicativo, executar operações de modificação de arquivo com mais frequência e precisar compartilhar ou salvar as alterações parciais no Amazon S3, ele poderá se tornar caro, tanto em termos de custo (aumentando os custos para operações S3) quanto de desempenho, pois o arquivo precisa para ser carregado para cada alteração através da rede. Para esses tipos de operações, você pode considerar o Amazon EFS em comparação com o S3.

Caminhos Potenciais na Migração
Determinar o caminho potencial na migração dos uploads de arquivos para o S3 pode ser desafiador, com base em como o manuseio de arquivos já está implementado em seu aplicativo.

Sem modificar o código
Você pode montar um Amazon S3 como montagem NFS no caminho de armazenamento onde seu aplicativo armazena arquivos. Isso pode ser feito usando a interface de arquivos do AWS Storage Gateway ou o gateway de arquivos. Como o gateway de arquivos oferece cache local, ele melhora o desempenho de leitura ao acessar arquivos usados ​​com freqüência para acesso de baixa latência, e a transferência de dados entre o data center e a AWS é totalmente gerenciada e otimizada pelo gateway. No entanto, o desafio nessa abordagem é que ele requer a configuração do servidor de arquivos virtual no local, que atua como a interface do sistema de arquivos para a montagem do NFS.

Por outro lado, há implementações de terceiros em que um bucket do S3 pode ser montado diretamente como um sistema de arquivos no caminho de armazenamento do aplicativo. Algumas das implementações de terceiros, ou seja, S3FS-FUSE, ObjectiveFS e RioFS. Você pode considerá-los dependendo dos sistemas operacionais suportados e das características individuais desses sistemas de arquivos. Essa abordagem é mais adequada como uma etapa intermediária de uma migração e não como uma solução permanente.

A principal vantagem dessas abordagens é que elas podem ser usadas sem alterar o código do aplicativo sem afetar a estabilidade do aplicativo com o mínimo de esforço necessário. Se o aplicativo criar e recuperar principalmente arquivos sem outras operações, como editar ou anexar arquivos, pesquisar no próprio sistema de arquivos, essas abordagens devem funcionar bem.

Mover diretamente para o Amazon S3
Se você estiver usando o Amazon S3 diretamente, é possível acessá-lo dependendo da natureza dos padrões de acesso do seu aplicativo. Por exemplo, você pode utilizar o Amazon CloudFront (CDN) para acelerar o download de arquivos e implementar o suporte a mecanismos de controle de acesso personalizados.

Outra vantagem dessa abordagem é que ela pode liberar parte da carga do seu servidor, na qual os clientes podem fazer o upload de arquivos diretamente para o Amazon S3 sem serem transferidos pelo servidor. Isso é extremamente benéfico ao lidar com um grande número de arquivos ou arquivos grandes em escala para aumentar o desempenho e reduzir custos.

Um dos desafios dessa abordagem é que você precisará modificar seu código para fazer upload e recuperar arquivos do S3. Se os SDKs do Amazon S3 forem compatíveis com a linguagem de programação desenvolvida pelo aplicativo, isso poderá simplificar a implementação. Se não, você pode utilizar a API REST do Amazon S3.

Ao ler arquivos do S3, o uso do Amazon CloudFront pode simplificar as modificações de controle de acesso necessárias para acessar o S3 usando cookies assinados (ou URLs assinadas). Isso será útil para modificar a operação de upload enquanto mantém a leitura do arquivo inalterada. Além disso, se houver uma incompatibilidade de URLs entre um caminho carregado e um caminho de leitura (ao ter o mapeamento de URL para acessar arquivos), você poderá usar a função Lambda Edge para fazer os mapeamentos de URL de acordo com a implementação do aplicativo existente.