WORKERS
MEJORES PRÁCTICAS
JAVIER A. CONSTAIN A.
BOGOTÁ, 2015
CONTENIDO
1. Definición.
2. Usos comunes.
3. Qué es iron?
4. Estructura de un proyecto iron.
5. Uso del worker.
6. La interfaz de ironWorker.
7. Consideraciones
8. Q&A
DEFINICIÓN
Qué es un worker?
 Son procesos que permiten el cumplimiento de tareas sin necesidad de
la interacción humana.
 Son tareas que permiten orquestar la integración de procesos de
negocio, con procesos tradicionales de IT y ambientes de la aplicación.
Wikipedia.org
Qué es una Cola de mensajes?
 Es un modo por el cual, diversos procesos o programas pueden compartir
información por medio de una interfaz.
 Permiten una comunicación asíncrona entre tareas.
Wikipedia.org
USOS COMUNES
De una cola de mensajes (MQ)
 Desacoplamiento,
 Redundancia,
 Escalabilidad,
 Elasticidad,
 Resiliencia,
Cont…
De una cola de mensajes (MQ)
 Garantías de entregas,
 Garantías de pedidos,
 Buffering,
 Análisis del flujo de datos,
 Comunicación asíncrona.
De un worker
 Procesamiento de imágenes,
 Rastreo web / Extracción de datos,
 Enviar push notifications,
 Cómputo en la nube,
 Procesamiento de datos,
Cont…
De un worker
 Enviar y recibir SMS,
 Enviar e-mails,
 Reemplazar CRON,
 Procesar eventos webhooks
 Adoptar una arquitectura de servicios.
QUÉ ES IRON?
Iron?
Iron.io
Aísla el código y sus dependencias del
proceso para que pueda ser
procesado bajo demanda.
Servicios de iron.io
Mensajes para comunicar y
desacoplar componentes.
Workers que corren en background,
paralelos y escalables.
ESTRUCTURA DE ARCHIVOS
Estructura de un worker con NodeJS
 iron.json
 payload.json
 app.worker
 app.js
 package.json
 node-modules/
Iron
Node JS
Muchos workers con NodeJS
 iron.json
 Proyecto1/
 app.js
 package.json
 node-modules/
 app.worker
 payload.json
 Proyecton/
Iron
Node JS
Iron
Iron.json
{
“ambiente1”: {
“token”: “tokenKeyFromIron”,
“Project_id”: “projectFromIron”
},
“ambienten”: {
“token”: “tokenKeyFromIron”,
“Project_id”: “projectFromIron”
}
}
Almacena las variables de conexión a los
proyectos de iron worker.
En cada del home screen.
payload.json
Ej. Enviar un correo.
{
user: “Javier Constain”,
mail: “javier@rokk3labs.com”,
delay: “30”,
layout: “forgot_password”,
}
El modo de enviarle la información
relevante al worker en modo de
variables y datos.
Los payload.json
No debe contener:
 Variables de conexión,
 Usuarios / Contraseñas,
 Datos estáticos,
 Variables de gran tamaño.
Esta información debe estar en las
variables de entorno o ejecución.
app.worker
runtime “node”
Stack “node-0.10”
dir “node_modules”
file “package.json”
file “config.js”
remote
build “npm config set strict-ssl false; npm install –
production”
exec “app.js”
Lenguaje de ejecución
Incluir los archivos de dependencia
Incluir el manifiesto de dependencias al cargar
Lo que ejecutará al cargar en iron.io
La aplicación que se va a correr.
USANDO IRON WORKER
Instalación en el sistema
 Instalar en el equipo
$ sudo npm install –g iron-worker
 Instalar en el API
