Node.js y el Event Loop

Una de las razones que ha hecho popular a Node.js es su extraordinaria velocidad de respuesta en comparación con un servidor Java (por ej. Tomcat). Obviamente esto no se consigue gratis, y es que a diferencia de un servidor Java, Node.js es “single threaded” solo hay un hilo de ejecución atendiendo todas las peticiones, no se levanta uno nuevo cada vez. Esto elimina toda la sobrecarga de gestión de los hilos (locks y demás).

Pero para que esto funcione las aplicaciones tienen que ser programadas de forma que no se bloqueen en tareas lentas como una consulta a la red, un acceso base de datos o a un fichero. Es por ello que la programación asíncrona está en el fundamento de Node.js. Node.js es una apuesta a que un solo hilo con procesado asíncrono tiene mejor rendimiento y escalabilidad que una implementación multi-hilo.

Programación síncrona

Node.js se apoya en un motor de ejecución javascript como el que contiene cualquier navegador. Este motor es el que es single-threaded, y en el navegador es la razón de que si tienes una página y tu código realiza varias llamadas de red síncronas que tardan mucho, acabes con una página que se queda bloqueada y donde no puedes hacer click en ningún sitio.

Es el mismo problema que tenemos en Node.js si hiciéramos muchas llamadas síncronas costosas (base de datos, ficheros, red). No habría respuesta hasta finalizadas todas las tareas.bloqueos_node

La forma de evitar los bloqueos es con programación asíncrona y en un navegador como Chrome esto es posible porque aparte del hilo de ejecución del motor javascript hay otros hilos de gestión. Entre ellos el famoso Event Loop. ¿Cómo funciona?

Programación asíncrona y el Event Loop

Cuando se ejecuta un código javascript en una página, de forma síncrona, usa la pila de llamadas del motor. Los métodos invocados se van apilando y desapilando y solo se devuelve el control al navegador cuando la pila se vacía. En este modo síncrono, si hay tareas que tardan mucho, podemos vernos con que la página se “congela” durante un buen rato.

callstack_sincrono

Si realizamos tareas de forma asíncrona, como cuando invocamos el API setTimeOut pasando una función de callback y un retardo, esta es ejecutada por un hilo independiente del navegador, fuera de la pila de Javascript. Cuando termina de ejecutarse la función de callback queda en una cola, a la espera de poder ejecutarse.

callstack_asincrono

¿Cuando se ejecuta la función de callback? En cuanto la pila se libera otro hilo de gestión del navegador, el famoso Event Loop, coge la función para meterla en la pila.

Por todo lo anterior es que se usa ese truco de llamar a funciones pasándolas a setTimeOut con delay 0. Las funciones no se ejecutan directamente, sino que acaban en una cola, y el loop irá pasándolas a la pila cada vez que se vacíe. En esos huecos en medio la página responde a nuestras acciones, no está bloqueada. Provocamos asincronía y creamos páginas mas dinámicas.

APIs asíncronas como setTimeOut hay muchas: para llamadas en red, consulta de almacenes de datos, etc.

Node.js resuelve la programación asíncrona como hemos descrito antes para el navegador. Y es que Node.js usa el motor javascript en que se basa Chome, y los procesos de gestión alrededor del motor son como los que usa el navegador.

chromeVer también:

Enlaces interesantes

Pokemon Go usa el gestor de contenedores Kubernetes para su cloud.

Alguien está aprendiendo como tumbar Internet. ¿China, Rusia? Ataques calculados para medir las defensas.

Slack usa PHP para la mayoría de su lógica servidor, lo que es una elección poco habitual hoy. ¿Porqué decidieron hacerlo así?

Cuando el periodismo volvió a ser la clave en Estados Unidos. En esta campaña han dicho claramente que un candidato mentía cuando mentía, sin medias tintas.

Uso de “relojes de aroma” en oriente para medir el tiempo. El polvo de incienso quema de forma regular dibujando figuras sobre objetos muy singulares. El incienso quema a un ritmo conocido que permite conocer la duración que va a tener una sesión. Una forma de percibir un tiempo que no se escapa.

Enlaces Interesantes

Organizaciones duales: La manera que tienen las grandes empresas de abordar la famosa transformacion digital. Si la jerarquía y las economías de escala no funcionan, se crea una organización paralela, plana, en red y orientada al cambio. ¿Funcionará?

Varoufakis se equivoca: la renta básica es una marcha atrás. La renta básica es atractiva: empoderadora individualmente, cruza fronteras ideológicas, es el sueño de la tecnocracia… y sin embargo tendría consecuencias sociales y morales terribles.

How Node.js Powers the Many User Interfaces of Netflix. Node.js sigue irresistible su ascenso al cielo del enterprise software, desplazando lentamente a las tecnologías Java.

Lobos: Así es el verdadero macho alfa. “La principal característica de un lobo macho alfa es una discreta confianza y seguridad en sí mismo. Sabe lo que tiene que hacer; sabe lo que más conviene a su manada. Da ejemplo. Se siente a gusto. Ejerce un efecto tranquilizador” Lejos de la imagen popular de un individuo agresivo.

