Lo que diferencia a Go de otros lenguajes de programación es la carga cognitiva. Puedes hacer más con menos código, lo que hace que sea más fácil razonar y comprender el código que terminas escribiendo.
La mayoría del código Go termina luciendo bastante similar, por lo que, incluso si estás trabajando con una base de código completamente nueva, puedes comenzar a ejecutarlo con bastante rapidez.
Go mejora los microservicios y acelera la productividad
Fundada en 1850, American Express es una empresa de pagos integrada globalmente que ofrece productos de tarjetas de crédito y cargo, servicios de procesamiento y adquisición de comerciantes, servicios de red y servicios relacionados con viajes.
Los sistemas de procesamiento de pagos de American Express se han desarrollado a lo largo de su larga historia y se han actualizado a través de múltiples evoluciones arquitectónicas. Lo más importante en cualquier actualización es que el procesamiento de pagos debe ser rápido, especialmente en volúmenes de transacciones muy grandes, con resiliencia construida en todos los sistemas que deben cumplir con los estándares regulatorios y de seguridad. Con Go, American Express gana la velocidad y escalabilidad que necesita tanto para sus redes de pagos como de recompensas.
Modernizando los sistemas de American Express
American Express entiende que el panorama de los lenguajes de programación está cambiando drásticamente. Los sistemas existentes de la empresa fueron diseñados específicamente para una alta concurrencia y baja latencia, pero sabiendo que esos sistemas cambiarían de plataforma en un futuro cercano. El equipo de la plataforma de pagos decidió tomarse el tiempo para identificar qué lenguajes eran ideales para las necesidades cambiantes de American Express.
Los equipos de la plataforma de pagos y recompensas de American Express estuvieron entre los primeros en comenzar a evaluar Go. Estos equipos se centraban en microservicios, enrutamiento de transacciones y casos de uso de equilibrio de carga, y necesitaban modernizar su arquitectura. Muchos desarrolladores de American Express estaban familiarizados con las capacidades del lenguaje y querían probar Go para sus aplicaciones de alta concurrencia y baja latencia (como balanceadores de carga transaccionales personalizados). Con este objetivo en mente, los equipos comenzaron a presionar a los altos directivos para implementar Go en la plataforma de pago American Express.
"Queríamos encontrar el lenguaje óptimo para escribir aplicaciones rápidas y eficientes para el procesamiento de pagos", dice Benjamin Cane, vicepresidente e ingeniero principal de American Express. "Para hacerlo, iniciamos un enfrentamiento interno de lenguajes de programación con el objetivo de ver qué lenguaje se adapta mejor a nuestras necesidades de diseño y rendimiento".
Comparando lenguajes
Para su evaluación, el equipo de Cane eligió crear un microservicio en cuatro lenguajes de programación diferentes. Luego compararon los cuatro lenguajes en cuanto a velocidad/rendimiento, herramientas, testing y facilidad de desarrollo.
Para el servicio, se decidieron por un conversor de ISO8583 a JSON. ISO8583 es un estándar internacional para transacciones financieras y se usa comúnmente dentro de la red de pagos de American Express. Para los lenguajes de programación, eligieron comparar C++, Go, Java y Node.js. Con la excepción de Go, todos estos lenguajes ya se utilizaban en American Express.
Desde la perspectiva de la velocidad, Go logró el segundo mejor rendimiento con 140.000 solicitudes por segundo. Go demostró que sobresale cuando se usa para microservicios backend.
Si bien es posible que Go no haya sido el lenguaje más rápido probado, sus poderosas herramientas ayudaron a reforzar sus resultados generales. El framework de testing integrado de Go, las capacidades de creación de perfiles y las herramientas de evaluación comparativa impresionaron al equipo. "Es fácil escribir tests efectivos en Go", dice Cane. “Las funciones de evaluación comparativa y creación de perfiles simplifican el ajuste de nuestra aplicación. Junto con sus rápidos tiempos de compilación, Go facilita la escritura de código optimizado y bien probado”.
Al final, el equipo seleccionó Go como el lenguaje preferido para crear microservicios de alto rendimiento. Las herramientas, los frameworks de prueba, el rendimiento y la simplicidad del lenguaje fueron todos contribuyentes clave.
Go para infraestructura
"Muchos de nuestros servicios se ejecutan en contenedores Docker dentro de nuestra plataforma de nube interna basada en Kubernetes", dice Cane. Kubernetes es un sistema de orquestación de contenedores de código abierto escrito en Go. Proporciona clústeres de hosts para ejecutar cargas de trabajo basadas en contenedores, sobre todo contenedores Docker. Docker es un producto de software, también escrito en Go, que utiliza virtualización a nivel de sistema operativo para proporcionar tiempos de ejecución de software portátiles llamados contenedores.
American Express también recopila métricas de aplicaciones a través de Prometheus, un conjunto de herramientas de alerta y monitoreo de código abierto escrito en Go. Prometheus recopila y agrega eventos y métricas en tiempo real para monitoreo y alertas.
Este triunvirato de soluciones Go (Kubernetes, Docker y Prometheus) ha ayudado a modernizar la infraestructura de American Express.
Mejorar el rendimiento con Go
Hoy en día, decenas de desarrolladores programan con Go en American Express, y la mayoría trabaja en plataformas diseñadas para alta disponibilidad y rendimiento.
"Las herramientas siempre han sido un área crítica de necesidad para nuestra base de código heredado", dice Cane. “Hemos descubierto que Go tiene excelentes herramientas, además de frameworks integrados de testing, evaluación comparativa y creación de perfiles. Es fácil escribir aplicaciones eficientes y resistentes”.
"Después de trabajar en Go, la mayoría de nuestros desarrolladores no quieren volver a otros lenguajes".
American Express apenas comienza a ver los beneficios de Go. Por ejemplo, Go fue diseñado desde cero teniendo en cuenta la concurrencia (utilizando “gorrutinas” livianas en lugar de subprocesos de sistema operativo más pesados), lo que hace que sea práctico crear cientos de miles de gorutinas en el mismo espacio de direcciones. Al utilizar gorutinas, American Express ha obtenido cifras de rendimiento mejoradas en su procesamiento de transacciones en tiempo real.
La recolección de basura de Go también es una mejora importante con respecto a otros lenguajes, tanto en términos de rendimiento como de facilidad de desarrollo. "Vimos resultados mucho mejores en la recolección de basura en Go que en otros lenguajes, y la recolección de basura para el procesamiento de transacciones en tiempo real es un gran problema". dice Cane. “Ajustar la recolección de basura en otros lenguajes puede resultar muy complicado. Con Go no sintonizas nada”.
Para obtener más información, lee “Elegiendo Go en American Express” , que profundiza en la adopción de Go por parte de American Express.
Cómo iniciar tu empresa con Go
Así como American Express está utilizando Go para modernizar sus redes de pago y recompensas, docenas de otras grandes empresas también están adoptando Go.
Hay más de un millón de desarrolladores que utilizan Go en todo el mundo, que abarcan banca y comercio, juegos y medios, tecnología y otras industrias, en empresas tan diversas como PayPal, Mercado Libre, Capital One, Dropbox, IBM, Mercado Libre, Monzo, New York Times, Salesforce, Square, Target, Twitch , Uber y, por supuesto, Google.
Para obtener más información sobre cómo Go puede ayudar a tu empresa a crear software confiable y escalable como lo hace American Express, visita go.dev.
Acerca de American Express
Go brinda a American Express la velocidad y escalabilidad que necesita tanto para sus redes de pago como para sus recompensas.