Recientemente, hemos realizado una migración desde Cloud Composer (Apache Airflow) a Cloud Workflows (servicio serverless de GCP) y los resultados han sido muy satisfactorios. Por ejemplo, hemos logrado ahorrar más de un 90% en el consumo y ahora tenemos un producto más robusto y sencillo.

En este post vamos a ver qué sistemas hay de orquestación en Google Cloud, cuáles eran nuestros problemas con Composer (puede que no sea vuestro caso), cómo migrar de un servicio a otro y nuestras conclusiones.

Seguro que este post os ayudará a tener más opciones a la hora de orquestar vuestros procesos en Google Cloud.

¿Qué es la orquestación?

Cuando hablamos de orquestación, a menudo nos viene a la cabeza la automatización de sistemas y servicios de forma coordinada y siguiendo un orden determinado dependiente de resultados anteriores o parámetros cambiantes en cada ejecución.

En un contexto de las arquitecturas orientadas a servicios, la orquestación puede ser sencilla como la ejecución de tareas programadas: envío de mails a un grupo determinado de usuarios, generación de reportes, etc. O, por el contrario, puede englobar un enfoque más complejo como la secuencia de operaciones en múltiples sistemas, esperando que se completen todas las operaciones, provisionando infraestructura de forma dinámica bajo demanda, que se ejecuta durante períodos de tiempo más prolongados y con la capacidad de reaccionar y manejar fallos y reintentos.

Cuando nos movemos hacia el contexto de la ingeniería de datos, la orquestación es fundamental para coordinar los servicios y los flujos de trabajo que preparan, incorporan y transforman los datos. Las tareas a realizar pueden ir más allá del simple procesamiento de datos e involucrar flujos de trabajo complejos que requieran entrenamiento de modelos, aprendizaje automático (ML) y transformaciones complejas a partir de combinaciones de distintas fuentes de datos.

¿Qué herramienta de orquestación utilizar?

Google Cloud Platform ofrece varias herramientas/servicios gestionados para orquestación:

Algunos ejemplos de cuándo usar cada uno de ellos:

Tanto Workflows como Cloud Composer se pueden usar para la orquestación de servicios con el fin de implementar funcionalidades complejas o realizar procesamiento de datos. Aunque son conceptualmente similares, cada uno está diseñado para un conjunto diferente de casos de uso. En la siguiente sección damos unos tips de cómo podemos saber qué servicio elegir para nuestra implementación.

Workflows vs Cloud Composer

La verdad es que en parte ambos servicios pueden tener cierto solapamiento, pero la principal diferencia es para qué tipo de arquitectura está diseñado cada producto.

Para facilitar la selección de uno u otro servicio presentamos la siguiente tabla comparativa:

Workflow orchestratorWorkflowsCloud Composer
SintaxisYAML o JSONPython
EstadoImperativoDeclarativo (DAG)
IntegracionesHTTP request
Conectores
Operators
Sensors
Triggers/Schedulinggcloud CLI, Google Cloud console, Workflows API, Workflows client libraries, Cloud Scheduler, EventracCron-like schedules in the DAG definition file, Airflow Sensors
Patrones asíncronosPolling
Callbacks
Waiting for long-running Google Cloud operations
Polling
Ejecución en paralelo
LatenciaMilisegundosSegundos
Vendor LockingOpen source (Apache Airflow)
Modelo de escaladoServerlessProvisioned
PricingPago por uso (por step ejecutado)Basado en la capacidad provisionada
Procesamiento de datosNo. Depende de integraciones con otros servicios de GCP (ejemplo: Dataprep, Dataflow…).Sí. Basado en las capacidades de Apache Airflow.

Si estás interesado en profundizar en el uso de Workflows como herramienta de orquestación te recomendamos que leas este post sobre cómo gestionar Workflows en modo serverless. Podrás profundizar en qué son, sus características y pondrás en práctica tus conocimientos.

Para este post nos hemos centrado en nuestra experiencia en migrar una aplicación completa desplegada en Cloud Composer a Workflows.

Nuestra experiencia migrando de Cloud Composer a Workflows + Cloud Run Jobs

Teniendo en cuenta todo lo anterior, nos propusimos migrar nuestros procesos de Cloud Composer a Workflows, por varias razones:

