O blog da AWS
Case de Sucesso – Utilizando Amazon SQS e AWS Lambda para processar milhares de registros
Por Cassiano Mendes, Software Architect, +A Educação;
Claick Oliveira, Solutions Architect, Education, Brazil Public Sector;
Rodrigo Madeira, Account Manager, Education, Brazil Public Sector.
A +A Educação é um ecossistema de educação do Brasil que integra soluções em conteúdo, tecnologia e serviços com propósito de expandir os horizontes do conhecimento. Está presente em mais de 1000 instituições de ensino, num total de mais de 3,5 milhões de estudantes. Fundada em 1973 por Henrique Kiperman em Porto Alegre (RS), a empresa iniciou sua trajetória como uma livraria especializada em saúde e depois se tornou a editora referência em publicações científicas, técnicas e profissionais, tendo publicado mais de 4 mil livros. Além disso, a +A Educação investe em tecnologia para oferecer educação continuada para profissionais de saúde, e atua como parceira estratégica de instituições de ensino superior, hospitais e operadoras de saúde, sendo responsável pela gestão de seus programas online.
Overview
Com o grande aumento das instituições de ensino no Brasil procurando um meio de entregar conteúdo online e uma educação continuada, a +A Educação precisou encontrar uma forma de fazer um carregamento inicial de dados (por exemplo, dados de estudantes), pois quando uma nova instituição decide usar algum dos sistemas desenvolvidos pela empresa é necessário realizar essa integração.
O Desafio
Com o surgimento de novos produtos proprietários, além de criar uma forma replicável de realizar integrações com os ERPs (Sistemas de Gestão Empresarial) das instituições de ensino, a +A Educação precisou encontrar uma forma de realizar um carregamento de uma série de dados. Para efetuar essas cargas a arquitetura precisaria ser altamente escalável, de baixo custo, e garantir principalmente uma ordem na execução do carregamento, pois diversos dados como os de estudantes, cursos e matrículas, por exemplo, precisam seguir uma ordem lógica. Além da questão dos dados, outro ponto importante é que esse processo seja eficiente, pois permitirá que os estudantes utilizem imediatamente o sistema contratado pela instituição de ensino junto à +A Educação.
A Solução
A solução criada pela +A Educação foi a de um “Assistente de Importação”, onde os clientes enviam os primeiros dados através de um arquivo em formato CSV. Esse assistente utiliza serviços como o Amazon API Gateway, Amazon S3, AWS Lambda, Amazon SQS, Amazon Aurora e Amazon DynamoDB. Abaixo veremos a arquitetura e falaremos um pouco de cada serviço.
Assistente de Importação
Para a solução desenhada, foi criada a arquitetura abaixo:
Figura 1 – Arquitetura do “Assistente de Importação.
Essa solução usa o Amazon API Gateway para receber as requisições da aplicação via chamadas REST. Ao receber uma requisição, uma função do AWS Lambda é executada. Essa função faz uma chamada de API para o Amazon S3 criar uma pre-signed URL, gerando uma URL única com as devidas permissões necessárias e permitindo fazer o upload dos arquivos no bucket S3. Após os arquivos serem salvos no bucket S3, uma nova função do AWS Lambda é executada para ler os registros dentro do arquivo e adicioná-los em uma fila do Amazon SQS.
Com os registros sendo adicionados no Amazon SQS, outras funções do AWS Lambda são executadas, concorrentemente, para processar registros em lotes. Essas funções executam validações sobre os dados recebidos para então armazená-los no Amazon Aurora. Concluído o processamento do lote, o AWS Lambda (“worker”) cria uma mensagem na fila SQS FIFO (“update status”) para informar o término do seu processamento, indicando quantos registros foram importados com sucesso, e em quantos deles houve falha. Os logs de processamento de cada registro são armazenados no Amazon DynamoDB, de forma a possibilitar consultas futuras de detalhamento da importação realizada.
O AWS Lambda (“update status”) atualiza a situação do lote processado e, em seguida, a base de dados no Amazon Aurora é atualizada para controle da importação. Além disso, essa função abre uma conexão via websocket com um endpoint do Amazon API Gateway enviando o status do processo. Essa conexão executa uma função do AWS Lambda que notifica o progresso do carregamento dos dados na aplicação.
Resultados
Durante as primeiras fases de testes, em uma versão de arquitetura anterior a essa apresentada, estavam sendo processados 7 mil registros em 30 min, em uma taxa de 3 registros por segundo. Após otimizações de código e ajustes de configurações como quantidade máxima de AWS Lambdas concorrentes e limite de Pool mais aderente ao cenário, obteve-se uma taxa média de 101 registros processados por segundo, demandando menos de 2 minutos para processar mais de 11 mil registros. Até o momento cerca de 400 mil registros já foram importados.
Conclusão
Neste blog post mostramos como a +A Educação usou serviços em nuvem para criar uma solução que impacta positivamente em diversas instituições e na experiência dos estudantes, permitindo um acesso rápido e eficiente às plataformas de ensino.
Sobre os autores
Cassiano Mendes, Graduado em Ciência da Computação pela Unisinos. Atua há mais de 8 anos no desenvolvimento de software. Possui experiência em tecnologias web, projetando soluções escaláveis através do uso de recursos de Cloud Computing. Atualmente trabalha na +A Educação como Arquiteto de Software
Claick Oliveira, Arquiteto de Soluções na AWS no time de Setor Publico com foco em Educação. Com experiência prévia em diversos projetos relacionados a containers, DevOps e desenvolvimento vem ajudando empresas do setor de educação na jornada para a nuvem.
Rodrigo Madeira, executivo empreendedor com experiência no design de negócios digitais, ajudando Instituições de Ensino e Empresas na transição para o universo online e adoção de novas tecnologias. Ampla vivência na criação, consolidação e liderança de negócios, tanto próprios quanto de empresas internacionais. Atualmente, é Gerente de Contas EdTech na AWS.