Ir al contenido principal

Potenciando la automatización de tareas: Configuración y Uso de Workers en N8N

En este artículo explicaremos n8n, una plataforma de automatización. Descubriremos qué es n8n, abordaremos sus diversos modos de funcionamiento y se explicará la configuración de workers potenciando la automatización de tareas con n8n. Además, aprenderemos a establecer webhooks y utilizar balanceadores para optimizar flujos de trabajo automatizados de manera eficiente.

¿Qué es n8n?

N8N es una herramienta de automatización de trabajos open-source altamente versátil y fácil de usar. Con N8N, puedes crear flujos de trabajo automatizados para una variedad de tareas, como la integración de aplicaciones, la automatización de tareas y la gestión de datos.

Una de las características más atractivas de N8N es su interfaz visual fácil de usar. Con N8N, puedes crear flujos de trabajo arrastrando y soltando nodos, lo que hace que sea fácil de entender para cualquier persona, independientemente de su nivel de experiencia en programación.

Este artículo puede que te interese: ¿Por qué N8N es la mejor herramienta de automatización para tu empresa?

Despliegue de N8N con docker

La utilización de tareas N8N con Docker Compose es una excelente opción si quieres ejecutar N8N en un entorno aislado y controlado. Al utilizar Docker Compose, puedes asegurarte de que N8N está funcionando en un entorno consistente y reproducible en cualquier máquina.

Para utilizar tareas N8N con Docker Compose, primero debes crear un archivo de configuración docker-compose.yml. En este archivo, debes especificar qué imagen de contenedor de N8N quieres utilizar y cómo deben configurarse las opciones de red y volúmenes. Un ejemplo básico de un archivo docker-compose.yml para N8N podría ser:

version: '3'
services:
  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    volumes:
      - "./n8n:/app/n8n"
    environment:
      - N8N_WEB_PORT=5678

Una vez que tengas tu archivo de configuración creado, puedes utilizar el comando “docker-compose up” para iniciar N8N. El contenedor de N8N se ejecutará en el puerto 5678 en tu máquina y se conectará con un volumen local llamado “n8n” que contiene tus configuraciones personalizadas.

Acceso a la interfaz web

Abre un navegador web y escribe la dirección “http://localhost:5678” (o la dirección IP de la máquina donde estás ejecutando el contenedor y el puerto especificado en tu archivo de configuración) para acceder a la interfaz web de N8N.

Ten en cuenta que si estás ejecutando N8N en un servidor remoto, debes sustituir “localhost” por la dirección IP o nombre de dominio del servidor.

Es importante también mencionar que al acceder a la interfaz web, es posible que se solicite un usuario y contraseña, si es así, debes configurarlo en el archivo de configuración o en la imagen de N8N que estás utilizando.

En este caso, para acceder a la interfaz web de N8N, hemos configurado el acceso mediante un dominio personalizado en Nginx. De esta manera, solo es necesario ingresar el dominio en un navegador web y Nginx se encarga de redirigir automáticamente al puerto del servicio de N8N, permitiendo así el acceso fácil y conveniente a la interfaz web del producto. 

Si necesitas ayuda con esta configuración, en Chakray te podemos brindar asistencia para establecer este tipo de configuraciones. ¡Contáctanos!

Primera pantalla tras acceder vía web

Imagen: Primera pantalla tras acceder vía web.

¿Qué es un Workflow?

Un workflow es un proceso automatizado que define cómo deben realizarse una serie de tareas. Un workflow puede ser utilizado para automatizar tareas repetitivas, integrar aplicaciones, gestionar datos y mucho más.

Un ejemplo de un workflow podría ser el proceso automatizado para crear una publicación en redes sociales. El workflow podría incluir tareas como escribir el contenido de la publicación, elegir una imagen, programar la publicación y publicarla en varias redes sociales.

Los workflows suelen representarse visualmente mediante un diagrama de flujo, donde las tareas se representan como nodos y las relaciones entre las tareas se representan mediante flechas. Esta representación visual facilita la comprensión y la modificación del workflow.

Tipos de funcionamiento y configuración en n8n

N8N tiene dos modos de funcionamiento diferentes: el modo main y el modo own.

Modo Main

