Meetup Microservicios - Orquestando microservicios
Orquestando microservicios
como lo hace Netflix
Meetup Microservicios - Orquestando microservicios
Grupo de meetup Microservicios
¡ Bienvenidos !
Meetup Microservicios - Orquestando microservicios
BIO
Borja Gómez
Arquitecto Software@Paradigma Digital
bgomez@paradigmadigital.com
@borjagomez
Meetup Microservicios - Orquestando microservicios
Grupo de meetup Microservicios
‘Orquestando Microservicios
como lo hace Netflix’
Meetup Microservicios - Orquestando microservicios
Objetivos de la sesión
● ¿Por qué orquestación de microservicios?
● Características orquestación
● Netflix Conductor
● Demo
Meetup Microservicios - Orquestando microservicios
¿Por qué la orquestación?
La primera aproximación es la de mediación. También son llamados servicios de
segundo nivel, o microservicios de negocio.
En algunos casos esta alternativa es buena. Pero cuando los tiempos o la
complejidad aumentan, parece necesario tener una lógica más enfocada a los
procesos.
Meetup Microservicios - Orquestando microservicios
¿Por qué la orquestación?
Los microservicios muchas veces no aportan valor por sí mismos.
- ¿Qué me aporta funcionalmente insertar un registro en una tabla de
auditoría?
- ¿De qué me sirve tener codificado un video si no lo subo al catálogo?
La problemática con microservicios es similar a la que vivimos con SOA: lo que
aporta valor al negocio es la funcionalidad, y en multitud de ocasiones esta
funcionalidad se implementa con un flujo de negocio, y no una llamada única.
Meetup Microservicios - Orquestando microservicios
¿Por qué la orquestación?
Consultar Cliente
en BD
Insertar en BD
Clientes
Insertar cuenta en
BD Cuentas
Creación Cuenta
Editar el estilo de texto del patrón
Orquestación VS Coreografía
Meetup Microservicios - Orquestando microservicios
Orquestación VS Coreografía
La orquestación de microservicios implica tener una entidad central que gobierna
el flujo de trabajo, decidiendo a qué servicios invocar y cuándo.
La coreografía prescinde de esta entidad central, delegando en los microservicios el
control del flujo.
Meetup Microservicios - Orquestando microservicios
Orquestación VS Coreografía
Con la orquestación, es necesario una pieza central que lo gobierne. Entonces…
Mejor la coreografía, ¿no? ¿Por qué hablamos de orquestación?
LET ME THINK
Meetup Microservicios - Orquestando microservicios
Orquestación VS Coreografía
Pese a que la orquestación necesita de un componente central, tiene ventajas:
● Los microservicios no tienen que conocer el proceso de negocio.
○ Cumplen el Principio de Responsabilidad Única.
● Tenemos una pieza central a la que podemos preguntar por el estado de los procesos,
estadísticas, etc.
● Permite la migración de versiones de procesos comenzados.
La coreografía por su parte tiene las siguientes desventajas:
● Es complicado escalar en funcionalidad. Cualquier cambio en un servicio impacta al flujo
completo.
● Es muy complejo conocer el estado de los procesos.
● Los microservicios deben conocer el proceso, y por lo tanto tienen una complejidad
mayor.
Editar el estilo de texto del patrón
Netflix Conductor
Meetup Microservicios - Orquestando microservicios
Netflix Conductor
¿Qué es?
Un orquestador de flujos que corre en entornos cloud y que permite implementar
cada una de las tareas mediante el uso de microservicios.
El reto de Netflix era crear un producto que permitiese orquestar los flujos
manteniendo las ventajas de usar un sistema basado en microservicios.
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Arquitectura de la Solución
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Tareas
● Tareas de Sistema
1. Fork: crea una bifurcación en paralelo.
2. Fork_join_dynamic: realiza la paralelización en función de la expresión de entrada.
3. Join: hace un join de un flujo previamente bifurcado.
4. Decide: condicional, de forma similar a un “case switch”.
5. Sub_workflow: arranca un flujo como una tarea. El flujo queda pausado hasta que el subflujo termina.
6. Wait: introduce un punto de parada asíncrono en el flujo. Se mantiene en estado in_progress hasta que se actualiza con estado
completed o failed.
7. HTTP: ejecuta la llamada a un microservicio a través de HTTP. Dicha invocación se regirá por la política de reintentos declarada al
definir la tarea.
8. Eventos: pueden arrancar una instancia de un flujo, y marcar una tarea como fallida o completada.
● Tareas simples: implementadas en el worker. Son las tareas enfocadas al negocio en sí. Las tareas se comunican con Conductor
mediante un sistema de polling para recuperar tareas programadas del tipo configurado, y la devuelven actualizada. En ese momento es
cuando Conductor continúa el flujo a partir de la tarea actualizada.
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Tareas
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Editor de Flujos
Una de las ventajas de Conductor es que huye de notaciones complejas, apostando por la simplicidad de JSON.
Los flujos se definen como una sucesión de tareas y eventos, que se definen en base a unos parámetros:
- Nombre: nombre de la tarea.
- Tipo de Tarea: tipo formal de la tarea.
- Recuento:
- Numero máximo de intentos.
- Tipo de Reintento. Fijo cada x segundos o exponencial en función del número de reintentos.
- Timeout. Fijado en
- Política de timeout: reintentar, marcar flujo como timed_out o simplemente informar.
- Parámetros de entrada salida.
Todo esto, se ve muy fácilmente en un visor de flujos incorporado en la herramienta.
JSONPath
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Contexto de Datos
Conductor permite el intercambio de información entre los compomentes del flujo.
Tiene dos contextos: workflow y task..
El binding de los datos se realizará mediante el uso de JSONPath, que implementa la mayoría de funcionalidad
de XPath para JSON.
${SOURCE.input.phoneNumbers[:1].number}
Y todos los que hemos trabajado con XPath…
Sabemos que con XPath puedes hacer (casi) cualquier cosa. JSONPath
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Contexto de Ejecución
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Monitorización
Conductor usa Spectator para la recolección me métricas de uso. Destacan las siguientes métricas:
1. workflow_server_error: Porcentaje de errores en servidor
2. workflow_failure: Contador para flujos que han fallado
3. workflow_start_error: Contador de errores al arrancar un flujo
4. workflow_running: Contador de flujos en estado “running”
5. task_queue_wait: Tiempo que lleva una tarea en la cola
6. task_execution: Tiempo que ha tardado en completarse la tarea
7. task_poll : Tiempo que ha tardado la tarea en ser asignada
8. task_queue_depth: Tareas en espera de asignación
9. task_timeout: Contador de tareas que han caído en time-out.
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Configuración
Una de las ventajas de conductor frente a otros orquestadores es la fuerte modularización. Casi todas las capas
son pluggables, de forma que podemos cambiar el producto que usamos e incluso la implementación.
Para ello es necesario implementar las siguientes interfaces para cada backend.
//Store for workflow and task definitions
com.netflix.conductor.dao.MetadataDAO
//Store for workflow executions
com.netflix.conductor.dao.ExecutionDAO
//Index for workflow executions
com.netflix.conductor.dao.IndexDAO
//Queue provider for tasks
com.netflix.conductor.dao.QueueDAO
Meetup Microservicios - Orquestando microservicios
Netflix Conductor: Configuración
Para realizar la configuración, contamos con un fichero de configuración:
Meetup Microservicios - Orquestando microservicios
Demo
Demo
Meetup Microservicios - Orquestando microservicios
Demo: por si hay efecto demo
Meetup Microservicios - Orquestando microservicios
Nuestra Experiencia
Editar el estilo de texto del patrón
Mutua Madrileña. Definición Arquitectura de Aplicaciones
Orquestación de Procesos vs Orquestación de Servicios
Condiciones del Servicio / Entendimiento y enfoque de requisitos / Arquitectura Final/ Orquestación
Orquestación de Procesos (BPM) Orquestación de Servicios
Control de estado Sin estado
Larga duración Duración generalmente corta (no necesariamente)
Alta interacción con usuario (formularios, tareas manuales) Sin interacción con usuario.
UI para creación de flujos. Fácilmente entendible por negocio Generalmente carecen de IDE. Exigen más conocimiento técnico.
Muy completo: timers, events, tasks, relanzamiento, fault… Menor funcionalidad
Puede convertirse en un punto crítico del sistema Alto rendimiento. Perfecto encaje en modelo de microservicios
Ofrece mecanismos de compensación Es necesario implementar los mecanismos de compensación
We are hiring
people@paradigmadigital.com