$ npm install --save iron_worker iron_mq
Desde la consola.
Declarar en el API (sails)
var iron_mq = require (‘iron_mq’);
var iron_worker = require (‘iron_worker’);
var worker = new iron_worker.Client({token: "MY_TOKEN",
project_id: "MY_PROJECT_ID"});
var imq = new iron_mq.Client({token: "MY_TOKEN", project_id: "
MY_PROJECT_ID"});
API: controller.js
Programar un worker.
var workerName = “myWorkerName”,
payload = {“key1”: value1”, “key2”: value2},
options = {“priority”:0, timeout: 300};
worker.tasksCreate( workerName, payload, options,
function ( err, body ) {
});
API: controller.js
Declarar en el worker
var iron_mq = require (‘iron_mq’);
var iron_worker = require (‘ iron_worker’);
var worker = require(“node_helper”);
var imq = new iron_worker.mq({token: "MY_TOKEN", project_id: "
MY_PROJECT_ID"});
Worker: app.js
Variables externas en el worker
 Si vienen en el config.json
var myvar = worker.config.My_VAR;
 Si vienen del payload.json
var myvar = worker.params.My_VAR;
Worker: app.js
Probando el worker
$ iron_worker run proyecton/app.worker --payload-file
proyecton/payload.json --worker-config proyecton/config.json
Desde la consola.
Subir el worker a iron.io
$ iron_worker upload proyecton/app.worker --env worker_env
Desde la consola.
LA INTERFAZ DE IRON WORKER
Pantalla de inicio
Mis proyectos
Capacidad usada
Pantalla principal del proyecto
Posee seis (6) pestañas en la parte superior
 Get Started (Iniciando): Descripción general de cómo usar iron Worker.
 Tasks (Tareas): Resumen de los resultados de las tareas ejecutadas.
 Scheduled Tasks (Tareas Programadas): Tareas que están programas en el
momento.
 Code (Código): Los workers que están almacenados en el proyecto.
 Analytics (Analíticas): Gráficos del uso general de los workers.
 Usage (Uso): Tiempo de cómputo utilizado.
Tareas ejecutadas
Nos muestra:
En cola
Corriendo
Con error
Canceladas
Pasó tiempo máximo
Terminadas
El control de las tareas programadas
El código
Una lista de todos los workers
cargados al proyecto.
Nuestro código está aquí.
Detalle de la aplicación
La parte izquierda muestra el histórico
de la aplicación.
En la parte derecha se encuentran las
opciones de configuración del
worker.
Config (Variables de entorno)
Sirve como el archivo de configuración de
las variables de entorno.
Se deben almacenar como un JSON todas
las variables estáticas y credenciales de
acceso.
Cuando detecta que son claves, la vista
preliminar bloquea el contenido.
Ejecutar ya!
Pone el programa en la cola de ejecución
Es independiente de la ejecución programada.
Solo se ejecutará una (1) vez
Programar ejecución periódica
Prepara el código para que se ejecute periódicamente.
Puede correr una cantidad limitada de veces o indefinidamente
Es recomendable asignar un “tiempo límite de ejecución” (
timeout ) acorde al tiempo esperado; además que no sea
mayor a la frecuencia de ejecución.
Archivar / Borrar
En caso de no ser necesario seguir usando el programa o querer eliminarlo
definitivamente.
Usar bajo precaución.
CONSIDERACIONES
Restricciones del worker
 Tamaño máximo del payload
 Memoria disponible por worker
 Capacidad de almacenamiento en disco.
 Horas de procesamiento de cada worker por
hora.
 Cantidad máxima de tareas programadas
64KB
320 MB
10GB
P0 = ?, P1 = 250, p2 = 100
100
Un error común en la programación
Crear tareas programas por cada usuario o por cada acción que ocurre.
Es mejor crear tareas que se repiten regularmente.
Tareas que se deben correr en momentos específicos: días o fechas.
Es mejor programar las tareas con mayor frecuencia y que estas hagan
actualizaciones periódicas.
El worker debe ser independiente del ambiente de nuestra aplicación.
“
”
Q & A
“
”
Antes de irnos
DEBUGGING EN NODE
Debugging con node-inspector.
Instalarlo en el sistema
$ sudo npm install -g node-
inspector
Ejecutarlo
1. Inicializar el node-inspector
$ node inspector
Arrojará una url parecida a :
http:localhost:8080/debug?5858
2. Inicializar nodemon
$nodemon --exec sails debug
3. Abrir en Chrome la url de node-
inspector
Interfaz de node-inspector
Gracias

Iron workers y javascript

  • 1.
  • 2.
    JAVIER A. CONSTAINA. BOGOTÁ, 2015
  • 3.
    CONTENIDO 1. Definición. 2. Usoscomunes. 3. Qué es iron? 4. Estructura de un proyecto iron. 5. Uso del worker. 6. La interfaz de ironWorker. 7. Consideraciones 8. Q&A
  • 4.
  • 5.
    Qué es unworker?  Son procesos que permiten el cumplimiento de tareas sin necesidad de la interacción humana.  Son tareas que permiten orquestar la integración de procesos de negocio, con procesos tradicionales de IT y ambientes de la aplicación. Wikipedia.org
  • 6.
    Qué es unaCola de mensajes?  Es un modo por el cual, diversos procesos o programas pueden compartir información por medio de una interfaz.  Permiten una comunicación asíncrona entre tareas. Wikipedia.org
  • 7.
  • 8.
    De una colade mensajes (MQ)  Desacoplamiento,  Redundancia,  Escalabilidad,  Elasticidad,  Resiliencia, Cont…
  • 9.
    De una colade mensajes (MQ)  Garantías de entregas,  Garantías de pedidos,  Buffering,  Análisis del flujo de datos,  Comunicación asíncrona.
  • 10.
    De un worker Procesamiento de imágenes,  Rastreo web / Extracción de datos,  Enviar push notifications,  Cómputo en la nube,  Procesamiento de datos, Cont…
  • 11.
    De un worker Enviar y recibir SMS,  Enviar e-mails,  Reemplazar CRON,  Procesar eventos webhooks  Adoptar una arquitectura de servicios.
  • 12.
  • 13.
  • 14.
    Iron.io Aísla el códigoy sus dependencias del proceso para que pueda ser procesado bajo demanda.
  • 15.
    Servicios de iron.io Mensajespara comunicar y desacoplar componentes. Workers que corren en background, paralelos y escalables.
  • 16.
  • 17.
    Estructura de unworker con NodeJS  iron.json  payload.json  app.worker  app.js  package.json  node-modules/ Iron Node JS
  • 18.
    Muchos workers conNodeJS  iron.json  Proyecto1/  app.js  package.json  node-modules/  app.worker  payload.json  Proyecton/ Iron Node JS Iron
  • 19.
    Iron.json { “ambiente1”: { “token”: “tokenKeyFromIron”, “Project_id”:“projectFromIron” }, “ambienten”: { “token”: “tokenKeyFromIron”, “Project_id”: “projectFromIron” } } Almacena las variables de conexión a los proyectos de iron worker. En cada del home screen.
  • 20.
    payload.json Ej. Enviar uncorreo. { user: “Javier Constain”, mail: “javier@rokk3labs.com”, delay: “30”, layout: “forgot_password”, } El modo de enviarle la información relevante al worker en modo de variables y datos.
  • 21.
    Los payload.json No debecontener:  Variables de conexión,  Usuarios / Contraseñas,  Datos estáticos,  Variables de gran tamaño. Esta información debe estar en las variables de entorno o ejecución.
  • 22.
    app.worker runtime “node” Stack “node-0.10” dir“node_modules” file “package.json” file “config.js” remote build “npm config set strict-ssl false; npm install – production” exec “app.js” Lenguaje de ejecución Incluir los archivos de dependencia Incluir el manifiesto de dependencias al cargar Lo que ejecutará al cargar en iron.io La aplicación que se va a correr.
  • 23.
  • 24.
    Instalación en elsistema  Instalar en el equipo $ sudo npm install –g iron-worker  Instalar en el API $ npm install --save iron_worker iron_mq Desde la consola.
  • 25.
    Declarar en elAPI (sails) var iron_mq = require (‘iron_mq’); var iron_worker = require (‘iron_worker’); var worker = new iron_worker.Client({token: "MY_TOKEN", project_id: "MY_PROJECT_ID"}); var imq = new iron_mq.Client({token: "MY_TOKEN", project_id: " MY_PROJECT_ID"}); API: controller.js
  • 26.
    Programar un worker. varworkerName = “myWorkerName”, payload = {“key1”: value1”, “key2”: value2}, options = {“priority”:0, timeout: 300}; worker.tasksCreate( workerName, payload, options, function ( err, body ) { }); API: controller.js
  • 27.
    Declarar en elworker var iron_mq = require (‘iron_mq’); var iron_worker = require (‘ iron_worker’); var worker = require(“node_helper”); var imq = new iron_worker.mq({token: "MY_TOKEN", project_id: " MY_PROJECT_ID"}); Worker: app.js
  • 28.
    Variables externas enel worker  Si vienen en el config.json var myvar = worker.config.My_VAR;  Si vienen del payload.json var myvar = worker.params.My_VAR; Worker: app.js
  • 29.
    Probando el worker $iron_worker run proyecton/app.worker --payload-file proyecton/payload.json --worker-config proyecton/config.json Desde la consola.
  • 30.
    Subir el workera iron.io $ iron_worker upload proyecton/app.worker --env worker_env Desde la consola.
  • 31.
    LA INTERFAZ DEIRON WORKER
  • 32.
    Pantalla de inicio Misproyectos Capacidad usada
  • 33.
    Pantalla principal delproyecto Posee seis (6) pestañas en la parte superior  Get Started (Iniciando): Descripción general de cómo usar iron Worker.  Tasks (Tareas): Resumen de los resultados de las tareas ejecutadas.  Scheduled Tasks (Tareas Programadas): Tareas que están programas en el momento.  Code (Código): Los workers que están almacenados en el proyecto.  Analytics (Analíticas): Gráficos del uso general de los workers.  Usage (Uso): Tiempo de cómputo utilizado.
  • 34.
    Tareas ejecutadas Nos muestra: Encola Corriendo Con error Canceladas Pasó tiempo máximo Terminadas
  • 35.
    El control delas tareas programadas
  • 36.
    El código Una listade todos los workers cargados al proyecto. Nuestro código está aquí.
  • 37.
    Detalle de laaplicación La parte izquierda muestra el histórico de la aplicación. En la parte derecha se encuentran las opciones de configuración del worker.
  • 38.
    Config (Variables deentorno) Sirve como el archivo de configuración de las variables de entorno. Se deben almacenar como un JSON todas las variables estáticas y credenciales de acceso. Cuando detecta que son claves, la vista preliminar bloquea el contenido.
  • 39.
    Ejecutar ya! Pone elprograma en la cola de ejecución Es independiente de la ejecución programada. Solo se ejecutará una (1) vez
  • 40.
    Programar ejecución periódica Preparael código para que se ejecute periódicamente. Puede correr una cantidad limitada de veces o indefinidamente Es recomendable asignar un “tiempo límite de ejecución” ( timeout ) acorde al tiempo esperado; además que no sea mayor a la frecuencia de ejecución.
  • 41.
    Archivar / Borrar Encaso de no ser necesario seguir usando el programa o querer eliminarlo definitivamente. Usar bajo precaución.
  • 42.
  • 43.
    Restricciones del worker Tamaño máximo del payload  Memoria disponible por worker  Capacidad de almacenamiento en disco.  Horas de procesamiento de cada worker por hora.  Cantidad máxima de tareas programadas 64KB 320 MB 10GB P0 = ?, P1 = 250, p2 = 100 100
  • 44.
    Un error comúnen la programación Crear tareas programas por cada usuario o por cada acción que ocurre. Es mejor crear tareas que se repiten regularmente. Tareas que se deben correr en momentos específicos: días o fechas. Es mejor programar las tareas con mayor frecuencia y que estas hagan actualizaciones periódicas. El worker debe ser independiente del ambiente de nuestra aplicación.
  • 45.
  • 46.
  • 47.
    Debugging con node-inspector. Instalarloen el sistema $ sudo npm install -g node- inspector Ejecutarlo 1. Inicializar el node-inspector $ node inspector Arrojará una url parecida a : http:localhost:8080/debug?5858 2. Inicializar nodemon $nodemon --exec sails debug 3. Abrir en Chrome la url de node- inspector
  • 48.
  • 49.