Cuando empezamos a diseñar nuestro controlador programable Adquio tuvimos que tomar muchas decisiones, y muchas de ellas iban a decidir cuál sería el futuro de nuestros dispositivos.
Cuando tú mismo debes diseñar, tanto el hardware como el software, esto es muy normal. En la parte de hardware, decidimos usar procesadores ARM, y no microcontroladores como hacen otros fabricantes, pero hoy no vamos a hablar de esto, sino de la decisión más importante que hemos tomado en la parte del software.
¿Qué lenguaje de programación usaremos para desarrollarlo?
La decisión fue rápida, teniendo en cuenta las características que deseábamos para nuestro dispositivo. Node.JS. Pero, ¿por qué?.
La respuesta es la forma en la que Node.JS trabaja con su bucle de eventos, que lo hace muy rápido en procesar cantidades enormes de eventos, procesos y entradas y salidas. Esto es lo más deseable para un dispositivo que se debe encargar de procesar decenas de conexiones con otros dispositivos, y de tratar los eventos que vienen de ellos.
¿Cómo funciona el bucle de eventos de NodeJS?
Todos los procesos de tu programa se envían al bucle de eventos, si lo que le estás pidiendo se puede resolver de forma inmediata, lo hace y retorna el control, pero si es un trabajo más pesado, lo separa en un hilo diferente y sigue procesando tu programa. Esto es lo que se llama en Node.JS, asincronía, ya que, tu programa finalmente puede estar ejecutando muchos de sus procesos de forma paralela. Esto es ideal para un sistema que debe gestionar montones de eventos de entrada/salida, como es el caso de Adquio.
Adicionalmente, esos hilos pueden ser repartidos entre diferentes núcleos del procesador, si el dispositivo en el que se está ejecutando los tiene. En nuestro caso, Adquio tiene 4 núcleos, por eso es tan eficiente, porque saca todo el partido al hardware que tiene disponible, y lo hace de forma natural y nativa, ya que, el lenguaje base que hemos utilizado ya se comporta así.
Ventajas de Node.JS y el bucle de eventos en Adquio
- Una de las principales ventajas es su capacidad para manejar varias solicitudes de manera eficiente. En lugar de tener que crear un nuevo hilo de ejecución para cada solicitud, el bucle de eventos permite a Adquio procesar varias solicitudes de manera secuencial utilizando un solo hilo. Esto reduce la sobrecarga del sistema y permite que Adquio maneje una mayor cantidad de solicitudes sin sufrir un rendimiento reducido. Esto permite a los controladores Adquio gestionar gran cantidad de entradas y salidas de forma simultánea.
- Su capacidad para ejecutar tareas de manera asíncrona. Cuando se produce un evento, como una solicitud de red o una operación de entrada/salida (I/O), el bucle de eventos lo coloca en una cola de eventos y procesa el evento cuando llega su turno. Mientras tanto, tu programa dentro de Adquio sigue ejecutándose y puede procesar otros eventos. Esto permite a Adquio ejecutar tareas de manera más eficiente y sin tener que esperar a que se completen todas las tareas antes de continuar. Especialmente importante cuando debemos esperar por las respuestas de buses lentos como Modbus RTU o BACnet MSTP.
- El bucle de eventos es compatible con sistemas con múltiples núcleos. Cuando se ejecuta una aplicación Node.js en un sistema con múltiples núcleos, como Adquio, cada núcleo puede ejecutar su propia instancia del bucle de eventos. Esto permite a Adquio aprovechar al máximo el poder de procesamiento del sistema y manejar varias solicitudes de manera más eficiente.
- Facilita la escritura de código asíncrono: el bucle de eventos proporciona un marco de trabajo para escribir código asíncrono de manera sencilla y consistente. Esto, puede simplificar significativamente el proceso de desarrollo y mejorar la legibilidad del código.
- Mejora la escalabilidad de Adquio: al permitir que Adquio maneje varias solicitudes de manera eficiente, el bucle de eventos puede mejorar significativamente la escalabilidad de tus proyectos. Esto es especialmente importante en entornos de alta concurrencia, donde se pueden esperar grandes cantidades de tráfico.
- Facilita la integración con otras bibliotecas y frameworks: debido a su diseño basado en eventos, el bucle de eventos de Node.js se integra de manera natural con otras bibliotecas y frameworks que utilizan un modelo similar. Esto puede facilitar la integración de tu aplicación con otras herramientas y tecnologías. Esto es perfecto para nuestra hoja de ruta con Adquio.
- Su capacidad para mejorar la eficiencia de tus Scripts dentro de Adquio. Al procesar los eventos de la cola de manera secuencial y permitir que Adquio siga ejecutándose mientras se espera a que ocurran otros eventos, el bucle de eventos permite a Adquio ejecutar tareas de manera más eficiente y sin tener que esperar a que se completen todas las tareas antes de continuar. Esto puede mejorar significativamente el rendimiento de Adquio y hacerlo más ágil.
- Su capacidad para mejorar la estabilidad de tu aplicación. Al procesar los eventos de manera secuencial y no tener que esperar a que se completen todas las tareas antes de continuar, el bucle de eventos permite a Adquio recuperarse de forma más rápida de posibles errores o problemas. Esto puede mejorar significativamente la estabilidad para tus proyectos y reducir el tiempo de inactividad.
- Es altamente extensible y permite a los desarrolladores crear aplicaciones personalizadas dentro de Adquio, que se ajusten a sus necesidades específicas. Al utilizar el bucle de eventos como marco de trabajo, los desarrolladores pueden crear aplicaciones más avanzadas y adaptables que pueden crecer y evolucionar a medida que las necesidades del cliente cambien.
- Es compatible con una amplia variedad de sistemas operativos y plataformas. Node.js se puede instalar en prácticamente cualquier sistema operativo, incluyendo Windows, macOS, Linux y Unix. Esto significa que puedes desarrollar aplicaciones con Node.js en el sistema operativo que prefieras y luego implementarlas en cualquier otro sistema operativo compatible. Esto ha sido clave para portar nuestro software y crear productos como Adquio Server o Adquio Link.
- Es compatible con una amplia variedad de plataformas de nube y servicios de hosting, lo que significa que puedes implementar fácilmente tus aplicaciones en entornos en la nube. Adquio ha usado esta ventaja clave para crear nuestro producto Adquio Link.
- Es compatible con una amplia variedad de módulos y bibliotecas externas. La comunidad de Node.js ha creado una gran cantidad de módulos y bibliotecas que pueden ser fácilmente integrados en tu aplicación mediante el uso de Node Package Manager (NPM). Esto significa que puedes aprovechar la amplia variedad de herramientas y funcionalidades que han sido creadas por otros desarrolladores y utilizarlas para mejorar tu aplicación. Esto nos ha permitido, por ejemplo, conectar Adquio con la predicción meteorológica, o con los precios de la energía.
- El bucle de eventos de Node.js es compatible con una amplia variedad de bases de datos y sistemas de almacenamiento de datos. Puedes utilizar el bucle de eventos para conectarte a bases de datos relacionales como MySQL y PostgreSQL, o a bases de datos no relacionales como MongoDB y Redis. Esto significa que puedes almacenar y recuperar datos de manera eficiente y utilizar el bucle de eventos para procesar y manejar esos datos de manera eficiente. Todo esto desde un controlador programable, ¿no es increíble?.
Como puedes comprobar, nuestras decisiones siempre van unidas a la eficiencia, no serviría de nada tener un procesador muy potente, pero no poder sacarle todo su partido. En este caso, y como acabas de ver, usar Node.JS es la mejor decisión que pudimos tomar, ya que, no hay mejor forma de aprovechar los recursos de hardware y hacerlo para darle al cliente final la mejor experiencia de rendimiento y eficacia.
Esto, solo es otro ejemplo más de por qué Adquio te interesa, porque sabes que tienes el mejor hardware del mercado en tu controlador programable, pero no únicamente eso, sino que, como acabas de ver, también tienes el mejor software, que aprovecha todas las características de los procesadores modernos de la forma más óptima para ti.