Iron workers y javascript

49
WORKERS MEJORES PRÁCTICAS

Transcript of Iron workers y javascript

Page 1: Iron workers y javascript

WORKERSMEJORES PRÁCTICAS

Page 2: Iron workers y javascript

JAVIER A. CONSTAIN A.

BOGOTÁ, 2015

Page 3: Iron workers y javascript

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

Page 4: Iron workers y javascript

DEFINICIÓN

Page 5: Iron workers y javascript

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

Page 6: Iron workers y javascript

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

Page 7: Iron workers y javascript

USOS COMUNES

Page 8: Iron workers y javascript

De una cola de mensajes (MQ)

Desacoplamiento,

Redundancia,

Escalabilidad,

Elasticidad,

Resiliencia,

Cont…

Page 9: Iron workers y javascript

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.

Page 10: Iron workers y javascript

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…

Page 11: Iron workers y javascript

De un worker

Enviar y recibir SMS,

Enviar e-mails,

Reemplazar CRON,

Procesar eventos webhooks

Adoptar una arquitectura de servicios.

Page 12: Iron workers y javascript

QUÉ ES IRON?

Page 13: Iron workers y javascript

Iron?

Page 14: Iron workers y javascript

Iron.io

Aísla el código y sus dependencias del

proceso para que pueda ser

procesado bajo demanda.

Page 15: Iron workers y javascript

Servicios de iron.io

Mensajes para comunicar y

desacoplar componentes.

Workers que corren en background,

paralelos y escalables.

Page 16: Iron workers y javascript

ESTRUCTURA DE ARCHIVOS

Page 17: Iron workers y javascript

Estructura de un worker con NodeJS

iron.json

payload.json

app.worker

app.js

package.json

node-modules/

Iron

Node JS

Page 18: Iron workers y javascript

Muchos workers con NodeJS

iron.json

Proyecto1/

app.js

package.json

node-modules/

app.worker

payload.json

Proyecton/

Iron

Node JS

Iron

Page 19: Iron workers y javascript

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.

Page 20: Iron workers y javascript

payload.json

Ej. Enviar un correo.

{

user: “Javier Constain”,

mail: “[email protected]”,

delay: “30”,

layout: “forgot_password”,

}

El modo de enviarle la información

relevante al worker en modo de

variables y datos.

Page 21: Iron workers y javascript

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.

Page 22: Iron workers y javascript

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.

Page 23: Iron workers y javascript

USANDO IRON WORKER

Page 24: Iron workers y javascript

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.

Page 25: Iron workers y javascript

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

Page 26: Iron workers y javascript

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

Page 27: Iron workers y javascript

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

Page 28: Iron workers y javascript

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

Page 29: Iron workers y javascript

Probando el worker

$ iron_worker run proyecton/app.worker --payload-file proyecton/payload.json --worker-config proyecton/config.json

Desde la consola.

Page 30: Iron workers y javascript

Subir el worker a iron.io

$ iron_worker upload proyecton/app.worker --env worker_env

Desde la consola.

Page 31: Iron workers y javascript

LA INTERFAZ DE IRON WORKER

Page 32: Iron workers y javascript

Pantalla de inicio

Mis proyectos

Capacidad usada

Page 33: Iron workers y javascript

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.

Page 34: Iron workers y javascript

Tareas ejecutadas

Nos muestra:

En cola

Corriendo

Con error

Canceladas

Pasó tiempo máximo

Terminadas

Page 35: Iron workers y javascript

El control de las tareas programadas

Page 36: Iron workers y javascript

El código

Una lista de todos los workers

cargados al proyecto.

Nuestro código está aquí.

Page 37: Iron workers y javascript

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.

Page 38: Iron workers y javascript

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.

Page 39: Iron workers y javascript

Ejecutar ya!

Pone el programa en la cola de ejecución

Es independiente de la ejecución programada.

Solo se ejecutará una (1) vez

Page 40: Iron workers y javascript

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.

Page 41: Iron workers y javascript

Archivar / Borrar

En caso de no ser necesario seguir usando el programa o querer eliminarlo

definitivamente.

Usar bajo precaución.

Page 42: Iron workers y javascript

CONSIDERACIONES

Page 43: Iron workers y javascript

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

Page 44: Iron workers y javascript

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.

Page 45: Iron workers y javascript

”Q & A

Page 46: Iron workers y javascript

”Antes de irnos

DEBUGGING EN NODE

Page 47: Iron workers y javascript

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

Page 48: Iron workers y javascript

Interfaz de node-inspector

Page 49: Iron workers y javascript

Gracias