O blog da AWS

Como a RotaExata economizou 66% em custos, e se tornou mais eficiente utilizando serviços Serverless

Por Eric Alexandre Massalli, Fundador da RotaExata,
José Eduardo Fortunato, Líder Técnico da RotaExata,
Lígia Harumi Yamamoto, Arquiteta de Soluções da AWS

 

Sobre a RotaExata

A RotaExata é uma empresa de rastreamento veicular que atua no mercado B2B. O foco do produto é orientado a atender necessidades de controle e gestão das operações dos clientes em campo, tais como entregas, coletas, serviços externos e visitas comerciais.

Por conta disso, é de extrema importância para o RotaExata a qualidade no posicionamento dos dispositivos IOT dos clientes, a qual é uma das características principais que sustentam os diferenciais do sistema.

Em síntese, o produto é dividido em 4 módulos, sendo todos eles integrados entre si.

Como base, tem-se o rastreamento veicular, o qual realiza o monitoramento das operações de campo em tempo real, dando ao usuário uma visibilidade dinâmica e exata de tudo o que acontece durante os deslocamentos, como as localizações, paradas e eventos de telemetria.

Em adição, o módulo de gestão de frotas é mais voltado para o gerenciamento financeiro e para o controle de custos relacionados às operações. Por ser interligado ao rastreamento, toda a gestão é realizada por meio de dados confiáveis e atualizados dos veículos.

Inclusive, as ferramentas do módulo em questão trabalham em conjunto ao monitoramento: ao identificar as problemáticas causadoras do prejuízo, o usuário pode aplicar as funcionalidades de gestão, para que esses custos sejam primeiramente registrados.

Depois disso, tanto o rastreamento quanto o módulo de roteirização podem trabalhar na redução dos gastos.

O roteirizador do RotaExata é a funcionalidade que seleciona os trajetos mais rápidos – e por conseguinte econômicos – para os motoristas se deslocarem. Por ser integrado aos outros módulos, a roteirização leva em conta as regiões de atendimento selecionadas pelo gestor da frota, bem como as regiões marcadas como cercas virtuais.

Por fim, tem-se o mais novo módulo do sistema, o Automação. Essa ferramenta tem como objetivo simplificar os processos do cotidiano do gestor, usuário do RotaExata. Sendo assim, o módulo é composto por regras, formulários automatizados e até mesmo um ranking de motoristas. Todos os componentes têm como intuito inovar o gerenciamento de serviços.

Esses 4 módulos trabalham juntos e por isso fornecem a administração completa dos veículos e dos trajetos.

No início de 2021, a RotaExata já possuía mais de 1200 clientes, sendo todas empresas de diversos portes de operação, variando de 3 até mais de 1000 dispositivos IoT rastreados por empresa. E este número continua crescendo!

Em um mercado continental, ao sentir o crescimento da demanda, a RotaExata prevê um crescimento exponencial. A partir deste ponto, surge a necessidade da mudança tecnológica do produto, para que ele se torne altamente escalável, sem aumentos dos custos proporcionais da atual infraestrutura.

 

Contexto de Negócio

Para dar suporte a um novo processo de aceleração da empresa e assim permitir o aumento de escala – e ao mesmo tempo a redução de custos – iniciamos um estudo para viabilizar a mudança tecnológica do sistema. No momento anterior, esse operava em várias instâncias Amazon EC2. Atualmente buscamos tecnologias auto escaláveis e totalmente gerenciadas, de acordo com as demandas dos clientes.

 

Desafios

Para escalar a solução anterior precisávamos gerenciar, aumentar e replicar instâncias EC2. Por conseguinte, havia pagamento por instâncias ociosas e naturalmente contratação de instâncias com capacidades acima do necessário.

A aplicação era praticamente um monólito, que atendeu muito bem nossas necessidades até o momento, mas para as novas demandas seria necessário também o upgrade de arquitetura.

Recebendo diariamente mais de 25 milhões de requisições de dispositivos IOT, o RotaExata possui como desafio o tratamento e armazenamento – tanto para rápidas consultas quanto para recuperação de informações – de datas passadas.

Por se tratar de um grande volume de informações (1,5 TB somente dos últimos 3 meses) houve no passado a perda de uma pequena parte desses dados – a qual passou despercebida – justamente por se tratar de uma grande quantidade informacional.

Em certos momentos, existem alguns problemas na comunicação de um volume de equipamentos, que estão fora do nosso controle. Assim, quando finalmente retornam geram um gargalo na aplicação anterior, já ficando desatualizada por algumas horas.

