Articulo de referencia

Flujos reactivos

Reactive Streams es una iniciativa para proporcionar un estándar para el procesamiento asíncrono de flujos con contrapresión sin bloqueo . [ 1 ] [ 2 ] Origen Reactive Streams co...

Reactive Streams es una iniciativa para proporcionar un estándar para el procesamiento asíncrono de flujos con contrapresión sin bloqueo . [ 1 ] [ 2 ]

Origen

Reactive Streams comenzó como una iniciativa a finales de 2013 entre ingenieros de Netflix , Pivotal y Lightbend . Algunas de las primeras conversaciones comenzaron en 2013 entre los equipos de Play y Akka en Lightbend. [ 3 ] [ 4 ] Lightbend es uno de los principales contribuyentes de Reactive Streams. [ 5 ] Otros contribuyentes incluyen Red Hat , Oracle , Twitter y spray.io. [ 6 ]

Objetivos

El objetivo principal de Reactive Streams es gestionar el intercambio de datos de flujo a través de un límite asíncrono ( como pasar elementos a otro hilo o grupo de hilos ) y, al mismo tiempo, garantizar que el receptor no se vea obligado a almacenar cantidades arbitrarias de datos en búfer. En otras palabras, la contrapresión es una parte integral de este modelo para permitir que las colas que median entre los hilos tengan un tamaño limitado .  

La intención de la especificación es permitir la creación de múltiples implementaciones conformes que, al cumplir con las reglas, podrán interoperar sin problemas, preservando los beneficios y características mencionados en todo el gráfico de procesamiento de una aplicación de flujo. Junto con la especificación, se desarrolló un kit de compatibilidad tecnológica [ 7 ] de libre acceso que permite a los implementadores verificar si han cubierto todas las reglas y requisitos, incluyendo comprobaciones de posibles condiciones de carrera .

El alcance de Reactive Streams es un conjunto mínimo de interfaces , métodos y protocolos que describen las operaciones y entidades necesarias para lograr flujos de datos asíncronos con contrapresión no bloqueante. [ 2 ] Los DSL de usuario final o las API de enlace de protocolo se han dejado deliberadamente fuera del alcance para fomentar y permitir que diferentes implementaciones que potencialmente utilizan diferentes lenguajes de programación se mantengan lo más fieles posible a los modismos de su plataforma.

Inclusión en el estándar Java

La especificación se desarrolló con la intención de incluirla en el futuro en la biblioteca estándar oficial de Java, si demuestra ser exitosa y es adoptada por suficientes bibliotecas y proveedores.

Doug Lea , líder de JSR 166 [ 8 ], propuso que Reactive Streams se integrara en Java 9 como una nueva clase Flow [ 9 ] que incluiría las interfaces que actualmente proporciona Reactive Streams. [ 5 ] [ 10 ] Tras el exitoso lanzamiento de la versión 1.0 de Reactive Streams y su creciente adopción, la propuesta fue aceptada y Reactive Streams se incluyó en JDK9 mediante JEP -266. [ 10 ]

Adopción

El 30 de abril de 2015 se lanzó la versión 1.0.0 de Reactive Streams para la JVM , [ 5 ] [ 6 ] [ 11 ] incluyendo la API de Java , [ 12 ] una especificación textual , [ 13 ] un TCK y ejemplos de implementación. Viene con multitud de implementaciones compatibles verificadas por el TCK para 1.0.0, listadas en orden alfabético: [ 11 ]

Otras implementaciones incluyen Cassandra , [ 23 ] Elasticsearch , [ 24 ] Apache Kafka , [ 25 ] Parallel Universe Quasar, [ 26 ] Play Framework , [ 27 ] Armeria. [ 28 ]

Se anuncia que Spring 5 se basará en un núcleo Reactor compatible con Reactive Streams. [ 29 ]

Amazon anunció que su SDK de Amazon Web Services admitiría Reactive Streams para proporcionar capacidades de transmisión en sus bibliotecas cliente en la versión 2.0. [ 30 ]

