Blog de Amazon Web Services (AWS)

Aprovechamiento de AWS CloudFormation para construir una infraestructura incambiable en Nubank

Por Bruno Halley Schaefer, software engineer, Nubank
Hugo Carvalho, senior solutions architect, AWS
Marcelo Nunes, senior technical account manager, AWS Enterprise Support Team.

 

 

Nubank, empresa brasileña, es uno de los bancos digitales independientes más grandes del mundo, está transformando de manera innovadora el panorama financiero de América Latina, proporcionando servicios transparentes, simples y eficientes. La empresa combate la complejidad para empoderar a las personas, devolverles el control de sus finanzas y redefinir sus relaciones con el dinero. Nubank nació en la nube y AWS los apoya en su viaje desde el primer día. El equipo de ingeniería de Nubank ha adoptado desde el principio ideas de programación funcional e inmutabilidad. Aplican conceptos de inmutabilidad a sus microservicios desarrollados usando Clojure y su gestión y persistencia de datos usando Datomic, y administran su infraestructura con la ayuda de AWS CloudFormation (https://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/Welcome.html)

 

Descripción general

Antes de que el computo en la nube se convirtiera en una realidad ampliamente disponible, construir una infraestructura de servidores implicaba adquirir costosos servidores físicos. Reemplazar estos servidores físicos era tan costoso y llevaba mucho tiempo que el enfoque más práctico era aplicar los cambios necesarios a los servidores que se ejecutan en producción. Esta es la naturaleza de una infraestructura cambiante, y todas estas modificaciones en sitio terminan dando lugar a temas críticos como la inconsistencia, la falta de fiabilidad y la creciente complejidad. Uno de los mayores retos en la construcción de infraestructura hoy en día es la previsibilidad. No obstante, gracias a la virtualización y la computación en la nube, ahora puede tener nuevos flujos de trabajo de implementación que pueden ayudar a las empresas a cumplir con este reto. Uno de estos nuevos flujos de trabajo se basa en la idea principal de infraestructura inmutable, donde no se permite ninguna modificación a un servidor en ejecución a menos que el servidor sea reemplazado por una nueva instancia que contenga todos los cambios necesarios.

 

¿Cómo se hace?

AWS CloudFormation (https://docs.aws.amazon.com/pt_br/AWSCloudFormation/latest/UserGuide/Welcome.html) proporciona un lenguaje común para que describa y aprovisione todos los recursos de infraestructura en su entorno de nube. Permite utilizar un archivo de texto sencillo para modelar y entregar, de manera automatizada y segura, todas las características que necesita para sus aplicaciones en todas las regiones y cuentas.

 

Infraestructura como Código

Antes de detallar el enfoque de Nubank hacia la infraestructura inmutable, es fundamental describir un aspecto fundamental de cómo Nubank maneja la infraestructura: todo tiene una representación de código en forma de archivos de definición. El siguiente es un ejemplo simplificado de una definición. Esta definición contiene la representación de código para un transactor Datomic que se ejecuta en un Amazon EC2 Auto Scaling Group (https://docs.aws.amazon.com/pt_br/autoscaling/ec2/userguide/GettingStartedTutorial.html).

{:name :ronaldo-datomic
:squad :platform
:environments {:staging #{:s0 :s1 :s2}}
:workload {:type :generic-legacy, :multiplier 1}
:storage {:type :dynamodb
:resource-name "ronaldo-datomic"}
:memory {:jvm-xmx "2500M"
:jvm-xms "2500M"
:object-cache-max "1g"
:memory-index-max "512m"}
:write-concurrency 5}

 

Infraestructura inmutable en Nubank

Estas definiciones son la fuente de la verdad de Nubank y su infraestructura siempre debe reflejar esa fuente de verdad. El siguiente diagrama muestra el patrón azul-verde seguido por Nubbank:

AWS CloudFormation ayuda a Nubank a lo largo de este proceso y se encuentra en el corazón de su infraestructura inmutable y su proceso de implementación azul-verde. Este servicio proporciona características de forma segura y replicable, lo que le permite construir y reconstruir su infraestructura y aplicaciones sin tener que realizar acciones manuales o escribir scripts personalizados. AWS CloudFormation se encarga de determinar las operaciones correctas a realizar al administrar su pila y revertirá los cambios automáticamente si se detectan errores.

Para aprovechar al máximo la energía proporcionada por AWS CloudFormation, Nubank utiliza Nimbus, una herramienta personalizada creada por Nubank. Nimbus, escrito en Clojure, es responsable de abstraer y automatizar las interacciones de Nubank con AWS y convierte los archivos de definición de Nubank en pilas de AWS CloudFormation.

El siguiente diagrama muestra cómo Nimbus interactúa con AWS CloudFormation para crear recursos de infraestructura:

 

 

Después de que Nubank cargue una plantilla en AWS CloudFormation, la herramienta (AWS CloudFormation) se encarga de crear sus recursos, respetar sus interdependencias y aplicar una operación de todo o nada: Todos los recursos se crean con éxito o ninguno de ellos se crea. Antes de eliminar las pilas de AWS CloudFormation (excluyendo así los recursos de nube asociados), el equipo de ingeniería de Nubank supervisa de cerca el estado general de los nuevos recursos a medida que aumentan gradualmente la carga. Para monitorear tus sistemas, Nubank monitoriza la actividad con dashboards en Grafana y con alertas de OpsGenie: todo creado en base a las métricas de Prometheus. Estas alertas también forman parte de la infraestructura de Nubank como código y por lo tanto también se representan usando archivos de definición de Nubank. El siguiente ejemplo es la definición de una alerta que tiene como objetivo capturar picos repentinos en la latencia del consumidor Kafka:

{:name :kafka-average-consume-latency-time-ms-too-high
:squad :runtime
:environments {:prod    #nu/prototypes-for [:prod :sharded+global+monitoring]
:staging #nu/prototypes-for [:staging :sharded+global+monitoring]
:test    #nu/prototypes-for [:test :nu+mobile]}
:expr ["avg(kafka_network_total_time_ms_fetch_consumer_95thpercentile) by (environment, prototype, stack_id) > " :threshold]
:threshold 600
:default-filter-labels [:squad]
:for-minutes 10
:alertmanager-labels {:severity "warning"}
:annotations {:stack       "{{ $labels.environment }}-{{ $labels.prototype }}-{{ $labels.stack_id }}"
:instance  "average for all instances"
:value       "{{ $value }}"}}

 

Conclusión

Nubank utiliza ampliamente AWS Cloudformation y hoy en día tienen más de 3000 pilas que se utilizan para administrar miles de recursos en la nube en varias regiones de AWS. Nubank crea pilas de AWS CloudFormation para manejar escenarios simples como aprovisionamiento de máquinas únicas de Amazon EC2, pero también crea pilas para manejar la infraestructura compleja e interdependiente, utilizada para admitir clústeres Kafka y Kubernetes. El siguiente diagrama muestra la plantilla AWS CloudFormation para uno de los clústeres Kubernetes de Nubank:

 

 

El equipo de ingeniería de Nubank está trabajando para que Nimbus forme parte de un proceso completamente automatizado, eliminando así la necesidad de interacción humana a través de una interfaz de línea de comandos (CLI). Este nivel de automatización permite aprovisionar nuevos recursos en la nube tan pronto como se modifica un archivo de definición de Nubank y se exporta a Amazon S3. No obstante, también puede retroceder automáticamente si se detecta un comportamiento extraño y potencialmente peligroso después del despliegue. Al aprovechar AWS Cloudformation, Nubbank puede crear unidades de implementación para recursos de infraestructura complejos, manteniendo bajo control la complejidad general de la administración.

 

Este artículo fue traducido del Blog de AWS en Portugués.

 

 


Sobre los autores

Bruno Halley Schaefer es ingeniero de software en Nubank. Como miembro del equipo de la plataforma, ayuda a diseñar herramientas de automatización para apoyar Nubank en un panorama de hipercrecimiento.

 

 

 

Hugo Carvalho, Arquitecto de Soluciones de AWS, se especializa en ayudar a las startups de diferentes niveles de madurez a crear plataformas sostenibles y altamente escalables en la nube. Con más de siete años de experiencia en la gestión de equipos tecnológicos y tecnológicos, Hugo ha ayudado a muchas empresas a definir, implementar y desarrollar soluciones tecnológicas para diferentes segmentos del mercado.

 

Marcelo Nunes es Technical Account Manager de AWS y apoya Nubank desde 2017. Con más de 20 años de experiencia tecnológica y como miembro del equipo de AWS Enterprise Support desde 2015, ha ayudado a muchas empresas en su viaje a AWS.

 

 

 

Sobre los traductores

David Reis es Principal, Solutions Architect en AWS Brasil.

 

 

 

 

Jorge Alfaro Hidalgo es Enterprise Solutions Architect en AWS México.