Migración a la nube de Amadeus en instancias Ampere Altra — CodesCode

Aprende cómo la empresa global de tecnología de viajes Amadeus migró a instancias de Ampere Altra en Azure para aumentar hasta un 20% su rendimiento bruto y mejorar en un 50% el rendimiento/precio.

Este artículo fue publicado originalmente por Ampere Computing.

“Es posible que no estés familiarizado con Amadeus, porque es una empresa B2B [… pero] cuando buscas un vuelo o un hotel en Internet, es muy probable que estés utilizando un servicio alimentado por Amadeus detrás de escena”, según Didier Spezia, un arquitecto de nube para Amadeus.

Amadeus es una importante empresa global de tecnología para viajes, que impulsa las actividades de muchos actores en la industria de viajes: aerolíneas, cadenas hoteleras, agencias de viajes, aeropuertos, etc. Una de las actividades de Amadeus es proporcionar servicios de compra para buscar y fijar precios de vuelos a agencias de viajes y empresas como Kayak o Expedia. Amadeus también admite capacidades más avanzadas, como consultas basadas en presupuestos y consultas basadas en calendario, que requieren el pre-cálculo de índices multidimensionales. La búsqueda de vuelos adecuados con asientos disponibles entre muchas aerolíneas es sorprendentemente difícil.

Obtener la solución óptima se considera un problema NP-completo, por lo que para proporcionar una respuesta de mejor esfuerzo, Amadeus utiliza una combinación de fuerza bruta, algoritmos de gráficos y heurísticas. Requiere sistemas distribuidos a gran escala y consume muchas CPUs, que se ejecutan en miles de máquinas en las instalaciones de Amadeus hoy en día. Para cumplir con las solicitudes de los clientes, Amadeus opera múltiples instalaciones locales en todo el mundo y también ejecuta carga de trabajo en varios proveedores de servicios en la nube.

El proyecto

Hace algunos años, Amadeus comenzó un proyecto grande y de varios años para migrar la mayor parte de los recursos locales de Amadeus a Azure. Para este caso de uso específico, Amadeus trabajó en colaboración con Microsoft para validar las máquinas virtuales (VM) basadas en ARM de Ampere.

Durante la discusión, Mo Farhat de Microsoft comentó:

Desde nuestra posición, Microsoft quiere ofrecer a nuestros clientes opciones. No los dirigimos hacia una arquitectura en particular o uno CPU en particular. Queremos proporcionar un menú de opciones y brindar consejos confiables…

Inicialmente, como parte de la transición, Amadeus no estaba necesariamente interesado en introducir una arquitectura diferente. Según Spezia:

Solo introducimos una arquitectura diferente si esperamos algún beneficio… Estamos muy interesados en la relación rendimiento/precio que podemos obtener de Ampere… Queremos tener la capacidad de utilizar máquinas con CPUs tradicionales x86 y máquinas con CPUs Ampere y ejecutar carga de trabajo en las CPUs más adecuadas para esa carga de trabajo.

Eligió una aplicación de C++ intensiva en cómputo, distribuida y grande como la primera en ejecutarse en Ampere, ya que consideró que esto proporcionaría el mayor beneficio comparativo en comparación con x86.

Pensamos que las máquinas basadas en ARM podrían ser una buena opción, pero por supuesto, necesitábamos validar y confirmar nuestras suposiciones. Comenzamos ejecutando una serie de pruebas sintéticas. […] Los resultados fueron positivos, pero las pruebas sintéticas no son extremadamente relevantes. Dado que la introducción de una nueva arquitectura de CPU en el ecosistema no es neutral, necesitábamos una garantía mejor y decidimos hacer pruebas de rendimiento con código de aplicación real. […] La aplicación es una base de código grande de C++. Depende de una serie de bibliotecas de código abierto de bajo nivel, además de algunas bibliotecas de middleware de Amadeus y, finalmente, el código funcional en sí. Se ha aislado un subconjunto de este código para ejecutar pruebas en un entorno de prueba.

Uno de los factores que permitió que el proyecto tuviera éxito fue la capacidad del equipo de Amadeus para obtener servidores Ampere temprano en el proyecto. Según Didier:

Para comenzar, Amadeus instaló un par de máquinas con CPUs Ampere Altra localmente. Se utilizaron para el trabajo de migración inicial, y aún hoy ejecutan nuestra integración y entrega continua (CI/CD). Dado que nos encontramos en medio de una migración a la nube pública y estamos en un modelo híbrido con un ecosistema complejo, apreciamos la flexibilidad de implementar algunas máquinas localmente, con la misma arquitectura de CPU que las VM entregadas en Azure por Microsoft. Nos resultó invaluable usar máquinas que ejecutaban la arquitectura objetivo para la CI/CD y las pruebas, en lugar de hacer compilación cruzada,

