Na nossa equipe de engenharia, somos apaixonados pelo desafio de comprovar a robustez de nossa infraestrutura e plataforma por meio de testes de carga, como parte do ciclo de vida de qualquer aplicativo. Neste artigo, contamos como realizamos um ambicioso teste de estresse e de carga em tempo real com um cliente. Esse processo nos permite levar nossa infraestrutura ao limite, testar seu desempenho e otimizá-la continuamente para garantir que ela esteja sempre pronta para ser escalada – afinal, essa é uma das nossas prioridades na Pomelo!
Recentemente, buscando levar nossas habilidades a outro patamar, propusemos um desafio raro no setor a um dos unicórnios mais importantes da América Latina: realizar juntos um teste de estresse em tempo real interligando as duas infraestruturas. Contamos a você tudo sobre a experiência neste artigo (spoiler: os resultados foram incríveis).
Por volta de 99,96% de nossas transações foram bem-sucedidas, com tempos médios de resposta de apenas 1,36 segundo. Mesmo com picos de 175 transações por segundo (TPS) e um estável 107 TPS de ponta a ponta, nossa plataforma conseguiu resistir ao teste de estresse. Mas o melhor de tudo é que, nos testes internos, atingimos a linha de base de 380 TPS, três vezes mais do que conseguimos na demonstração ao vivo, e ainda não atingimos um teto máximo.
🎙️ O sucesso de nossos testes ao vivo é um marco importante em nossa missão de fornecer soluções fintech inovadoras e confiáveis. Vamos continuar trabalhando incansavelmente para permanecer na vanguarda do mercado e superar as expectativas de nossos clientes.
Diego Burgos, CTO da Pomelo
No que consistiu o teste de estresse e de carga?
A fintech unicórnio nos contou sobre sua incerteza em relação ao volume de transações que precisaria processar por dia. Em resposta a essa preocupação, nosso CTO, Diego Burgos, teve a ideia de trazer à tona nossos testes de carga em tempo real, junto a sua equipe, para simular uma situação de transações em massa semelhante (ou superior) à esperada pela empresa – e demonstrar que a Pomelo está à altura de suas necessidades.
Imagine um estádio de futebol cheio de torcedores, cada um fazendo compras com cartão em uma fração de segundo e todas sendo facilmente processadas por uma única infraestrutura. Foi isso que nos desafiamos a mostrar nesse teste de estresse ponta-a-ponta (E2E)!
O fluxo desse teste de carga ao vivo consistiu em quatro partes:
- Criação bem-sucedida de até 200.000 novos usuários com nossa infraestrutura em minutos. Atingindo 260 TPS, em 12 minutos tínhamos basicamente 200.000 usuários prontos.
- Em seguida, registramos um cartão virtual para cada um desses 200.000 usuários, tudo em questão de minutos, como se fôssemos uma máquina emissora de cartões que nunca para!
- Com os usuários e os cartões criados, começamos a simular pelo menos uma transação por minuto para cada cliente e cartão. Tudo foi feito na rede da nossa processadora, seguindo cada um dos fluxos que compõem a nossa solução de Cards, como o fiscal e o de fraude, até que eles fossem concluídos e as transações chegassem à empresa para serem avaliadas.
- Nesse ponto da simulação, o cliente deveria estar pronto para aceitar e aprovar as transações. Portanto, em seu aprovador, ele deveria ter informações como o ID do usuário, o ID do cartão e o valor, podendo aprovar ou rejeitar a transação.
🎙️ Criar 200.000 usuários e cartões virtuais em um piscar de olhos é uma conquista impressionante. Isso demonstra nosso compromisso com a excelência e a escalabilidade de nossas soluções no espaço fintech.
Carlos Alvarez, Technical Expert da equipe de Issuing Cards da Pomelo
Vamos aos detalhes técnicos!
Vamos começar explicando como o fluxo de tráfego do Pomelo funciona em um alto nível! Primeiro, o cliente já estava integrado às APIs da Pomelo. Esse é um ponto muito importante – porque todas as transações e testes que fizemos simularam a mesma coisa que aconteceria quando o cliente estiver live.
No fluxo acima, podemos ver vários dos atores envolvidos. O primeiro é o nosso Pomelo Gateway, que nos dá a capacidade de mutual TLS, com troca de certificados com o cliente, criptografia do corpo da mensagem, lista de allowlist/blocklist do lado do cliente e validação do token auth0. Isso é muito importante porque nos dá uma segunda barreira em nossa segurança que tem um design de cebola. A camada externa da Cloudflare, depois o Pomelo Gateway e, em seguida, os próprios scopes dos aplicativos. Vale a pena observar que todo o tráfego de ponta a ponta do Pomelo é criptografado por mTLS.
Agora vamos ao teste propriamente dito! Primeiro, tivemos que simular os testes que o nosso cliente de criação de usuários e cartões iria realizar. Em nossa plataforma, temos um fluxo de duas etapas automatizado em que primeiro criamos usuários e, em seguida, geramos um novo cartão virtual atribuído a esse usuário. Tudo isso acontece em 1 segundo, no máximo 2, e com alta carga concorrente.
Cesar Correa, da nossa equipe de Reliability, também comenta sobre os testes de estresse:
🎙️ Criamos em Velocidade Pomelo um kit de teste de carga completo (Load Testing E2E), projetado especialmente para os Gamedays, que nos dá a flexibilidade de impactar os serviços, seja em conjunto, como um fluxo, ou isoladamente, para focalizar a análise de desempenho. Além disso, cada transação simulada é única e com parâmetros exclusivos de um conjunto de dados dinâmico.
Cesar Correa, Performance Engineer da equipe de Reliability
No fluxo, vemos nosso Pomelo Egress Gateway, que é o agente que vai criptografar novamente o corpo da mensagem que estamos enviando e cifrar a mensagem com o certificado do cliente. Nosso serviço interno de prevenção de fraudes, que fornece regras que são executadas em paralelo, fazendo todos os tipos de cálculos para encontrar padrões fraudulentos e, por fim, nosso serviço HSM de criptografia de camada dupla para a segurança dos dados de nossos clientes e usuários.
Para tornar isso mais gráfico, vejamos o seguinte fluxo de como o teste é executado usando o K6. Essa é uma ferramenta de teste de carga de código aberto criada em Go, que nos permite simular o tráfego de usuários sintéticos em nossa plataforma e medir seu comportamento em diferentes níveis de carga. Com o K6, validamos e garantimos a velocidade, a disponibilidade e a resiliência da nossa plataforma, suportando um grande número de transações ao mesmo tempo. Tudo isso para garantir o alto desempenho e a melhor experiência do usuário.
Para a preparação do fluxo transacional, lembremos que anteriormente o cliente tinha que criar os usuários com seus cartões atribuídos e realizar o balanço de carga no lado do autorizador. Dadas essas menções, vamos deixar um arquivo CSV com todas as informações dos cartões criados usando nossos próprios serviços de cartão. Com o K6, vamos ler esse arquivo e gerar os arquivos XML exigidos pela ISO 8583, para simular que somos a bandeira dos cartões. Com esses XML, enviamos as transações simulando transações em diferentes velocidades (20, 40, 60, 80 e 120 TPS).
O processo como um todo leva um total de 1 a 5 segundos, sob cargas de 120 requests por segundo.
O resultado geral do teste foi que 99,96% das nossas transações foram bem-sucedidas, com tempos médios de resposta de apenas 1,36 segundos. Até mesmo com picos de 175 TPS e um estável 107 TPS de ponta a ponta, nossa plataforma e a plataforma de nosso cliente conseguiram resistir ao teste de estresse. Esse volume é o mesmo que dizer que simulamos praticamente 10 milhões de transações em um dia. Garantimos que nossas transações fossem tão rápidas quanto um foguete! 🚀
Juntos, AWS, K6, Kubernetes e New Relic nos dão a capacidade de testar, escalar e monitorar nossa plataforma com eficiência, garantindo que sempre possamos oferecer um serviço de alta qualidade aos nossos usuários.
🎙️ Superar esse desafio foi realmente insano; não é algo comum no setor. Validamos com sucesso a infraestrutura, a arquitetura e a plataforma da Pomelo, demonstrando não apenas excelentes resultados e tempos de resposta, mas também nossa capacidade de ir além. Conseguimos atingir 380 TPS sem precisar fazer grandes mudanças, provando que nossa plataforma está pronta para enfrentar os desafios que estão por vir.
Juan José Behrend, Diretor de Engenharia da Pomelo
O que esta conquista significa para a Pomelo?
Os testes de carga e estresse ao vivo são uma parte essencial do nosso processo de garantia de qualidade para o desenvolvimento de software da Pomelo. Eles nos permitem identificar e resolver proativamente problemas de desempenho e escalabilidade antes que eles afetem nossos clientes. Ao colaborar com eles nesses testes, demonstramos nosso compromisso com a transparência e a melhoria contínua das nossas soluções!
Como parte do rigoroso procedimento pomeleiro, nossa equipe geralmente realiza os testes de estresse dos sistemas isoladamente, individualmente e de forma controlada, para encontrar oportunidades de melhoria e otimizar ainda mais seu desempenho. Um exemplo disso é o teste de estresse que fizemos sobre nossa tecnologia de biometria. No entanto, essa abordagem dinâmica de um Gameday ao vivo, juntamente com uma equipe externa, levou a capacidade da nossa equipe de tecnologia a outro nível e testou a robustez da nossa infraestrutura de forma categórica.
Em resumo, junto a um unicórnio da América Latina, provamos ser uma combinação vencedora, capaz de lidar com grandes volumes de transações, com tempos de resposta razoáveis e taxas de erro excepcionalmente baixas em um ambiente ao vivo. Estamos prontos para conquistar o mundo das transações juntos! 🏆🌍
Este teste é sem dúvidas um marco muito importante para validar a tese da nossa infraestrutura e, pensando no cliente, dá respaldo ao número de transações que podemos realizar.
Parabéns às nossas equipes de InfraSec, Payment Processor, Cards, Fraude e game-day-squad por essa incrível conquista!