Outro fator a considerar era a interface do usuário que sempre foi um dos nossos diferenciais. Precisava-se utilizar de recursos e tecnologias novas usando novos frameworks especializados em frontend e PWA (Progressive Web App).

 

Solução

A palavra-chave que norteou nossa pesquisa foi Serverless, com foco em serviços totalmente gerenciados da AWS que permitiriam alta escalabilidade, reduzindo tanto custos, quanto tempo com gerenciamento de infraestrutura.

Em suma, iniciamos as pesquisas realizando uma busca detalhada pelos diversos serviços oferecidos pela AWS, tendo como fonte principal a documentação no próprio site da AWS.

Após o mapeamento elementar, queríamos validar nosso modelo. Por isso, participamos de diversos eventos presenciais da AWS e conseguimos algumas oportunidades de conversar em particular com os arquitetos palestrantes.

Queríamos uma receita de bolo, mas não havia. Dessas conversas, algumas validaram alguns serviços da AWS, outras traziam ainda mais variáveis para a pesquisa. Sem dúvidas, os encontros – sempre muito prestativos – os e-mails e as conferências online nos auxiliaram muito a transformar nosso modelo inicial.

Ademais, serviços, tecnologias e linguagens foram escolhidos, testadas e validadas. Hoje, nosso produto recebe o mesmo volume de dados da versão anterior, mas agora, esse ambiente é escalável automaticamente e auto gerenciado.

Sobre a Solução

Falando um pouco mais sobre a solução desenvolvida com apoio dos serviços AWS:

  1. Entrada e tratamento das posições

Todos os dados dos equipamentos (como geolocalização, telemetria e horário), instalados nos veículos se comunicam com a RotaExata de duas maneiras:

1.2. TCP/IP: Comunicação diretamente com a instância Amazon EC2.

1.2. Sistema de mensageria: O RotaExata possui um serviço o qual consome uma fila externa.

Estes dados passam por um breve tratamento para se adequar às especificações do RotaExata. Após serem enviados para a fila do SQS – uma função Lambda consome estas mensagens, realiza as adequações destes dados e por fim salva no MongoDB.

 

Arquitetura 1 – autoria própria

 

  1. Árbitro e gerenciamento das APIs

O Árbitro foi a forma que a RotaExata encontrou para gerenciar toda a camada de banco de dados, controle de acesso e APIs.

O sistema foi desenvolvido 100% pela RotaExata em Node.JS, com o intuito de agilizar o processo de criação de APIs, visto que esse faz todo o trabalho de comunicação com a camada de dados, tirando essa responsabilidade dos desenvolvedores e evitando possíveis erros.

Com o Árbitro, é possível gerar novas APIs em minutos, apenas criando um modelo de dados no formato JSON. Todo o Árbitro roda em funções do AWS Lambda e suas chamadas são gerenciadas pelo serviço Amazon API Gateway.

 

Arquitetura 2 – autoria própria

 

  1. Armazenamento de dados e Backup

O armazenamento de dados do RotaExata possui alguns estágios de disponibilidade para os clientes. Apesar de sempre estarem disponíveis, esses estão dispostos em lugares diferentes da AWS, de acordo com sua vida útil.

No começo de sua vida, todos os dados referentes à geolocalização dos veículos são enviados para o MongoDB (rodando em Amazon EC2) e para o Amazon Kinesis Data Firehose. Por ter um acesso mais rápido que o Amazon S3, os dados do MongoDB ficam armazenados por um período de 2 meses. Posteriormente, estes dados são excluídos e passam a ser consultados pelo cliente diretamente do Amazon S3.

O RotaExata armazena os dados em dois formatos diferentes no Amazon S3, a fim de garantir a durabilidade e disponibilidade. A consulta é feita de duas maneiras, ambas utilizando o sistema Árbitro.

Uma delas se utiliza do Amazon Athena para fazer consultas diretamente nos buckets do S3, e a outra busca os arquivos que foram pré-processados pelo RotaExata e salvos no bucket S3, formatados em JSON. Neste último, os arquivos são particionados por veículo/dia/mês/ano e utilizando o SDK para Node.js da AWS, é realizado o consumo destes arquivos.

 

Arquitetura 3 – autoria própria

 

  1. Frontend e relação com o usuário

A escolha da RotaExata para o desenvolvimento do front-end foi o framework Vue.js, devido à sua linha de aprendizagem, menor que outros frameworks disponíveis no mercado, como o React.

