Modelo de flujo de datos oportuno de Naiad fue realizado por un equipo de Microsoft Research en Silicon Valley en 2013 y está disponible bajo la licencia de código abierto Apache 2.0. Naiad es un sistema de código abierto basado en «.Net» que fue desarrollado para un alto rendimiento, baja latencia y computación incremental sobre otras técnicas contemporáneas existentes de procesamiento por lotes, procesamiento de gráficos y sistemas de procesamiento de flujo como MapReduce, Dryad, Spark, Storm, Pregel, GraphLab , etc. Puede tomarse como el siguiente nivel de pensamiento después de Dryad, que usaba gráficos acíclicos dirigidos (DAG), ya que Naiad también admite gráficos de flujo de datos dirigidos con ciclos estructurados.
Naiad coordina todos los trabajos de procesamiento por marcas de tiempo. Estas marcas de tiempo se agregan a los mensajes mediante un flujo de datos oportuno, que fluye entre los vértices del gráfico. Esta función habilita el modelo de varias maneras, como vértices con estado para consumir y producir mensajes de forma asincrónica, bucles estructurados que permiten la retroalimentación en el flujo de datos y notificaciones para los vértices cuando se han recibido todos los registros para una entrada o bucle determinado.
Contribución
Muchos algoritmos de macrodatos contienen bucles, y estos bucles suelen depender de los datos, y mantiene la iteración del cálculo hasta que la respuesta ya no cambia. Cuando la respuesta comienza a estabilizarse, hay una redundancia de datos entre cada iteración y las iteraciones anteriores, ya que la mayor parte de los datos en ambas iteraciones son iguales.
En los últimos años, se introdujeron grandes plataformas de datos como Hadoop y las personas eran más ambiciosas para procesar sus datos en la nube y querían hacer el procesamiento de gráficos, el procesamiento de flujo, el procesamiento por lotes con enormes fuentes de datos. Esos problemas llevan al equipo de Microsoft hacia la implementación de Naiad. Está diseñado para resolver los problemas desafiantes mencionados anteriormente con el apoyo de algunos factores clave como ejecutar bucles, mantener el estado, reaccionar rápidamente a los datos entrantes y proporcionar un entorno de alto rendimiento para ejecutarse en un sistema distribuido escalable.
Algunas de las funciones proporcionadas por Naiad se pueden lograr con los sistemas existentes, pero esas aplicaciones dependen de diferentes plataformas y tienen diferentes efectos en la eficiencia, la facilidad de mantenimiento y la simplicidad. Naiad combina todas estas características en un marco general que admite transmisión de baja latencia, procesamiento por lotes de alto rendimiento y coordinación dentro de un flujo de datos.
Naiad ejecuta programas simples con la velocidad de las plataformas de propósito general existentes y programas complejos con la velocidad de los sistemas especializados para aprendizaje automático, análisis de gráficos y procesamiento de flujo. Lo que es más importante, Naiad se puede usar de manera efectiva en una variedad de programas simples para sistemas distribuidos a gran escala. Naiad habilita el poder del análisis gráfico, el aprendizaje automático y el procesamiento de flujo en un solo marco.
Esta es la primera solución que reúne el poder de estas tecnologías. Puede ser posible combinar los sistemas existentes y encontrar algún tipo de solución para un escenario determinado, pero cuando se compara con Naiad como una solución de plataforma única, es típicamente más eficiente, mantenible y extensible.