El modo main es el modo predeterminado de N8N y se ejecuta en el servidor de N8N. En este modo, los flujos de trabajo se ejecutan en el servidor de N8N y se pueden acceder a través de la interfaz web de N8N. El modo main es adecuado para pruebas y pequeñas implementaciones.

Modo Own

El modo own, por otro lado, permite ejecutar N8N en tu propio servidor o infraestructura en la nube. En este modo, los flujos de trabajo se ejecutan en tu propio servidor y se pueden acceder a través de una API. El modo own es adecuado para implementaciones más grandes y requiere una mayor configuración y conocimiento técnico.

En general, el modo main es más fácil de configurar y utilizar, mientras que el modo own ofrece más flexibilidad y escalabilidad. Depende de tus necesidades y habilidades técnicas para decidir cuál método utilizar.

Podemos configurarlo agregando el siguiente parámetro dentro de la sección de variables de entorno de nuestro servicio en la configuración de Docker Compose.

environment:
    - EXECUTIONS_PROCESS=main
environment:
     - EXECUTIONS_PROCESS=own

Colas en n8n

En N8N, una cola (queue) es una característica que permite almacenar temporalmente datos o tareas antes de ser procesados. Esto puede ser útil en situaciones donde la tasa de entrada de datos es más alta que la tasa de procesamiento, o cuando se desea asegurar que los datos se procesan en orden.

Para configurar una cola en N8N, debes seguir los siguientes pasos:

  1. Crea un flujo de trabajo en N8N y configura el nodo de entrada para recibir los datos.
  2. Añade un nodo de cola en el flujo de trabajo. Este nodo almacenará temporalmente los datos recibidos.
  3. Configura el nodo de cola para especificar la capacidad máxima de la cola y el comportamiento de la cola en caso de sobrecarga.
  4. Conecta el nodo de entrada al nodo de cola para que los datos sean almacenados en la cola.
  5. Añade más nodos después del nodo de cola para procesar los datos almacenados en la cola.
  6. Utiliza el nodo de salida para recibir los datos procesados y enviarlos a su destino final.

Ten en cuenta que además de esta configuración básica existen otros ajustes y configuraciones avanzadas que puedes hacer en el nodo de cola, como por ejemplo limitar la cantidad de tareas por segundo, limitar la cantidad de tareas simultáneas, entre otros.

Al igual que la configuración del funcionamiento, también podemos establecer esta opción agregando el correspondiente parámetro en la sección de variables de entorno.

environment:
     - EXECUTIONS_MODE=queue

Cómo configurar y activar Workers en N8N

¿Qué son los Workers en N8N?

Los workers en n8n son procesos que se encargan de ejecutar tareas en un flujo de trabajo. El objetivo principal de los workers es mejorar el rendimiento y escalabilidad del sistema, al permitir que varias tareas se ejecuten simultáneamente en lugar de tener que esperar a que una tarea se complete antes de iniciar la siguiente.

El uso principal de los workers en N8N es mejorar la capacidad de procesamiento y escalabilidad del sistema, al permitir que varias tareas se ejecuten simultáneamente en lugar de tener que esperar a que una tarea se complete antes de iniciar la siguiente. Esto es especialmente útil en situaciones donde se requiere procesar grandes volúmenes de datos o cuando se desea asegurar un tiempo de respuesta rápido.

Además de aumentar el rendimiento, los workers también pueden ayudar a distribuir la carga en un cluster, lo que ayuda a reducir la sobrecarga en un solo nodo y aumentar la disponibilidad del sistema.

Ejemplos de configuraciones de workers en N8N usando Docker Compose

A continuación se muestran dos ejemplos de configuración de workers en N8N utilizando Docker Compose:

  • Mediante variable de entorno

Agrega una sección de variables de entorno para configurar el modo de trabajo del nodo. Por ejemplo, para habilitar el modo worker, debes establecer la variable de entorno N8N_WORKER=true.

version: "3.8"
services:
  n8n:
    image: n8nio/n8n
environment:
     - N8N_WORKER=true
     - N8N_HTTP_PORT=5678
   ports:
     - "5678:5678"
   volumes:
     - ./n8n-data:/root/.n8n
  • Mediante comando

A continuación se muestra un ejemplo que utiliza el comando n8n worker start para iniciar un nodo workers de N8N:

version: "3.8"
services:
  n8n:
    image: n8nio/n8n
    command: ["n8n", "worker", "start"]
    environment:
      - N8N_HTTP_PORT=5678
    ports:
      - "5678:5678"
    volumes:
      - ./n8n-data:/root/.n8n

Cabe mencionar que en algunos casos es recomendable utilizar una cola (queue) para almacenar temporalmente las tareas antes de ser procesadas, esto ayuda a regular la carga y asegurar un procesamiento ordenado de las tareas.

Cómo conectar N8N con Redis en un entorno Docker

Redis es una base de datos NoSQL altamente escalable que se utiliza comúnmente para almacenar y gestionar grandes cantidades de datos en tiempo real.

Conectar N8N con Redis permite almacenar y gestionar los datos en una base de datos en tiempo real para mejorar el rendimiento y escalabilidad del sistema. 

Configuración básica de un servicio Redis y N8N conectados en Docker Compose

Para conectar N8N con Redis en un entorno Docker, debes seguir los siguientes pasos:

  1. Agrega un servicio Redis en tu archivo docker-compose.yml.
  2. Establece las variables de entorno para conectarse a la base de datos Redis. Por ejemplo, establece la variable de entorno N8N_REDIS_HOST con el nombre del host de Redis.
  3. Asegúrate de que el servicio N8N tiene acceso a la red del servicio Redis, añadiendo la red correspondiente en la sección de redes del servicio N8N.
  4. Inicia los servicios con el comando docker-compose up -d.

A continuación se muestra un ejemplo de una configuración básica de un servicio Redis y N8N conectados en Docker Compose:

version: "3.8"
services:
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  n8n:
    image: n8nio/n8n
    environment:
      - QUEUE_TYPE=redis
      - QUEUE_BULL_REDIS_HOST=redis
      - QUEUE_BULL_REDIS_PORT=6379
      - QUEUE_BULL_REDIS_DB=0
    networks:
      - redis-network
    ports:
      - "5678:5678"
    volumes:
      - ./n8n-data:/root/.n8n
networks:
  redis-network:
    external: true

  • QUEUE_TYPE: Esta variable de entorno se utiliza para especificar el tipo de cola de trabajos que se va a utilizar en N8N. En este caso, establecer el valor como “redis” indica que se está utilizando Redis como cola de trabajos.
  • QUEUE_BULL_REDIS_HOST: Esta variable de entorno se utiliza para especificar la dirección IP o el nombre del host del servidor Redis que se va a utilizar para almacenar y gestionar los trabajos de la cola.
  • QUEUE_BULL_REDIS_PORT: Esta variable de entorno se utiliza para especificar el puerto en el que se encuentra el servidor Redis. El valor predeterminado es 6379.
  • QUEUE_BULL_REDIS_DB: Esta variable de entorno se utiliza para especificar el número de base de datos en Redis en el que se almacenarán los trabajos de la cola. El valor predeterminado es 0.

Es importante recordar agregar estas variables tanto en el nodo principal como en los nodos worker para garantizar una correcta configuración y conexión con la cola de trabajos en Redis.

Ejemplo Workflow flujo de trabajo

En este apartado vamos a construir un ejemplo de flujo de trabajo para observar cómo se distribuye el procesamiento entre los nodos workers de n8n con la configuración previamente establecida.

Ejemplo gráfico de workflow

Imagen: Ejemplo gráfico de workflow

Para reproducir este flujo de trabajo, se puede exportarlo como un archivo JSON y luego importarlo en otra instancia de N8N, lo que permite compartir fácilmente nuestra configuración con otros usuarios.

Agregamos el workflow a n8n

Imagen: Agregamos el workflow a n8n.

Interval

En n8n, un “interval” es una función que permite ejecutar un flujo de trabajo en un intervalo de tiempo específico. Esto significa que el flujo de trabajo se ejecutará automáticamente cada cierto tiempo, sin la necesidad de ser activado manualmente.

Por ejemplo, si se configura un intervalo de 15 minutos, el flujo de trabajo se ejecutará automáticamente cada 15 minutos.

De esta manera el intervalo en un workflow de n8n nos permite programar tareas de manera automatizada y ejecutarlas en un tiempo específico, sin necesidad de estar pendientes de ejecutarse manualmente.

