Desenvolvimento de Sistemas Automatizados na Nuvem: Uma Abordagem Serverless
Por muitos anos, a construção de um sistema de software automatizado envolvia a configuração de diversos servidores com recursos dedicados de CPU, memória, armazenamento e outros. Uma equipe de administradores era então responsável por gerenciar esses sistemas. Posteriormente, a equipe de desenvolvimento assumiu a infraestrutura, criando processos para conectar os servidores.
Este processo podia ser complexo, exigindo a colaboração de vários grupos com diferentes focos. Esses conflitos de interesse podiam gerar problemas. Além disso, o custo era elevado, envolvendo salários para os administradores e o consumo contínuo de recursos pelos servidores, mesmo quando não utilizados.
Para garantir o desempenho ideal, era necessário implementar uma solução de escalonamento automático capaz de ajustar dinamicamente os recursos do servidor.
As plataformas de nuvem apresentam uma vantagem significativa: possibilitam a criação de arquiteturas completas sem a necessidade de configurar clusters de servidores. Do ponto de vista da administração, a manutenção é praticamente inexistente.
Essa abordagem é economicamente vantajosa para startups e projetos em fase de Produto Mínimo Viável (MVP). É um bom ponto de partida quando é difícil prever as futuras cargas de produção e atividade dos usuários, situações em que a configuração dos servidores de cluster pode ser um desafio.
A automação de processos através de serviços na nuvem serverless é o diferencial da arquitetura sem servidor. Ela conecta serviços, obtendo resultados semelhantes aos de servidores de cluster tradicionais.
A seguir, apresentamos um exemplo de como construir uma arquitetura utilizando exclusivamente serviços nativos da AWS.
Seleção de Serviços para um Fluxo Serverless
Imagine que você deseja criar uma plataforma para coletar diversos dados e imagens (ou fotos) da infraestrutura de ativos concretos (sejam eles de manufatura ou utilidade). Para análises futuras, os dados recebidos precisam ser processados. Após a aplicação de regras de negócio, um procedimento de back-end salva as informações calculadas de forma normalizada em um banco de dados relacional. Um aplicativo front-end exibe os dados normalizados para os usuários.
Vamos analisar os componentes que podem compor essa arquitetura.
Buckets AWS S3
Fonte: aws.amazon.com
Os buckets do Amazon S3 são uma excelente forma de armazenar arquivos ou imagens na nuvem AWS. O custo do armazenamento em buckets S3 é notavelmente baixo. A configuração de uma política de ciclo de vida do bucket S3 reduz ainda mais esse custo.
Essa política move automaticamente arquivos mais antigos para diferentes classes de buckets S3, como arquivos de acesso pouco frequente ou arquivamento profundo. Essas classes também variam em velocidade de acesso, mas para dados antigos, essa diferença é menos relevante. O acesso a esses dados arquivados é geralmente para eventos urgentes, e não para operações padrão.
- Você pode organizar seus dados em subpastas.
- É necessário definir permissões apropriadas.
- Adicione tags aos buckets para facilitar a identificação e para uso em políticas dinâmicas de bucket S3.
- Um bucket S3 é, por definição, um serviço sem servidor. É simplesmente um espaço de armazenamento de dados.
Um bucket S3 é, por definição, um serviço sem servidor. É apenas um local para armazenar seus dados.
Banco de Dados AWS Athena
Fonte: aws.amazon.com
O Athena simplifica a criação de um data lake básico na AWS. É um banco de dados sem servidor que usa um bucket S3 para armazenar os dados. A organização dos dados é mantida por formatos de arquivos estruturados, como Parquet ou arquivos CSV. O bucket S3 contém os arquivos e o Athena se refere a eles sempre que os processos selecionam dados do banco de dados.
É importante notar que o Athena não suporta algumas funcionalidades consideradas padrão, como instruções de atualização. Portanto, o Athena deve ser considerado uma opção simples.
No entanto, ele suporta indexação e particionamento, e pode ser facilmente escalado horizontalmente, o que se resume a adicionar novos buckets à infraestrutura. Para criação de um data lake simples, mas funcional, isso pode ser suficiente na maioria dos casos.
Para obter bom desempenho, é essencial escolher o design de dados mais adequado, focando no uso futuro. A forma como os dados serão selecionados precisa estar muito clara. A recriação de tabelas, após elas já existirem e estarem preenchidas com muitos dados, pode ser complexa.
O Athena DB é uma boa opção se o objetivo é criar um pool de dados simples, imutável e de fácil escalabilidade horizontal.
Banco de Dados AWS Aurora
Fonte: aws.amazon.com
O Athena DB é ideal para armazenar dados não selecionados. Afinal, esta é a forma como você deseja armazenar seu conteúdo original para maximizar sua reutilização futura. No entanto, ele é lento para fornecer resultados selecionados para um aplicativo front-end.
Uma das melhores opções, especialmente do ponto de vista da fácil configuração, é o banco de dados Aurora executado no modo serverless.
O Aurora está longe de ser um banco de dados básico. É uma das soluções de banco de dados relacional nativas mais avançadas da AWS. É também uma solução complexa que melhora continuamente a cada nova versão.
O Aurora se destaca por poder ser executado no modo serverless, diferenciando-se de outros serviços relacionais. Veja como esse modo funciona:
- Para configurar o cluster Aurora, utilize o console da AWS. É necessário especificar os níveis padrão de CPU e RAM, bem como o intervalo máximo de escalonamento automático. Isso afeta o desempenho que o cluster do Aurora pode adicionar ou remover dinamicamente. Com base na utilização do banco de dados, a AWS decide se aumenta ou diminui a escala.
- O cluster do Aurora não é iniciado a menos que um usuário ou processo realize uma solicitação real. Por exemplo, quando um processamento em lote agendado é iniciado ou quando o aplicativo executa uma chamada de API de back-end para obter dados do banco de dados. O banco de dados é aberto automaticamente e permanece ativo por um período predeterminado após a conclusão das solicitações.
- O cluster do Aurora é encerrado automaticamente se não houver mais trabalho a ser executado no banco de dados.
Para enfatizar, o Aurora DB serverless só é executado quando há trabalho real a ser feito. O cluster iniciado automaticamente é desligado novamente se não houver processamento em andamento. Você paga apenas pelo trabalho real, não pelo tempo ocioso.
O Aurora serverless é totalmente gerenciado pela AWS e não requer administração.
AWS Amplify
O Amplify oferece uma plataforma serverless para a implantação rápida de aplicativos front-end criados com bibliotecas JavaScript e React. Não há necessidade de configurar servidores de cluster. Utilize o console da AWS para implantar o código diretamente ou use um pipeline DevOps automatizado.
Você pode utilizar APIs de back-end para acessar os dados armazenados nos bancos de dados. Essas chamadas permitem que os dados sejam acessados no aplicativo front-end. A principal otimização de desempenho no back-end deve ser feita pela equipe. Ao projetar instruções de seleção eficientes diretamente nas chamadas de API, é possível reduzir ainda mais a possibilidade de respostas lentas na interface do usuário.
AWS Step Functions
Fonte: aws.amazon.com
Embora todos os componentes principais de um sistema sejam serverless, isso não garante uma arquitetura totalmente serverless. Isso só é possível se todos os processos em lote entre os componentes forem serverless.
O AWS Step Functions oferece a melhor solução na nuvem AWS. Uma lista conectada de funções AWS Lambda compõe a função step. Essas funções criam um fluxograma com estados iniciais e finais claros. Uma função Lambda, normalmente escrita em Python ou Node JS, é um trecho de código executável que processa o que for necessário.
Veja um exemplo de como uma função step pode ser executada:
- A AWS aciona uma função Lambda automática sempre que um novo arquivo é adicionado a uma pasta no S3. Após analisar o arquivo, o Lambda o carrega no Athena. O Lambda armazena seus resultados em formato CSV em um bucket S3 (ou em uma tabela de rastreamento de banco de dados) antes de encerrar.
- Este resultado é usado pelo próximo Lambda para executar as etapas seguintes. Isso pode incluir a execução de um modelo de aprendizado de máquina e a transformação de um subconjunto dos novos dados em tabelas normalizadas. A última etapa pode ser o carregamento dos dados no banco de dados Aurora.
- Uma função step vincula esses Lambdas para formar um fluxo em lote. É até possível ter outra função step executada no lugar de uma etapa da função step raiz. Assim, é possível abranger diversos cenários.
Este fluxo serverless tem uma grande desvantagem: cada função Lambda pode ser executada por no máximo 15 minutos. Portanto, dividir o fluxo em funções Lambda menores pode atenuar este problema.
É possível chamar várias funções Lambda simultaneamente em uma etapa, o que basicamente significa paralelizar uma etapa com vários Lambdas executados ao mesmo tempo. Aguarde que todo o processamento paralelo do Lambda termine antes de continuar para o próximo processamento Lambda.
Considerações Finais
A arquitetura serverless oferece uma oportunidade única de criar uma plataforma na nuvem que abrange todo o cenário do sistema. Esta plataforma é escalável horizontalmente e possui baixos custos operacionais. É uma solução ideal para projetos com orçamentos limitados. É uma excelente opção para exploração, especialmente quando a carga de produção não é conhecida. Isso é particularmente importante após a integração de todos os usuários. É possível que as equipes de projeto ainda estejam desenvolvendo a compreensão de como o sistema funciona. É possível obter todos esses benefícios sem comprometer a eficiência.
Essa abordagem pode não ser adequada para todos os casos, especialmente aqueles que exigem alto uso de CPU. No entanto, a nuvem AWS está em constante evolução em termos de casos de uso serverless. Geralmente, é recomendável realizar uma pesquisa completa antes de optar pela abordagem serverless para o seu próximo projeto na nuvem AWS.
Para mais informações, confira os melhores bancos de dados serverless para aplicações modernas.