Além disso, o Vue.js possui uma grande comunidade de desenvolvedores, o que o mantém sempre atualizado. Por ser um framework desenvolvido completamente em JavaScript, a RotaExata utilizou o Amazon S3 para fazer o deploy da aplicação, utilizando Static website hosting e o Amazon CloudFront para disponibilizar o aplicativo mais próximo do cliente final, mitigação de DDoS e gerenciar cache.

 

Arquitetura 4 – autoria própria

 

Resultados

  1. Custo de infraestrutura

Os custos de infraestrutura foram reduzidos consideravelmente, isso se deve principalmente a eliminação de instâncias Amazon EC2, que muitas vezes se tornavam ociosas em determinados horários e dias da semana além da redução de disco do MongoDB.

A RotaExata teve uma redução de custos de aproximadamente 66% em comparação com a infraestrutura anterior.

  1. Economia de armazenamento de dados

A economia mais visível foi em comparação ao banco de dados MongoDB. Para a versão antiga do RotaExata, são utilizadas 3 instâncias Amazon EC2 da família m5.xlarge com capacidade 1,5TB cada. Para a nova versão, foram utilizadas somente 2 instâncias da família t3a.large com capacidade de 200GB cada.

Tivemos uma redução total de 4,1TB em espaço de armazenamento, além da redução da família das instâncias.

  1. Ganho de velocidade em gargalo de posições

Um dos maiores desafios da RotaExata era fazer com que o sistema suportasse a demanda atual, assim como futuras e ainda demandas imprevisíveis causadas por aumento repentino de posições, tais aumentos repentinos acontecem por problemas externos geralmente relacionados à comunicação do rastreador, é o que chamamos de gargalo de posições.

Com a atual arquitetura, foi possível utilizar serviços como o Amazon SQS e o AWS Lambda. Com a nova arquitetura, em casos de gargalos de posições, passamos de cerca de 1h para menos de 3 minutos para processar cerca de 100 mil itens em fila.

Para escalar no ambiente anterior, além de necessitar de muito trabalho, tínhamos dúvidas se seria possível escalar. Na nova arquitetura estamos seguros da capacidade de escala e ela acontece naturalmente com a demanda dos clientes.

  1. Melhoria na interface do sistema

Como estávamos recriando a nossa plataforma com novos e melhores recursos, aproveitamos para melhorar a interface, aplicando novas tecnologias.

Seguindo algumas metodologias de User Experience (UX) e User Interface (UI), desenhamos novos fluxos de usabilidade e navegação, contendo menos passos, mas criando aos usuários mais escolhas de customização. Além disso, aplicamos várias das heurísticas de Nielsen no projeto.

É claro que a mudança da tecnologia ajudou muito a aplicar todas essas mudanças. Com as tecnologias aplicadas no Frontend, como o Vue.js, Vuetify e Nuxt.js, tivemos a possibilidade de deixar nossa interface ainda mais intuitiva e fácil de ser utilizada, sem ter que adicionar muito mais complexidade na manutenibilidade do sistema.

Reforçamos ainda mais o nosso diferencial, o fato de se tratar de um sistema agradável e que qualquer pessoa aprende a utilizar rapidamente.

Abaixo, estão dois screenshots do nosso sistema:

Mapa principal

 

Imagem 1 – autoria própria

 

Relatórios

 

Imagem 2 – autoria própria

 

Motivação da equipe por trabalhar com tecnologias de ponta

No começo do projeto, não tínhamos o conhecimento técnico de todas as ferramentas que implementaríamos durante o desenvolvimento do produto.

Porém, por estarmos trabalhando com tecnologias atuais e recentes do mercado de trabalho, nossa equipe ficou mais motivada para aprendê-las, pois sabemos que será extremamente útil para a vida profissional individual de cada um, reforçando a necessidade de aprendê-las para desenvolvermos o produto esperado.

 

Afinal, o que é Serverless?

Serverless é uma forma de descrever os serviços, práticas e estratégias que permitem que você construa aplicações mais ágeis, para que você possa inovar e responder mais rapidamente às mudanças. Com a computação serverless, tarefas de gerenciamento de infraestrutura como provisionamento de capacidade e patching são executadas pela AWS, para que você possa se concentrar apenas em escrever códigos que atendam a seus clientes. Serviços serverless como o AWS Lambda, Amazon API Gateway e Amazon S3 vêm com dimensionamento automático, alta disponibilidade nativa e modelo de cobrança conforme o uso.

 

