En nuestro equipo de ingeniería, nos apasiona el desafío de revisar la robustez de nuestra infraestructura y plataforma a través de pruebas de carga, como parte del ciclo de vida de cualquier aplicación. En este artículo vamos a contarte como con un cliente hicimos en tiempo real estas pruebas. Este proceso nos permite llevar nuestra infraestructura al límite, probar su rendimiento y optimizarla contínuamente para garantizar que siempre esté lista para escalar – ¡esta es una de nuestras prioridades en Pomelo!
Recientemente, con el objetivo de llevar nuestras habilidades al siguiente nivel, propusimos un desafío poco frecuente en la industria a uno de los unicornios más importantes de Latam: realizar juntos un stress testing real time enlazando ambas infraestructuras. Te contamos todo sobre la experiencia en este artículo — spoiler: los resultados fueron increíbles.
El 99.96% de nuestras transacciones fueron exitosas, con tiempos de respuesta promedio de solo 1.36 segundos. Incluso con picos de 175 TPS y un estable 107 TPS de extremo a extremo, nuestra plataforma pudo soportar con éxito la prueba de estrés. Pero lo mejor de todo es que en pruebas internas hemos llegado a 380 TPS de base, tres veces más de lo alcanzado en la demostración en vivo y aún no encontramos techo.
🎙️ El éxito de nuestras pruebas en vivo es un hito importante en nuestra misión de brindar soluciones fintech innovadoras y confiables. Seguiremos trabajando incansablemente para mantenernos a la vanguardia del mercado y superar las expectativas de nuestros clientes.
Diego Burgos, CTO de Pomelo
¿En qué consistió la prueba?
La fintech nos transmitió la incertidumbre que posee ante el volumen de transacciones que debe procesar por día y, como respuesta a esa inquietud, nuestro CTO Diego Burgos tuvo la idea de llevar al frente nuestras pruebas de carga en real time en conjunto con su equipo, para simular una situación de transacciones masivas semejante -o superior- a la esperada por la empresa, y demostrar que Pomelo está a la altura de sus necesidades.
Imaginen un estadio de fútbol repleto de fans, cada uno realizando compras con tarjetas en una fracción de segundos y todas siendo fácilmente procesadas por una única infraestructura. ¡Eso es lo que nos desafiamos a mostrar en este stress testing E2E!
El flujo de esta prueba de carga en vivo consistió de 4 partes:
- La creación exitosa de hasta 200 mil usuarios nuevos con nuestra infraestructura en minutos. Llegando a 260 tps, básicamente en 12 minutos teníamos los 200 mil usuarios listos.
- Luego, procedimos a dar de alta una tarjeta virtual para cada uno de esos 200 mil usuarios, todo en cuestión de minutos. ¡como si fuéramos una máquina expendedora de tarjetas que nunca se detiene!
- Con los usuarios y tarjetas creados, comenzamos a simular por lo menos una transacción por minuto, por cada cliente y tarjeta. Todo se realizó en la red de nuestro procesador, siguiendo cada uno de los flujos que integran nuestra solución de Cards, como el de impuestos y fraude, hasta completarlos y que las transacciones lleguen a la empresa para ser evaluadas.
- En este punto de la simulación, el cliente debió estar preparado para aceptar y aprobar las transacciones. Por lo tanto, en su aprobador deberán tener información como el ID del usuario, el ID de la tarjeta y el monto, pudiendo aprobar o rechazar la transacción.
🎙️ Crear 200,000 usuarios y tarjetas virtuales en un abrir y cerrar de ojos es un logro impresionante. Esto demuestra nuestro compromiso con la excelencia y la escalabilidad de nuestras soluciones en el espacio fintech.
Carlos Alvarez, Technical Expert del equipo de Issuing Cards de Pomelo
¡Vamos a los detalles técnicos!
¡Comencemos explicando cómo funciona a alto nivel el flujo del tráfico de Pomelo! Primero el cliente ya estaba integrado con las APIs de Pomelo, este es un punto muy importante ya que todas las transacciones y pruebas que hicimos, simulamos lo mismo que pasaría cuando el cliente esté live.
En el flujo anterior podemos ver varios de los actores involucrados, el primero es nuestro Pomelo Gateway, el cual nos brinda la habilidad de mutual TLS, con certificado intercambio con el cliente, encriptación del cuerpo del mensaje, listas de allowlist /blocklist según cliente y validación de tokens de auth0. Es muy importante porque nos da una segunda barrera en nuestra seguridad que tiene un diseño de cebolla. Capa exterior Cloudflare, luego Pomelo Gateway y luego los propios scopes de las aplicaciones. Vale aclarar que todo el tráfico end 2 end de Pomelo es encriptado mTLS.
¡Ahora, vayamos a la prueba en sí! Primero tuvimos que simular las pruebas que iba a realizar nuestro cliente de creación de usuarios y tarjetas. Dentro de nuestra plataforma, tenemos automatizado un flujo de dos pasos donde primero creamos usuarios, y segundo, generamos una nueva tarjeta virtual asignada a ese usuario. Todo esto sucede en 1 segundo, máximo 2, y con alta carga concurrente.
Cesar Correa, Performance Engineer de nuestro equipo de Reliability, también comenta sobre el stress testing:
🎙️ Construimos a velocidad Pomelo un kit de Load Testing end to end, diseñado especialmente para Gamedays. Éste nos da la flexibilidad de impactar servicios, ya sea de manera conjunta como un flujo, o de manera aislada para focalizar el análisis de desempeño. Adicionalmente cada transacción simulada es única y con parámetros únicos a partir de un conjunto de datos dinámicos.
En el flujo vemos que está nuestro Pomelo Egress Gateway, este es el actor que va a volver a encriptar el cuerpo del mensaje que estamos enviando y a cifrar el mensaje con el certificado del cliente. Nuestro servicio interno de prevención de fraude, que provee reglas que corren en paralelo haciendo todo tipo de cálculos para encontrar patrones fraudulentos, y por último nuestro servicio de HSM encriptador de doble capa para la seguridad de los datos de nuestros clientes y usuarios.
Para hacerlo más gráfico veamos el siguiente flujo de cómo se corre el test usando K6. Esta es una herramienta de prueba de carga de código abierto y construida en Go, la cual nos permite simular tráfico sintético de usuarios en nuestra plataforma y medir su comportamiento bajo diferentes niveles de carga. Con K6 validamos y aseguramos la velocidad, disponibilidad y resiliencia de nuestra plataforma, soportando un gran número de transacciones al mismo tiempo. Todo esto, en pos de garantizar alto rendimiento y la mejor experiencia al usuario.
Para la preparación del flujo transaccional recordemos que previamente el cliente debió crear los usuarios con sus tarjetas asignadas y colocarle balance del lado de su autorizador. Dadas estas menciones, vamos a dejar un CSV con toda la información de las tarjetas creadas utilizando nuestros propios servicios de cards. Con K6 vamos a leer este file y vamos a generar los archivos XML que la ISO 8583 requiere, para lograr simular que nosotros fuéramos la bandera de las tarjetas. Con estos XML enviamos las transacciones simulando transacciones en diferentes velocidades (20, 40, 60, 80 y 120 TPS).
Todo el proceso en roundtrip lleva en total de 1 a 5 segundos, bajo cargas de 120 requests por segundo.
El resultado total de la prueba fue el 99.96% de nuestras transacciones fueron exitosas, con tiempos de respuesta promedio de solo 1.36 segundos. Incluso con picos de 175 TPS y un estable 107 TPS de extremo a extremo, nuestra plataforma y la de nuestro cliente pudieron soportar con éxito la prueba de estrés. Este volumen es lo mismo que decir que simulamos prácticamente 10 millones de transacciones en un día. ¡Nos hemos asegurado de que nuestras transacciones sean tan rápidas como un cohete! 🚀
En conjunto AWS,K6, Kubernetes y New Relic nos brindan la capacidad de probar, escalar y monitorear nuestra plataforma de manera eficiente, asegurando que siempre podamos brindar un servicio de alta calidad a nuestros usuarios.
🎙️ Superar este desafío ha sido una verdadera locura; no es algo que se ve comúnmente en la industria. Hemos validado con éxito la infraestructura, arquitectura y plataforma de Pomelo, demostrando no solo excelentes resultados y tiempos de respuesta, sino también nuestra capacidad para ir más allá. Logramos alcanzar los 380 TPS sin tener que hacer ningún gran cambio, lo que demuestra que nuestra plataforma está lista para enfrentar cualquier desafío que se presente en el futuro.
Juan José Behrend, Director de Ingeniería de Pomelo
¿Qué significa este logro para Pomelo?
Las pruebas de carga y estrés en vivo son una parte esencial de nuestro proceso para garantizar la calidad en el desarrollo del software de Pomelo. Ellas nos permiten identificar y abordar proactivamente los problemas de rendimiento y escalabilidad antes de que afecten a nuestros clientes. Al colaborar con ellos en estas pruebas, ¡demostramos nuestro compromiso con la transparencia y la mejora contínua de nuestras soluciones!
Como parte del riguroso procedimiento pomelero, nuestro equipo usualmente se encarga de estresar los sistemas de forma aislada, individualmente y controladamente, para encontrar oportunidades de mejora y seguir optimizando su funcionamiento. Un ejemplo de ello es el stress testing que realizamos sobre nuestra tecnología de biometría. Sin embargo, esta dinámica propuesta de un gameday en vivo junto a un equipo externo, llevó las capacidades de nuestro equipo de tecnología a otro nivel y puso a prueba la robustez de nuestra infraestructura categóricamente.
En resumen, junto a un unicornio de Latam hemos demostrado ser una combinación ganadora, capaz de manejar grandes volúmenes de transacciones, con tiempos de respuesta razonables y tasas de error excepcionalmente bajas en un entorno en vivo. ¡Estamos listos para conquistar el mundo de las transacciones juntos! 🏆🌍
Sin dudas, esta prueba constituye un hito muy importante para validar la tesis de nuestra infraestructura, y de cara al cliente, respalda la cantidad de transacciones que podemos lograr.
¡Felicitaciones a nuestros equipos de InfraSec, Payment Processor, Cards, Fraude y al game-day-squad por este increíble logro!