Orquestando microservicios como lo hace Netflix

  • 1.
    Meetup Microservicios -Orquestando microservicios Orquestando microservicios como lo hace Netflix
  • 2.
    Meetup Microservicios -Orquestando microservicios Grupo de meetup Microservicios ¡ Bienvenidos !
  • 3.
    Meetup Microservicios -Orquestando microservicios BIO Borja Gómez Arquitecto Software@Paradigma Digital bgomez@paradigmadigital.com @borjagomez
  • 4.
    Meetup Microservicios -Orquestando microservicios Grupo de meetup Microservicios ‘Orquestando Microservicios como lo hace Netflix’
  • 5.
    Meetup Microservicios -Orquestando microservicios Objetivos de la sesión ● ¿Por qué orquestación de microservicios? ● Características orquestación ● Netflix Conductor ● Demo
  • 6.
    Meetup Microservicios -Orquestando microservicios ¿Por qué la orquestación? La primera aproximación es la de mediación. También son llamados servicios de segundo nivel, o microservicios de negocio. En algunos casos esta alternativa es buena. Pero cuando los tiempos o la complejidad aumentan, parece necesario tener una lógica más enfocada a los procesos.
  • 7.
    Meetup Microservicios -Orquestando microservicios ¿Por qué la orquestación? Los microservicios muchas veces no aportan valor por sí mismos. - ¿Qué me aporta funcionalmente insertar un registro en una tabla de auditoría? - ¿De qué me sirve tener codificado un video si no lo subo al catálogo? La problemática con microservicios es similar a la que vivimos con SOA: lo que aporta valor al negocio es la funcionalidad, y en multitud de ocasiones esta funcionalidad se implementa con un flujo de negocio, y no una llamada única.
  • 8.
    Meetup Microservicios -Orquestando microservicios ¿Por qué la orquestación? Consultar Cliente en BD Insertar en BD Clientes Insertar cuenta en BD Cuentas Creación Cuenta
  • 9.
    Editar el estilode texto del patrón Orquestación VS Coreografía
  • 10.
    Meetup Microservicios -Orquestando microservicios Orquestación VS Coreografía La orquestación de microservicios implica tener una entidad central que gobierna el flujo de trabajo, decidiendo a qué servicios invocar y cuándo. La coreografía prescinde de esta entidad central, delegando en los microservicios el control del flujo.
  • 11.
    Meetup Microservicios -Orquestando microservicios Orquestación VS Coreografía Con la orquestación, es necesario una pieza central que lo gobierne. Entonces… Mejor la coreografía, ¿no? ¿Por qué hablamos de orquestación? LET ME THINK
  • 12.
    Meetup Microservicios -Orquestando microservicios Orquestación VS Coreografía Pese a que la orquestación necesita de un componente central, tiene ventajas: ● Los microservicios no tienen que conocer el proceso de negocio. ○ Cumplen el Principio de Responsabilidad Única. ● Tenemos una pieza central a la que podemos preguntar por el estado de los procesos, estadísticas, etc. ● Permite la migración de versiones de procesos comenzados. La coreografía por su parte tiene las siguientes desventajas: ● Es complicado escalar en funcionalidad. Cualquier cambio en un servicio impacta al flujo completo. ● Es muy complejo conocer el estado de los procesos. ● Los microservicios deben conocer el proceso, y por lo tanto tienen una complejidad mayor.
  • 13.
    Editar el estilode texto del patrón Netflix Conductor
  • 14.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor ¿Qué es? Un orquestador de flujos que corre en entornos cloud y que permite implementar cada una de las tareas mediante el uso de microservicios. El reto de Netflix era crear un producto que permitiese orquestar los flujos manteniendo las ventajas de usar un sistema basado en microservicios.
  • 15.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Arquitectura de la Solución
  • 16.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Tareas ● Tareas de Sistema 1. Fork: crea una bifurcación en paralelo. 2. Fork_join_dynamic: realiza la paralelización en función de la expresión de entrada. 3. Join: hace un join de un flujo previamente bifurcado. 4. Decide: condicional, de forma similar a un “case switch”. 5. Sub_workflow: arranca un flujo como una tarea. El flujo queda pausado hasta que el subflujo termina. 6. Wait: introduce un punto de parada asíncrono en el flujo. Se mantiene en estado in_progress hasta que se actualiza con estado completed o failed. 7. HTTP: ejecuta la llamada a un microservicio a través de HTTP. Dicha invocación se regirá por la política de reintentos declarada al definir la tarea. 8. Eventos: pueden arrancar una instancia de un flujo, y marcar una tarea como fallida o completada. ● Tareas simples: implementadas en el worker. Son las tareas enfocadas al negocio en sí. Las tareas se comunican con Conductor mediante un sistema de polling para recuperar tareas programadas del tipo configurado, y la devuelven actualizada. En ese momento es cuando Conductor continúa el flujo a partir de la tarea actualizada.
  • 17.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Tareas
  • 18.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Editor de Flujos Una de las ventajas de Conductor es que huye de notaciones complejas, apostando por la simplicidad de JSON. Los flujos se definen como una sucesión de tareas y eventos, que se definen en base a unos parámetros: - Nombre: nombre de la tarea. - Tipo de Tarea: tipo formal de la tarea. - Recuento: - Numero máximo de intentos. - Tipo de Reintento. Fijo cada x segundos o exponencial en función del número de reintentos. - Timeout. Fijado en - Política de timeout: reintentar, marcar flujo como timed_out o simplemente informar. - Parámetros de entrada salida. Todo esto, se ve muy fácilmente en un visor de flujos incorporado en la herramienta. JSONPath
  • 19.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Contexto de Datos Conductor permite el intercambio de información entre los compomentes del flujo. Tiene dos contextos: workflow y task.. El binding de los datos se realizará mediante el uso de JSONPath, que implementa la mayoría de funcionalidad de XPath para JSON. ${SOURCE.input.phoneNumbers[:1].number} Y todos los que hemos trabajado con XPath… Sabemos que con XPath puedes hacer (casi) cualquier cosa. JSONPath
  • 20.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Contexto de Ejecución
  • 21.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Monitorización Conductor usa Spectator para la recolección me métricas de uso. Destacan las siguientes métricas: 1. workflow_server_error: Porcentaje de errores en servidor 2. workflow_failure: Contador para flujos que han fallado 3. workflow_start_error: Contador de errores al arrancar un flujo 4. workflow_running: Contador de flujos en estado “running” 5. task_queue_wait: Tiempo que lleva una tarea en la cola 6. task_execution: Tiempo que ha tardado en completarse la tarea 7. task_poll : Tiempo que ha tardado la tarea en ser asignada 8. task_queue_depth: Tareas en espera de asignación 9. task_timeout: Contador de tareas que han caído en time-out.
  • 22.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Configuración Una de las ventajas de conductor frente a otros orquestadores es la fuerte modularización. Casi todas las capas son pluggables, de forma que podemos cambiar el producto que usamos e incluso la implementación. Para ello es necesario implementar las siguientes interfaces para cada backend. //Store for workflow and task definitions com.netflix.conductor.dao.MetadataDAO //Store for workflow executions com.netflix.conductor.dao.ExecutionDAO //Index for workflow executions com.netflix.conductor.dao.IndexDAO //Queue provider for tasks com.netflix.conductor.dao.QueueDAO
  • 23.
    Meetup Microservicios -Orquestando microservicios Netflix Conductor: Configuración Para realizar la configuración, contamos con un fichero de configuración:
  • 24.
    Meetup Microservicios -Orquestando microservicios Demo Demo
  • 25.
    Meetup Microservicios -Orquestando microservicios Demo: por si hay efecto demo
  • 26.
    Meetup Microservicios -Orquestando microservicios Nuestra Experiencia
  • 27.
    Editar el estilode texto del patrón Mutua Madrileña. Definición Arquitectura de Aplicaciones Orquestación de Procesos vs Orquestación de Servicios Condiciones del Servicio / Entendimiento y enfoque de requisitos / Arquitectura Final/ Orquestación Orquestación de Procesos (BPM) Orquestación de Servicios Control de estado Sin estado Larga duración Duración generalmente corta (no necesariamente) Alta interacción con usuario (formularios, tareas manuales) Sin interacción con usuario. UI para creación de flujos. Fácilmente entendible por negocio Generalmente carecen de IDE. Exigen más conocimiento técnico. Muy completo: timers, events, tasks, relanzamiento, fault… Menor funcionalidad Puede convertirse en un punto crítico del sistema Alto rendimiento. Perfecto encaje en modelo de microservicios Ofrece mecanismos de compensación Es necesario implementar los mecanismos de compensación
  • 28.