Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reactive Streams. 4 Interfaces. Et après ?

Reactive Streams. 4 Interfaces. Et après ?

https://www.volcamp.io/talks/22d1t1s7

Reactive Streams est une spécification d’interfaces et d’un protocole pour le traitement de flux asynchrones non-bloquants.

De nombreuses bibliothèques de l’écosystème Java s’appuient sur Reactive Streams: il est ainsi possible de connecter un acteur Akka programmé en Scala qui envoie un flux d’évènements à une application Quarkus qui utilise le modèle de programmation asynchrone de Mutiny en Java.

Si Reactive Streams et son cousin Flow du JDK n’exposent que 4 interfaces en apparence très simples à implémenter, le diable se cache dans les détails du protocole Reactive Streams.

Cette présentation vous expliquera les dessous de Reactive Streams basé sur notre expérience du projet Mutiny, comment écrire un composant Reactive Streams correct, l’intégration de l’asynchrone dans des frameworks comme Quarkus, les fausses bonnes idées liées à la performance ainsi que le futur de l’écosystème réactif Java.

Julien Ponge

October 13, 2022
Tweet

More Decks by Julien Ponge

Other Decks in Programming

Transcript

  1. “Reactive Streams is an initiative to provide a standard for

    asynchronous stream processing with non-blocking back pressure.” — https:/ /www.reactive-streams.org/ Mutiny! Photo by Arno Senoner on Unsplash
  2. org.reactivestreams.* (Java 6 legacy) java.util.concurrent.Flow.* (since JDK 9) Back-pressured, asynchronous,

    non-blocking (see Reactive Streams TCK) < your own library / client / driver / … > APIs Protocol User-facing APIs
  3. The 20* days test XYZ MVC Quarkus (classic, JVM) Quarkus

    (classic, native) AWS EC2 800 req/min 800 req/min 800 req/min
  4. $$$ Application Instance type Price per month (Instance + ESB)

    XYZ MVC T2.medium (2 vCPU, 4 Gb) 26.08 $ XYZ MVC T2.small (2 vCPU, 1 Gb) 14.70 $ (1.86% of timeout) Quarkus T2.small (2 vCPU, 1 Gb) 14.70 $ Quarkus T2.micro (1 vCPU, 1Gb) 9.15 $ Quarkus Native T2.micro (1 vCPU, 1Gb) 9.15 $ Quarkus Native T2.nano (1 vCPU, 0.5 Gb) 6.25 $ (3.64% of timeout) Heap Size: 256Mb
  5. Mutiny Zero (44 Kilobytes JAR) RS <-> Flow Mutiny Zero

    Adapters Vert.x -based stream publishers Mutiny Zero — minimal helper libraries to make publishers
  6. Mutiny 2 Hibernate Reactive 2 Reactive Messaging Quarkus 3 Past

    Java 6 legacy — Transitioning to JDK Flow