Reactive Streams 1.0.1 se publicó el 9 de agosto de 2017, incluyendo varias mejoras en la precisión de la especificación, mejoras en TCK y otras aclaraciones. La especificación y las interfaces mantuvieron una compatibilidad total con la versión 1.0.0, pero se buscó simplificar la adopción para futuros implementadores y alinearla con algunos requisitos adicionales establecidos por OpenJDK . [ 31 ]

Puertos e influencias

  • Se puso a disposición una versión directa de la especificación, las interfaces y el TCK bajo el mismo grupo de trabajo para la plataforma .NET . [ 32 ]
  • Cuando el lenguaje Elixir introdujo su API de transmisión llamada GenStage, los autores expresaron su agradecimiento a "[los] proyectos akka-streams y reactive-streams que nos brindaron orientación en la implementación del intercambio impulsado por la demanda entre etapas". [ 33 ]

Citas

  1. reactive-streams.org
  2. 1 2 3 Walls 2019 , págs. 243–245, §10.1.1 Definición de flujos reactivos.
  3. Un viaje a los flujos reactivos
  4. Entrevista sobre Reactive Streams 1.0.0
  5. 1 2 3 Reactive Streams lanza su primera versión estable para JVM
  6. 1 2 Reactive Streams 1.0.0: un nuevo estándar en el procesamiento reactivo de datos
  7. "Reactive Streams TCK" . GitHub .
  8. "Clases candidatas de jdk9 Flow y SubmissionPublisher" . Archivado del original el 20 de enero de 2015. Consultado el 23 de diciembre de 2015 .
  9. "java.util.concurrent.Flow" . Archivado del original el 3 de febrero de 2016. Consultado el 23 de diciembre de 2015 .
  10. 1 2 JEP 266: Más actualizaciones sobre concurrencia
  11. 1 2 ¡ Reactive Streams 1.0.0 ya está aquí!
  12. API de Java
  13. Flujos reactivos para la especificación de la JVM
  14. InfoQ: Streams reactivos con Akka Streams
  15. "Principios de diseño detrás de Akka Streams" . Archivado del original el 12 de enero de 2016. Consultado el 23 de diciembre de 2015 .
  16. Controlador Java para MongoDB Reactive Streams
  17. Ratpack: La API de flujos reactivos
  18. ↑ ¡ Reactor 2.0.0.RC1 con soporte nativo para Reactive Streams ya está disponible!
  19. RxJava avanzado: La API Reactive-Streams (parte 1)
  20. Slick 3: Flujos reactivos para acceso asíncrono a bases de datos en Scala
  21. Slick 3.0.0
  22. Integración de Vert.x Reactive Streams
  23. "Acceso a Cassandra de forma reactiva" . Archivado del original el 16 de enero de 2016. Consultado el 23 de diciembre de 2015 .
  24. elastic4s — DSL no bloqueante, con tipado seguro y cliente Scala para Elasticsearch
  25. Flujos reactivos para Apache Kafka
  26. "Cuásar y corrientes reactivas" . Archivado del original el 4 de octubre de 2015. Consultado el 24 de diciembre de 2015 .
  27. Play Framework: integración con Reactive Streams (experimental)
  28. Armeria - Completamente asíncrono y reactivo
  29. Primavera reactiva
  30. "Anuncio de la vista previa para desarrolladores del SDK de AWS para Java 2.0" .
  31. "Anuncio de lanzamiento de Reactive Streams 1.0.1" .
  32. "Reactive Streams .NET" . GitHub .
  33. «Blog de Elixir: Anuncio de GenStage» .

Referencias

  • Walls, Craig (octubre de 2019). Primavera en acción (quinta  ed.). Manning . pág.  520. ISBN 9781617294945.
  •  Este artículo incorpora texto de www.reactive-streams.org , que se publica bajo una Dedicación de Dominio Público CC0 1.0 Universal (CC0 1.0) .