Ventana para configurar los intervalos de tiempo

Imagen: Ventana para configurar los intervalos de tiempo.

Webhook

En  las tareas de N8N, un webhook es un tipo de nodo que se utiliza para recibir y procesar datos de una fuente externa, como una API o una aplicación web. El webhook es configurado para “escuchar” ciertas acciones o eventos en una URL específica, y cuando se activa, envía los datos recibidos al siguiente nodo en el flujo de trabajo para su procesamiento. Los webhooks son útiles para automatizar tareas o flujos de trabajo en N8N, permitiendo la integración con diferentes servicios y sistemas externos.

Function

En n8n, una “Function” es un nodo especial que permite ejecutar código personalizado en un flujo de trabajo. La función le permite a los usuarios escribir su propio código en lenguajes de programación como JavaScript, Python, etc. y utilizarlo dentro de un flujo de trabajo.

En el caso de agregar un script para mostrar en qué nodo se ha ejecutado el proceso, lo que se estaría haciendo es crear una función que al ser ejecutada muestra en qué nodo se está ejecutando el proceso, permitiendo así tener un mejor control y monitoreo de los procesos que se están ejecutando en el flujo de trabajo. Esto puede ser muy útil para depurar problemas y asegurar que el flujo de trabajo esté funcionando correctamente.

Vamos a ver un ejemplo de script donde mostraremos cómo ejecutar el mensaje “Execution is working!” en el nodo que ejecute la tarea.

console.log('Execution is working!');
return [
 {json: {name: 'Omar', age: 34, city: 'Berlin'}}
];

Ventana con un script para comprobar el funcionamiento

Imagen: Ventana con un script para comprobar el funcionamiento.

Pasos para cambiar el webhook a producción

Para pasar un webhook de pre-producción a producción, hay varios pasos que debes seguir:

  1. Prueba y valida el webhook en un ambiente de pre-producción. Asegúrate de que el webhook está funcionando correctamente y está recibiendo y procesando los datos correctamente.
  2. Copia el webhook y los datos relacionados a tu ambiente de producción. Esto puede incluir la configuración del webhook, las credenciales de autenticación, etc.
  3. Configura el webhook en tu ambiente de producción. Asegúrate de que el webhook está utilizando las mismas credenciales de autenticación y configuración que utilizó en pre-producción.
  4. Haz una prueba final del webhook en producción. Asegúrate de que el webhook está funcionando correctamente y está recibiendo y procesando los datos correctamente.
  5. Desactiva o elimina el webhook en pre-producción. Una vez que el webhook está funcionando correctamente en producción, ya no es necesario mantenerlo en pre-producción.

Para habilitar el entorno de producción, podemos activarlo mediante el interruptor en la parte derecha de la interfaz de usuario.

Para hacer una consulta en el entorno de producción del webhook en N8N, debes seguir los siguientes pasos:

1.En la sección de configuración del webhook, encontrarás la URL del entorno de producción. Copia esta URL para usarla en la consulta.

Ventana donde obtenemos la URL del entorno de producción

Imagen: Ventana donde obtenemos la URL del entorno de producción.

2. Utiliza la URL del entorno de producción en tu aplicación o herramienta de consulta. Asegúrate de incluir las credenciales de autenticación necesarias si es requerido.

3. Realiza la consulta y verifica la respuesta. Asegúrate de que los datos recibidos son los esperados y que el webhook está procesando correctamente los datos.

Salida de la consulta realizada vía web

Imagen: Salida de la consulta realizada vía web.

Es importante recordar que antes de pasar el webhook de pre-producción a producción en un escenario real, debes hacer pruebas exhaustivas para asegurarse que el webhook funciona correctamente y está listo para manejar una carga de trabajo en producción.

Resolución del escenario

Como podemos observar, cada vez que se lanza una consulta, ésta se procesa de manera simultánea e intercalada en cada uno de los workers de n8n, lo que mejora significativamente el rendimiento y escalabilidad del sistema.