Con todas estas razones encima de la mesa nos pusimos manos a la obra. El objetivo del servicio en cuestión es personalizar el contenido de nuestro blog recomendando contenido similar dentro de los propios post. Es decir, mientras se visualiza un post del blog recomendar otros posts similares (puedes ver en este mismo post el “Editor's Picks” a la derecha 😜).

Partimos de un flujo definido en Cloud Composer donde cada DAG tiene como dependencia la salida del anterior: ya sea un fichero, un estado o llamada algún otro servicio. Cada DAG ejecuta una carga de trabajo que está contenerizada y se ejecuta en GKE, lo que nos ha permitido (con mínimos cambios en los Docker files) reutilizar en su totalidad los desarrollos.

Arquitectura de referencia de la que partimos:

Para hacernos una idea del flujo, debajo podemos la interfaz web de Airflow donde podemos ver todos los pasos que se siguen:

No vamos a entrar en el detalle de cada uno de los pasos, pero si es necesario ver cómo llegamos a simplificar este flujo utilizando tres Cloud Run Jobs y dos llamadas HTTP para obtener los mismos resultados.

Analizamos qué pasos era necesario migrar para seguir ejecutando, qué podíamos hacer vía asignación de variables y qué podríamos suprimir (como el aprovisionamiento de infraestructura). Teniendo en cuenta lo anterior la concusión fue:

Como se puede comprobar en la siguiente imagen el objeto de la refactorización fue el motor de recomendaciones “Recommendations engine”, pudiendo mantener el resto de servicios “as-is” y haciendo compatibles ambas arquitecturas para, llegado el día, sustituir un motor de recomendaciones por el otro.

Ahora hablemos de números. A continuación destacamos los aspectos más relevantes en la migración de nuestro servicio de orquestación para desarrollar un motor de recomendaciones:

Estrategia de migración:

La estrategia seguida ha sido Replatform. Partíamos de la base de que las aplicaciones ya estaban desarrolladas con frameworks “modernos” y eran portables. Lo que nos ha permitido aprovechar las capacidades nativas de la nube y movernos de manera fácil y rápida hacia un entorno serverless.

Tiempo de desarrollo e integraciones: < 10 días.

Podemos dividir el desarrollo en dos actividades principales:

Gracias a que las aplicaciones están desarrolladas con frameworks modernos y que eran portables, el mayor tiempo de migración se lo llevó el diseño y creación del workflow de recomendación. La reconfiguración y replataformado de las aplicaciones fue relativamente sencilla, teniendo que invertir la mayor parte del tiempo en la configuración de container command, variables de entorno, paralelismo de tareas y capacidad necesaria para ejecutar cada carga.

Las integraciones han venido marcadas por la naturaleza del servicio, siendo necesario integrarse con Secret Manager para la gestión de secretos y con un API externo para lanzar los Jobs relacionados con la transformación de los datos gestionados por el servicio. En este caso se han reutilizado todos los servicios, lo que se ha replataformado ha sido la forma en que se dispara la ejecución y la gestión de la recuperación del estado. Esto ha permitido que las integraciones hayan sido straight forward.

Recursos:

En la versión inicial del motor de recomendación se estaban utilizando los siguientes recursos:

Para la versión actual:

Sin tener en cuenta los recursos comunes, vemos que se ha reducido considerablemente el uso de recursos de los que hacemos uso para el motor de recomendación.

Nota: No se han tenido en cuenta los recursos comunes a ambas implementaciones: storage, egress, networking, etc.

Tiempos de ejecución:

Costes:

30 días comparando solo servicios de GCP Cloud composer vs Workflows (ver más abajo Nota). Se han reducido en un ~ 96%.

Nota. Tened en cuenta que en esta comparación se ha filtrado por “Servicio” de GCP: Cloud Composer en la primera imagen y Workflows en la segunda imagen. En el caso de Composer, este sería el punto de partida para levantar un entorno de Composer, pero los recursos levantados prácticamente no permiten ejecutar nada más que el entorno y en la mayoría de los casos es necesario ampliar la capacidad del cluster para ejecutar las tareas definidas. Para el caso de Workflows, se ha incluido únicamente el servicio, sin tener en cuenta los Cloud Run Jobs anteriormente mencionados como parte de la ejecución del proceso completo de recomendación.

Para ver una comparación un poco más amplia, en el siguiente punto se incluyen los recursos necesarios a nivel de computación para realizar el flujo de trabajo completo para ambos servicios de GCP.

Costes v2

30 días comparando servicios de GCP Composer vs Workflows y los recursos de computación asociados a cada solución para realizar el flujo de trabajo completo (ver más abajo Nota). Se han reducido en un ~ 98%.

Nota. En este caso la comparación se ha filtrado por “Servicio” de GCP: Cloud Composer y Compute Engine en la primera imagen, y Workflows y Cloud Run Jobs en la segunda imagen. En el caso de Composer, se han incluido los recursos de computación que se utilizan para ampliar la capacidad del cluster y así ejecutar las tareas definidas en el flujo de recomendación. Para el caso de Workflows, se ha incluido el servicio de GCP y los recursos de Cloud Run anteriormente mencionados como parte de la ejecución del proceso de recomendación.

Mirando hacia el futuro los siguientes pasos a corto plazo son:

Conclusiones

Invirtiendo algo de esfuerzo en refactorizar nuestros procesos internos, hemos conseguido modernizar en un tiempo asumible un motor de recomendaciones que es importante para nuestra compañía y en particular para nuestro equipo de marketing para reforzar el engagement de nuestros lectores.

Además de replataformar el motor de recomendaciones, hemos conseguido optimizar el proceso, reduciendo los tiempos de ejecución, los costes, los recursos utilizados y ajustandonos a las buenas prácticas recomendadas. Adicionalmente, hemos podido probar uno de los nuevos servicios de Google en Preview, Cloud Run Jobs, obteniendo muy buenas sensaciones tanto por su facilidad de uso como por su estabilidad y potencial.

Sabemos que no hemos dado mucho detalle de la creación y ejecución de los Cloud Run Jobs, eso lo dejamos para el siguiente post, donde nos centraremos en cómo hemos llevado la creación, integración y ejecución de los mismos. Seguro que estáis deseando leerlo 🙂 .

Referencias

Tell us what you think.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.

Enviar.
Goodly logo