Benefícios

  • Mova da ideia para o mercado, com mais rapidez – eliminando a sobrecarga operacional, seus times podem realizar entregas mais rápido, coletar feedbacks, e iterar para chegar ao mercado mais rápido. Isso permite maior agilidade para o desenvolvimento de novos produtos e serviços, e o aprimoramento de produtos já existentes.
  • Adapte-se em grande escala – com tecnologias que automaticamente escalam de zero para picos de demanda, você pode se adaptar às necessidades do cliente mais rápido do que nunca. Assim, você não precisa adivinhar a capacidade exata de que precisa para atender a seus usuários, obtendo os benefícios da elasticidade que a nuvem oferece.
  • Diminua seus custos – Com um modelo de pagamento por consumo, você não paga por provisionamento excessivo, e a utilização de recursos é otimizada em seu nome. Isso porque os recursos são provisionados e dimensionados apenas no momento em que você necessita de uma maior capacidade, e conforme a sua demanda diminui, os recursos provisionados acompanham essa diminuição de demanda.
  • Construa melhores aplicações, com mais facilidade – Aplicações serverless possuem integrações nativas com serviços, para que você possa se concentrar na criação de sua aplicação, ao invés da configuração. Isso facilita a adição de novas funcionalidades ao seu aplicativo, para que possa gerar ainda mais valor, e oferecer uma experiência ainda melhor a seus clientes.

 

Exemplos de Casos de uso

  • Aplicações Web: é possível construir aplicações Web utilizando apenas componentes serverless, tanto para o seu backend, como o AWS Lambda e o Amazon API Gateway, quanto bancos de dados, com o Amazon DynamoDB, gerenciamento de usuários com o Amazon Cognito, e hospedagem de conteúdo estático usando o AWS Amplify Veja o código de exemplo e a arquitetura de referência em nosso repositório do GitHub.
  • Processamento de dados: por meio de serviços serverless, é possível construir um fluxo de processamento de arquivos, utilizando uma arquitetura de propósito geral, orientada a eventos e com processamento paralelo de dados, com o AWS Lambda. Esse tipo de arquitetura é ideal para workloads que necessitam de mais de um derivado de dados de um mesmo objeto, como transformar notas de uma entrevista em formato Markdown para HTML em um fluxo, e em outro detectar e persistir sentimentos a partir deste texto. Veja o código de exemplo e a arquitetura de referência em nosso repositório do GitHub.
  • Processamento em Batch:para cargas de trabalho de ETL (Extract, Transform, Load), é possível orquestrar todo este processo utilizando o AWS Step Functions, que coordena a execução de fluxos para a transformação de dados. Veja este exemplo de implementação que processa dados sobre a qualidade do ar global, gerando classificações de mínimo, máximo e média para medições diárias de qualidade do ar.
  • Ingestão de Eventos:é possível utilizar serviços de Machine Learning como o Amazon Comprehend e o Amazon Rekognition para indexar documentos e imagens de forma serverless, e enviar ao ElasticSearch para rápida indexação e busca. A utilização de filas neste cenário permite o processamento de grandes quantidades de documentos. Veja a arquitetura de referência neste blogpost, e o código de exemplo em nosso repositório do GitHub.
  • Chatbots: o Amazon Lex permite que você processe requisições de usuários e responda de acordo com as configurações do bot, de forma a desenvolver experiências envolventes e interações de conversação realistas para os seus clientes, de maneira Serverless. No momento em que este blogpost foi escrito, o Amazon Lex ainda não oferece suporte à língua portuguesa. Neste sentido, temos o Serverless Bot Framework, que permite que você adicione chatbots conversacionais sofisticados para uma aplicação web ou mobile existente, construído de forma Serverless, e que oferece suporte à língua portuguesa.

 

Próximos Passos

  1. Você está iniciando na área de Serverless?

Conforme mencionado anteriormente, o modelo Serverless permite que você construa aplicações mais ágeis, para que você possa inovar e responder mais rapidamente às mudanças – de forma que você possa se concentrar apenas em escrever códigos que atendam a seus clientes. Seguem alguns materiais que podem ajudá-lo a entender mais sobre o modelo Serverless, e como iniciar esta jornada utilizando as melhores práticas da AWS:

 

Série de Blogposts – Operating Lambda: Event-driven architectures

