stringtranslate.com

Flujos reactivos

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

Origen

Reactive Streams comenzó como una iniciativa a fines de 2013 entre ingenieros de Netflix , Pivotal y Lightbend . Algunas de las primeras discusiones 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 a Red Hat , Oracle , Twitter y spray.io. [6]

Objetivos

El objetivo principal de Reactive Streams es controlar el intercambio de datos de flujo a través de un límite asincrónico (como pasar elementos a otro subproceso o grupo de subprocesos  ) y, al mismo tiempo, garantizar que el lado receptor no se vea obligado a almacenar en búfer cantidades arbitrarias de datos. En otras palabras, la contrapresión es una parte integral de este modelo para permitir que las colas que median entre subprocesos estén delimitadas .

La intención de la especificación es permitir la creación de muchas implementaciones conformes , que en virtud de 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 de tecnología [7] disponible gratuitamente que permite a los implementadores de la especificación verificar si cubrieron todas las reglas y requisitos, incluidas las verificaciones 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 asincrónicos de datos con contrapresión sin bloqueo. [2] Los DSL de usuario final o las API de enlace de protocolo se han dejado deliberadamente fuera del alcance para alentar y permitir diferentes implementaciones que potencialmente usan diferentes lenguajes de programación para mantenerse 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 se demuestra que es exitosa y es adoptada por suficientes bibliotecas y proveedores.

Doug Lea , líder de JSR 166 [8], propuso que Reactive Streams formara parte de Java 9 como una nueva clase de flujo [9] que incluiría las interfaces que Reactive Streams actualmente proporciona. [5] [10] Después de un exitoso lanzamiento de la versión 1.0 de Reactive Streams y una creciente adopción, la propuesta fue aceptada y Reactive Streams se incluyó en JDK9 a través de JEP -266. [10]

Adopción

El 30 de abril de 2015 se publicó la versión 1.0.0 de Reactive Streams para JVM , [5] [6] [11] que incluye una API de Java , [12] una especificación textual , [13] un TCK y ejemplos de implementación. Viene con una multitud de implementaciones compatibles verificadas por el TCK para 1.0.0, enumeradas 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 Reactor Core compatible con Reactive Streams. [29]

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

Reactive Streams 1.0.1 se lanzó el 9 de agosto de 2017 e incluyó varias mejoras en la precisión de las especificaciones, mejoras en TCK y otras aclaraciones. La especificación, así como las interfaces, siguieron siendo totalmente compatibles con la versión 1.0.0, pero su objetivo era simplificar la adopción para futuros implementadores y alinearse con algunos requisitos adicionales establecidos por OpenJDK . [31]

Puertos e influencias

Citas

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

Referencias