O blog da AWS

Migrando uma aplicação monolítica para a arquitetura serverless e de microsserviços

Por Igor Oliveira, DevOps Engineer da Solvimm

 

Como profissionais, nós sempre buscamos entender a fundo os desafios dos nossos clientes e oferecer a melhor solução possível. Com o Atende Simples, cliente da Solvimm e da AWS, não foi diferente. A empresa oferecia uma solução empresarial baseada em um modelo monolítico de aplicação, que não se mostrava eficiente a longo prazo. A aplicação era pouco escalável e flexível, o que ia de encontro ao seu crescimento.

Nest post, compartilho com vocês como a Solvimm, usando diferentes serviços da AWS, conseguiu ajudar o Atende Simples com uma nova arquitetura.

O Atende Simples é uma solução empresarial de relacionamento telefônico. As ferramentas oferecidas permitem que pequenas, médias e grandes empresas escalem seu atendimento com automação, inteligência e integração com diversos sistemas. A empresa iniciou suas atividades em 2012 e hoje atende mais de 1.500 empresas, entre elas Banco Neon, Baterias Moura, Braspag, Trigg e Lojas Melissa.

Diante do crescimento acelerado da solução, eles decidiram buscar alternativas ao modelo monolítico usado. Assim, esperava-se aumentar a performance, flexibilidade e escalabilidade da aplicação, além de otimizar custos. De acordo com essas expectativas, a Solvimm foi escolhida para arquitetar a nova aplicação baseada em serverless e microsserviços.

 

O desafio

A camada física da solução do Atende Simples é constituída por equipamentos em dois data centers distintos em São Paulo e diversos links redundantes de conexão com as operadoras e a camada de aplicação, onde está o centro do processamento de chamadas. Com o modelo de aplicação monolítico usado, os recursos não eram bem aproveitados, já que era necessário alocá-los mesmo que somente uma pequena parte da aplicação fosse usada.

Além disso, conforme o código da aplicação aumentava, a etapa de desenvolvimento também levava mais tempo para ser concluída, sendo que somente os testes automatizados para deploy levavam quase uma hora. A agilidade é uma necessidade da solução do Atende Simples, que tem características específicas, como complexidade e imprevisibilidade do volume de processamento.

Como a quantidade de chamadas oscila ao longo do dia e da semana, de centenas por segundo a poucas ligações (em alguns horários, como durante a madrugada, são feitas poucas ou nenhuma chamada), a elasticidade da aplicação, de acordo com a demanda real do sistema, impactaria a redução de custos nos momentos ociosos. Mas um dos principais desafios encontrados pelo Atende Simples era adaptar a aplicação monolítica para essa realidade.

 

A solução

A migração de uma aplicação monolítica para a arquitetura de microsserviços é complexa. Por isso, adotou-se a estratégia de desenvolver novas funcionalidades e recursos na nova arquitetura, e, em paralelo, migrar as refatorações do código. Isso iniciou o processo de estrangulamento da aplicação monolítica.

 

 

Figura 1. Arquitetura da solução proposta.

 

A arquitetura proposta contou com um ambiente serverless usando o serviço AWS Lambda para a execução das funções. O Lambda tem a capacidade de aplicar diferentes regras de negócios para cada evento, de maneira altamente disponível e escalável. Diversos eventos de diferentes fontes acionam as funções, que aplicam regras de negócios e transformam os dados para consumo da aplicação monolítica legada.

O API Gateway e o AWS AppSync são usados como proxy de chamada das funções Lambda e demais recursos da AWS que precisam ser acessados pela aplicação monolítica. Esses recursos são o DynamoDB, como banco de dados, e SQS e SNS como mensageria e envio de mensagens. O DynamoDB permite armazenar os eventos gerados pelas chamadas com rapidez na escrita e a recuperação em milisegundos na leitura, possibilitando relatórios quase em tempo real.

A aplicação consome os eventos lendo uma fila do SQS, que cuida automaticamente de aumentos súbitos no número de eventos, sendo que outra fila foi preparada para os eventos que possam dar erro no consumo pela aplicação.

 

O Resultado

O uso da arquitetura serverless permitiu a entrega de novas features com agilidade. Além disso, a integração com a aplicação monolítica foi feita com o mínimo de alteração na aplicação.

Com a utilização de microsserviços na AWS, paga-se apenas pelo o que está de fato sendo utilizado dos serviços. Isso difere de uma infraestrutura tradicional, onde o cliente precisaria ter uma quantidade de servidores que aguentasse os momentos de pico e que mantivesse os recursos ociosos em períodos em que o número de chamadas fosse baixo.

Em um mês, são feitas cerca de 10 milhões de requisições Lambda à aplicação do Atende Simples, 5 milhões de requisições ao Amazon SQS, 32 milhões de requisições de leitura e 9.9 milhões de requisições de escrita ao Amazon DynamoDB. O poder computacional exigido para suportar essa carga é enorme, o que dificilmente seria feito em um ambiente on-premises.

Figura 2. Total de requisições de leitura ao DynamoDB.

 

Figura 3. Total de requisições Lambda a aplicação do Atende Simples.

 

Figura 4. Total de requisições ao Amazon SQS.

 

A Solvimm está há seis anos no mercado de computação em nuvem. É uma empresa Parceira de Consultoria Advanced da AWS Partner Network e faz parte dos programas AWS Public Sector Partner: Education, Non-Profit, AWS Solution Provider e AWS Public Sector Solution Provider. Além disso, a Solvimm é reconhecida pelo Programa AWS Service Delivery no que diz respeito à entrega de soluções com o AWS Lambda.