Descubriendo la magia de OStatus con GNU social. Fundamentos de GNU Social para unirte al proyecto. PubSubHubbub ¡vaya nombre para un protocolo de publicación-subscripción!

Enlaces interesantes

Sobre Microservicios, Chatbots, soluciones distribuidas y reducción de escala en la Banca.

Acerca de Microservicios

O’Really se hace eco de como este año los Microservicios están en boca de todos, y en esta entrada de High Scalability nos advierten que los Microservicios no son gratis.

También en relación con este tema, en este post se describe la arquitectura de 4 capas propuesta por la consultora Forrester, para dar solución a la necesidad de tener servicios que atienden a multiples tipos de dispositivos y clientes, y donde el volumen de peticiones puede variar de forma muy rápida en el tiempo.

Respecto a la capa de delivery aquí un interesante ejemplo de Netflix y sus UX APIs para reducir el diálogo entre cliente y servidor y mejorar la experiencia del usuario.

Acerca de APIs y Chatbots

“Slack, Chatbots, and Voice: At the Intersection of Humans and APIs” resalta la tendencia a soluciones distribuidas no solo en los servicios sino en la propia interfaz de usuario.

“Todavía usamos aplicaciones que están construidas para resolver problemas para una gran variedad de casos de uso, contextos y personas. Las aplicaciones son bastante genéricas” […] “Se requiere de los diseñadores que encuentren formas de garantizar que la interfaz de usuario se adapta al mayor número de usuarios posible”.

“Estamos viendo las etapas iniciales de una transición de usuarios yendo a las aplicaciones a aplicaciones que van a los usuarios” […] “cerca de donde las personas están resolviendo problemas”. Los chatbots son un ejemplo mas de esta tendencia.

“En el futuro, muchas de las aplicaciones que usaremos existirán durante un tiempo limitado, quizá solo unos pocos meses, semanas, dias o incluso unas pocas horas”.

Y aquí en “How to Prevent a Plague of Dumb Chatbots” nos ponen los pies en la tierra respecto a las posibilidades actuales de los chatbots.

“El problema es que a los ordenadores todavía les cuesta mucho entender el lenguaje humano en toda su complejidad y matices. Se han hecho avances importantes pero los chatbots todavía tienden a confundirse y a no entender.”

Y una última sobre cambios en la Banca

Small Business likes Small Banks and vice versa. “Las pequeñas empresas son una oportunidad  enorme para los emprendedores Fintech por una sencilla razón. A los grandes bancos no les gusta la complejidad de tratar con pequeños negocios, prefieren la escala de tratar con consumidores y grandes compañías. De esta manera los bancos dejan un gran espacio sin cubrir a los emprendedores.”

La productividad está en los pequeños

La sobreescala en la economía, en la sociedad, en las organizaciones, está impidiendo a las pequeñas empresas acceder a los recursos financieros que las permitan nacer y crecer de forma orgánica. Y eso, que es en estas empresas pequeñas donde realmente se está aportando productividad hoy en día. Cada vez mas, son estas las auténticas empresas productivas.

Como se comenta en este post de Las Indias, el sistema financiero se está adaptando, por ejemplo mediante la aparición de nuevos medios de gestión del riesgo para estas compañías, una forma de que el dinero pueda canalizarse a proyectos pequeños. Es lo que ocurre en la alianza de Santander UK y Kabbage, un sitio de préstamos rápidos para PYMEs basados en un sistema de evaluación rápida de riesgos.

Creo que además, estos mecanismos de financiación favorecen proyectos con una filosofía honesta y enriquecedora, en la que los fundadores no construyen pensando en que alguien les compre y dar “un pelotazo”, sino en hacer crecer proyectos con los que ellos o ellas también crecerán. Semillas capaces de crear destellos de abundancia en las ciudades donde crezcan.

Un camino a la abundancia

“Es tiempo de hacer una revolución productiva”: una charla que Natalia Fernández dió el pasado 7 de febrero en TEDxGijón.

Doce minutos para analizar, reflexionar y proponer un cambio radical, una revolución productiva en la que todos tenemos algo que aportar.

Revolución P2P. Un camino hacia la abundancia.

Feliz Solsticio de Verano! Feliĉa solstico de Somero!

Una pila la Matrix

Acabo de leer un artículo de Morozov donde alerta de que los servicios gratuitos que hoy nos ofrecen los centralizadores de la red los pagamos no solo con datos personales inconexos, sino también progresivamente con nuestra vida personal, permitiendo que estas corporaciones dirijan cada vez mas nuestra vida privada.

Tal vez tenga una posición excesivamente crítica, aunque comparto su opinión respecto al riesgo que corremos ya que para usar los servicios de estas empresas aceptamos su filtro de la realidad y sus reglas de juego y de esta manera cada vez somos mas “programables”. Consumimos de forma dirigida e incluso “trabajamos” gratuitamente. Para conseguir la gratificación o el servicio aceptamos depender del proveedor. Es una relación cada vez mas estrecha.

Vivimos en una sociedad de consumidores, donde muchos servicios “públicos” no los provee el estado, sino las corporaciones. Parece como si los centralizadores de la red quieran para nosotros un mundo feliz como el que Huxley describiera en su novela… y que podamos vivir en la Matrix que están construyendo para nosotros.