SlideShare una empresa de Scribd logo
1 de 49
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

Más contenido relacionado

Destacado

Oklahoma Excavation Safety Expo Workers Compensation Presentation
Oklahoma Excavation Safety Expo Workers Compensation PresentationOklahoma Excavation Safety Expo Workers Compensation Presentation
Oklahoma Excavation Safety Expo Workers Compensation PresentationJosh DeBoer
 
Compensation & Benefits Management - HRM
Compensation & Benefits Management - HRMCompensation & Benefits Management - HRM
Compensation & Benefits Management - HRMIMRAN KHAN
 
Compensation Management
Compensation ManagementCompensation Management
Compensation Managementdwnload
 
Compensation
CompensationCompensation
Compensationdipa2618
 
Compensation management
Compensation managementCompensation management
Compensation management805984
 
How To (Really) Get Into Marketing
How To (Really) Get Into MarketingHow To (Really) Get Into Marketing
How To (Really) Get Into MarketingEd Fry
 

Destacado (10)

Oklahoma Excavation Safety Expo Workers Compensation Presentation
Oklahoma Excavation Safety Expo Workers Compensation PresentationOklahoma Excavation Safety Expo Workers Compensation Presentation
Oklahoma Excavation Safety Expo Workers Compensation Presentation
 
Chapter 10 compensation and benefits
Chapter 10 compensation and benefitsChapter 10 compensation and benefits
Chapter 10 compensation and benefits
 
Compensation & Benefits Management - HRM
Compensation & Benefits Management - HRMCompensation & Benefits Management - HRM
Compensation & Benefits Management - HRM
 
Compensation Management
Compensation ManagementCompensation Management
Compensation Management
 
Compensation
CompensationCompensation
Compensation
 
Compensation & benefit presentation
Compensation & benefit presentation Compensation & benefit presentation
Compensation & benefit presentation
 
Compensation ppt
Compensation pptCompensation ppt
Compensation ppt
 
Compensation & benefits
Compensation & benefitsCompensation & benefits
Compensation & benefits
 
Compensation management
Compensation managementCompensation management
Compensation management
 
How To (Really) Get Into Marketing
How To (Really) Get Into MarketingHow To (Really) Get Into Marketing
How To (Really) Get Into Marketing
 

Similar a Iron workers y javascript

Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Ignacio Muñoz Vicente
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup Arkhotech
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesDani Latorre
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netAlberto Diaz Martin
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETAlberto Diaz Martin
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Rodrigo Zottola Pareja
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apisCloudAppi
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Restorando
 
PRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBPRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBYeison11020
 

Similar a Iron workers y javascript (20)

Web workers
Web workersWeb workers
Web workers
 
Curso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.jsCurso introductorio a Raptor.js con Node.js
Curso introductorio a Raptor.js con Node.js
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Unidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetosUnidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetos
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2Desarrollo de aplicaciones multiplataforma 2/2
Desarrollo de aplicaciones multiplataforma 2/2
 
An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup An evening with ... Ionic Framework Meetup
An evening with ... Ionic Framework Meetup
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)JDBC(conjunto de clases e interfaces)
JDBC(conjunto de clases e interfaces)
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
CrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NETCrossDvlpu - REACT para desarrolladores de ASP.NET
CrossDvlpu - REACT para desarrolladores de ASP.NET
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Introdución a aplicaciones web en java
Introdución a aplicaciones web en java Introdución a aplicaciones web en java
Introdución a aplicaciones web en java
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
PRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBPRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEB
 
Proceso MDA y Scrum v2
Proceso MDA y Scrum v2Proceso MDA y Scrum v2
Proceso MDA y Scrum v2
 

Iron workers y javascript

  • 2. JAVIER A. CONSTAIN A. BOGOTÁ, 2015
  • 3. 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
  • 5. 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
  • 6. 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
  • 8. De una cola de mensajes (MQ)  Desacoplamiento,  Redundancia,  Escalabilidad,  Elasticidad,  Resiliencia, Cont…
  • 9. 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.
  • 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.
  • 13. Iron?
  • 14. Iron.io Aísla el código y sus dependencias del proceso para que pueda ser procesado bajo demanda.
  • 15. Servicios de iron.io Mensajes para comunicar y desacoplar componentes. Workers que corren en background, paralelos y escalables.
  • 17. Estructura de un worker con NodeJS  iron.json  payload.json  app.worker  app.js  package.json  node-modules/ Iron Node JS
  • 18. Muchos workers con NodeJS  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 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.
  • 21. 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.
  • 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.
  • 24. 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.
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 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 worker a iron.io $ iron_worker upload proyecton/app.worker --env worker_env Desde la consola.
  • 31. LA INTERFAZ DE IRON WORKER
  • 32. Pantalla de inicio Mis proyectos Capacidad usada
  • 33. 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.
  • 34. Tareas ejecutadas Nos muestra: En cola Corriendo Con error Canceladas Pasó tiempo máximo Terminadas
  • 35. El control de las tareas programadas
  • 36. El código Una lista de todos los workers cargados al proyecto. Nuestro código está aquí.
  • 37. 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.
  • 38. 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.
  • 39. Ejecutar ya! Pone el programa 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 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.
  • 41. Archivar / Borrar En caso de no ser necesario seguir usando el programa o querer eliminarlo definitivamente. Usar bajo precaución.
  • 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ú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.
  • 47. 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