Iron workers y javascript

Post on 20-Jul-2015

143 views 1 download

Transcript of Iron workers y javascript

WORKERSMEJORES 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