Iron workers y javascript
-
Upload
javier-constain -
Category
Software
-
view
143 -
download
1
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: “[email protected]”,
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