devops@chakray:~$ docker-compose logs -f n8n-worker
Attaching to n8n-worker
n8n-worker             | Starting n8n worker...
n8n-worker             | 
n8n-worker             | n8n worker is now ready
n8n-worker             |  * Version: 0.192.2
n8n-worker             |  * Concurrency: 10
n8n-worker             | 
n8n-worker             | 
n8n-worker             | n8n worker health check via, port 5678
n8n-worker             | Execution is working!
n8n-worker             | Execution is working!
n8n-worker             | Execution is working!

devops@chakray:~$ docker-compose logs -f n8n-worker-2
Attaching to n8n-worker-2
n8n-worker-2           | Starting n8n worker...
n8n-worker-2           | 
n8n-worker-2           | n8n worker is now ready
n8n-worker-2           |  * Version: 0.192.2
n8n-worker-2           |  * Concurrency: 10
n8n-worker-2           | 
n8n-worker-2           | 
n8n-worker-2           | n8n worker health check via, port 5678
n8n-worker-2           | Execution is working!
n8n-worker-2           | Execution is working!

Salida vía logs del contenedor tras realizar una consulta

Imagen: Salida vía logs del contenedor tras realizar una consulta.

Configuración Webhook de n8n

Iniciaremos la aplicación webhook de n8n, que se encarga de escuchar las peticiones entrantes de las diferentes aplicaciones o servicios y ejecutar las tareas correspondientes.

A continuación, veremos un ejemplo gráfico de cómo se configuraran los servicios webhook. Utilizando el ejemplo anterior, agregaremos dos servicios más.

Ejemplo gráfico de configuración del webhook

Imagen: Ejemplo gráfico de configuración del webhook.

Balanceador de carga

La configuración de un balanceador de carga con nginx para dos servicios es bastante sencilla. Se deben crear dos bloques de configuración de servidor en el archivo de configuración de nginx que apuntan a cada uno de los servicios.

A continuación se muestra un ejemplo muy sencillo de como se haría la configuración.

http {
    upstream myservices {
        server service1:8080;
        server service2:8080;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myservices;
        }
    }
}

Con esta configuración, el contenedor de nginx se utilizará como balanceador de carga. Las solicitudes entrantes se distribuirán equitativamente entre los contenedores de “service1” y “service2” de webhook.

Cambios en el compose

Ya hemos configurado nuestra URL para apuntar a los dos servicios webhook. A continuación, modificaremos algunas variables y agregaremos un nuevo servicio en el archivo de docker-compose.yml para actualizar la configuración.

Modificaremos la URL de acceso para reflejar la nueva configuración.

- WEBHOOK_URL=https://wh.n8n.chakray.local/

Agregamos dos nuevos servicios webhook. Aquí un ejemplo de cómo podría verse la configuración de un servicio webhook de n8n en un archivo docker-compose.yml:

version: '3'
services:
  n8n:
    image: n8nio/n8n
    ports:
      - 5680:5678
    environment:
      - N8N_WEBHOOK_URL=https://wh.n8n.chakray.local/
    volumes:
      - ./n8n-data:/root/.n8n
    command: /bin/sh -c "n8n webhook"

Lo más destacable es la línea command: /bin/sh -c “n8n webhook” donde le indica a Docker que ejecute el comando n8n webhook en el contenedor utilizando el interpretador de comandos /bin/sh. Además, estamos estableciendo una variable de entorno N8N_WEBHOOK_URL para indicarle a n8n la URL de nuestro servicio webhook.

Volveremos a iniciar nuestro entorno para validar el correcto funcionamiento de los cambios realizados.

$ docker-compose up -d

Observamos que en el webhook se ha actualizado la URL para apuntar a la configuración de redirección hacia nuestro servicio webhook, lo que permitirá un balanceo entre los dos servicios disponibles.

URL actualizada para la prueba de balanceo de carga

Imagen: URL actualizada para la prueba de balanceo de carga.

Realizamos una solicitud a la URL proporcionada por el webhook, en este caso a la URL de producción.

Ejemplo de la consulta vía web

Imagen: Ejemplo de la consulta vía web.

Al revisar los registros de los servicios webhook, observamos que uno de ellos ha recibido la solicitud mientras que el otro aún no ha recibido ninguna. Esto se debe a que solo se ha realizado una consulta.

Salida de los logs del contenedor tras la consulta

Imagen: Salida de los logs del contenedor tras la consulta.