Série de blogposts sobre arquiteturas orientadas a eventos, dividida em 3 partes:

  • Parte 1: descreve os benefícios do paradigma orientado a eventos, e como este pode melhorar a capacidade de throughput, escala e extensibilidade;
  • Parte 2: explica alguns princípios de design e melhores práticas que podem ajudar desenvolvedores a obter os benefícios de construir aplicações baseadas em Lambda;
  • Parte 3: explica anti-padrões comuns em arquiteturas orientadas a eventos.

 

Série de vídeos – Build with DynamoDB

Série de vídeos sobre conceitos e modelagem no DynamoDB, dividida em 5 episódios:

 

Série de vídeos – AWS Serverless Road show

Série de vídeos que abordam conceitos básicos sobre Serverless na AWS, além de melhores práticas para desenvolver, operar e monitorar seus serviços de aplicativos sem servidor em escala, dividida em 9 episódios. Nesta série de webinars, você poderá aprender sobre as principais características do modelo serverless e seus benefícios, melhores práticas e dicas para construir aplicações serverless, automação de deployments e CI/CD, entre diversos outros tópicos relacionados a este modelo. Acesse nossa página de Webinars da AWS em Português para assistir de forma gratuita à série Serverless Road show, e outros Webinars sobre Serverless, e diversos outros temas.

 

2. Você está utilizando, e gostaria de otimizar?

Para manter a performance e o custo-benefício desejados para o seu ambiente, é importante realizar o seu monitoramento, e reavaliar periodicamente as decisões arquiteturais, de forma que a arquitetura continue refletindo os objetivos de seu negócio. Além disso, também é interessante avaliar se as ferramentas que você está utilizando no momento são as mais adequadas para o seu caso de uso, conforme novos serviços e funcionalidades vão sendo lançados. Seguem alguns materiais que podem ajudá-lo na otimização de seus recursos serverless na AWS:

 

Well Architected Tool – Serverless Lens

O AWS Well-Architected Tool é uma ferramenta gratuita que ajuda a analisar o estado das cargas de trabalho e as compara às mais recentes melhores práticas de arquitetura da AWS. Com o Serverless Lens, você consegue analisar o estado das suas cargas de trabalho de um ponto de vista mais específico para workloads serverless a partir do Well Architected Tool, e obter recomendações voltadas para aplicações que seguem este modelo.

 

Série de Blogposts – Operating Lambda: Performance Optimization
Série de blogposts sobre Otimização de performance no AWS Lambda, dividida em 3 partes:

  • Parte 1: descreve o ciclo de vida do ambiente de execução do Lambda, e explica como definir, medir e melhorar os cold starts;
  • Parte 2: explica os efeitos de configuração de memória na performance do Lambda, e como otimizar o código de inicialização estática da sua função;
  • Parte 3: descreve melhores práticas adicionais para melhorar a performance de suas funções Lambda, como diferentes casos de uso e otimização de custos no AWS Lambda.

 

Blogpost – Make a New Year’s resolution: Follow Amazon DynamoDB best practices

Este blogpost aborda 11 melhores práticas que podem ajudá-lo a maximizar a performance e minimizar custos de throughput no DynamoDB – como a utilização eficiente de índices secundários, formas de armazenar itens e atributos volumosos, modelagem de dados relacionais no DynamoDB, entre outros.

Para mais dicas e insights, siga o nosso AWS Serverless Blog e confira os blogposts do Principal Developer Advocate para o Time de Serverless da AWS James Beswick, autor de diversos artigos sobre Serverless no Blog da AWS.

 

Conclusão

Utilizando mecanismos como a otimização de seus recursos existentes, e a utilização de serviços serverless, a RotaExata conseguiu economizar aproximadamente 66% em comparação aos custos da infraestrutura anterior, e reduziu o tempo de processamento de 100 mil itens de 1h para menos de 3 minutos. A utilização de arquiteturas serverless, assim como o seu constante monitoramento e otimização pode ajudá-lo a aumentar a performance e o custo-benefício do seu ambiente. Para obter mais informações, visite a nossa página sobre Computação Serverless na AWS.

 


Sobre os autores

Eric Alexandre Massalli é um dos fundadores do RotaExata, responsável pelo direcionamento do produto tanto conceitual e mercadológico quanto tecnológico.

 

 

 

 

José Eduardo Fortunato é lider técnico no RotaExata há 7 anos, atua diretamente na arquitetura da solução garantindo a evolução tecnológica e escala da aplicação utilizando as soluções da AWS.

 

 

 

 

Lígia Harumi Yamamoto é arquiteta de soluções na AWS, apoiando clientes de diversas localidades e segmentos em suas jornadas de inovação e transformação digital na nuvem.