La CI de la aplicación sigue ejecutándose en un servidor Ampere en el laboratorio de Amadeus.

Desafíos

El proceso de migración de nuestro código comenzó recompilando todo utilizando una cadena de herramientas compatible con Arm64 (destino Aarch64), con implicaciones en nuestro CI/CD.

El proceso de migración de hacer que este código funcione en Ampere fue muy fluido, aunque se revelaron algunos problemas. Algunos comportamientos del compilador específicos de la plataforma, como si el tipo de datos “char” es firmado o sin signo, eran diferentes en x86 y Arm64, y la aplicación hacía suposiciones sobre este comportamiento.

Para compilar su extenso código C++, Amadeus utiliza tanto el compilador GCC como el compilador Clang C++. Como parte de la adaptación, se requirió la actualización de varias dependencias de código abierto para aprovechar el mejor soporte de Arm64. Algunas de estas actualizaciones implicaron cambios en la API o en el comportamiento que requerían modificaciones adicionales en el código. Además, durante la migración, se expusieron y solucionaron varios problemas latentes en el código que no se habían manifestado en x86, relacionados con comportamientos indefinidos o definidos por la plataforma.

Despliegue

En la nube, las aplicaciones de Amadeus se despliegan en clústeres OpenShift (la plataforma de contenedores basada en Kubernetes de Red Hat). Para operar en producción, las aplicaciones requieren todo un ecosistema de middleware (servidor de servicios empresariales, facilidades de registro y monitoreo, etc.), que también está alojado en OpenShift.

Amadeus no deseaba migrar toda su infraestructura de aplicaciones a Arm64. Red Hat, otro socio de confianza, ha implementado una característica en Kubernetes que permite admitir arquitecturas de hardware heterogéneas en un único clúster como una función compatible en OpenShift.

Concretamente, esto significa que un único clúster de OpenShift puede incluir nodos tanto x86 como ARM. Definiendo conjuntos de nodos con ambos tipos, y utilizando etiquetas y “taints” para los contenedores a desplegar, los desarrolladores pueden decidir fácilmente el tipo de máquina virtual (VM) en la cual se programarán los “pods”. Los componentes de soporte de la infraestructura de aplicaciones de Amadeus pueden, por lo tanto, ejecutarse en VMs x86 tradicionales, mientras que los “pods” de aplicación que Amadeus decida ejecutar por motivos de costo y rendimiento en Arm64 pueden ejecutarse en VMs Azure Dps v5 con CPUs Ampere Altra.

Los clústeres heterogéneos son fundamentales para admitir una migración incremental y evitar duplicar la cantidad de clústeres OpenShift que deben ser operados.

Resultados

Obviamente, antes de pasar a producción, Amadeus quería validar sus suposiciones con algunas pruebas de referencia. Con la prueba sintética cpubench1a, utilizando VMs de 32 vCPUs, una única VM Ampere Altra (D32ps_v5) entregó un rendimiento bruto un 20% mayor y una mejora del 50% en rendimiento/precio en comparación con las VMs Intel equivalentes, y un rendimiento bruto un 13% mayor y un 27% de mejora en rendimiento/precio en comparación con las VMs AMD equivalentes.

Cuando se realizaron pruebas de referencia con la aplicación de compras realista, hubo una compensación entre rendimiento y tiempo de respuesta. A mayor rendimiento, más se veía afectado el tiempo de respuesta. Las VMs Ampere Altra obtuvieron una mejora del 47% en rendimiento/precio, con una degradación aceptable del 11% en el tiempo de respuesta promedio en comparación con las VMs Intel, y un rendimiento/precio un 37% mayor con una degradación del 9% en el tiempo de respuesta promedio en comparación con las VMs AMD.

Amadeus ahora ha adaptado suficientes componentes de la aplicación para ejecutar la aplicación real (no solo pruebas de referencia). Actualmente, la compañía está completando pruebas de integración y validando los últimos detalles de la plataforma. Una vez que se complete, Amadeus comenzará a aumentar el entorno de producción en múltiples regiones de Azure.

Construidos para la computación en la nube sostenible, los primeros procesadores nativos de la nube de Ampere ofrecen un rendimiento predecible, escalabilidad de plataforma y eficiencia energética sin precedentes en la industria. Los invitamos a aprender más sobre nuestros esfuerzos para desarrolladores, encontrar las mejores prácticas, conocimientos y unirse a la conversación en: developer.amperecomputing.com y community.amperecomputing.com.

Hable con nuestro experto equipo de ventas sobre asociaciones o para obtener más información, o acceda a la versión de prueba de los sistemas Ampere a través de nuestros Programas de Acceso para Desarrolladores.

Comparte este artículo


Leave a Reply

Your email address will not be published. Required fields are marked *