A continuación, volvemos a realizar la solicitud y observamos que la segunda petición es recibida por nuestro segundo servicio, lo cual confirma que nuestro balanceador de carga está funcionando correctamente.

Salida de logs para comprobar el balanceo de carga

Imagen: Salida de logs para comprobar el balanceo de carga.

Comando “hey”: Pruebas de rendimiento

El comando “hey” es una herramienta de línea de comando que se utiliza para realizar pruebas de rendimiento de un servidor o aplicación web. Se puede utilizar para simular un gran número de solicitudes concurrentes a una URL específica y medir el tiempo de respuesta, el rendimiento y la capacidad de procesamiento del servidor.

Para utilizar “hey” para realizar pruebas de rendimiento en un servidor o aplicación web, debes seguir los siguientes pasos:

  1. Instala “hey” en tu sistema. Puedes hacerlo utilizando un gestor de paquetes como apt.
  2. Crea un archivo de configuración para especificar los detalles de la prueba, como el número de solicitudes concurrentes, el número de hilos, el tiempo de duración de la prueba, entre otros.
  3. Ejecuta el comando “hey” utilizando el archivo de configuración y la URL de tu servidor o aplicación web.

Analiza los resultados de la prueba. “hey” proporcionará información detallada sobre el rendimiento, incluyendo el tiempo de respuesta promedio, el número de solicitudes por segundo, el número de errores, entre otros.

Ten en cuenta que algunas veces es necesario realizar más de una prueba para obtener una idea precisa del rendimiento de un sistema ya que pueden variar dependiendo de las condiciones de carga.

$ hey -n 5000 -c 200 <URL>

Summary:
  Total:  72.8614 secs
  Slowest:  4.5465 secs
  Fastest:  0.6673 secs
  Average:  2.8851 secs
  Requests/sec: 68.6234
  

Response time histogram:
  0.667 [1] |
  1.055 [0] |
  1.443 [2] |
  1.831 [8] |
  2.219 [0] |
  2.607 [741] |■■■■■■■■■■
  2.995 [3040]  |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3.383 [845] |■■■■■■■■■■■
  3.771 [158] |■■
  4.159 [154] |■■
  4.547 [51]  |■


Latency distribution:
  10% in 2.5671 secs
  25% in 2.6769 secs
  50% in 2.8226 secs
  75% in 2.9878 secs
  90% in 3.2604 secs
  95% in 3.6558 secs
  99% in 4.1676 secs

Details (average, fastest, slowest):
  DNS+dialup: 0.0152 secs, 0.6673 secs, 4.5465 secs
  DNS-lookup: 0.0006 secs, 0.0000 secs, 0.0514 secs
  req write:  0.0001 secs, 0.0000 secs, 0.0378 secs
  resp wait:  2.8683 secs, 0.5386 secs, 4.3079 secs
  resp read:  0.0012 secs, 0.0001 secs, 0.0853 secs

Status code distribution:
  [200] 5000 responses

Conclusión

En resumen, N8N es una herramienta de automatización de trabajos poderosa y fácil de usar que ofrece una gran cantidad de posibilidades para automatizar tareas y mejorar la eficiencia en tu trabajo. Con su interfaz visual fácil de usar, integración con una amplia variedad de aplicaciones y escalabilidad, N8N es una buena opción para cualquier persona que busque automatizar tareas en su negocio.

El uso de N8N con un cluster de workers y Redis como cola de trabajos es una excelente opción para mejorar el rendimiento y escalabilidad de los flujos de trabajo en una aplicación. La configuración de un cluster de workers en n8n permite distribuir la carga de trabajo entre varios nodos, lo que resulta en un mejor rendimiento y una mayor capacidad para manejar grandes cantidades de datos. Al utilizar Redis como cola de trabajos, se pueden almacenar y gestionar los datos en tiempo real de manera eficiente.

Sin embargo, es importante asegurarse de configurar correctamente los servicios y las variables de entorno para garantizar una correcta conexión y funcionamiento del cluster. Si necesita más información, no dude en ponerse en contacto con nosotros. Estaremos encantados de ayudarle en su proceso de implementación y configuración.

¡Habla con nuestros expertos!

Contacta con nuestro equipo y descubre las tecnologías de vanguardia que potenciarán tu negocio.

contáctanos