$30 off During Our Annual Pro Sale. View Details »

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.


    4 interfaces.


    Et après ?
    Julien Ponge

    View Slide

  2. “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

    View Slide

  3. 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

    View Slide

  4. Show me what’s reactive code like?


    Show me why reactive matters?
    in a containers world

    View Slide

  5. The 20* days test
    XYZ
    MVC
    Quarkus
    (classic,
    JVM)
    Quarkus
    (classic,
    native)
    AWS EC2
    800 req/min
    800 req/min
    800 req/min

    View Slide

  6. $$$
    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

    View Slide

  7. Ok, 4 interfaces. Must be easy, right?
    Publisher Subscriber
    Processor Subscription

    View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. Mutiny Zero
    (44 Kilobytes JAR)
    RS <-> Flow


    Mutiny Zero Adapters
    Vert.x -based


    stream publishers
    Mutiny Zero


    — minimal helper libraries to make publishers

    View Slide

  14. Mutiny 2
    Hibernate Reactive 2 Reactive Messaging
    Quarkus 3
    Past Java 6 legacy — Transitioning to JDK Flow

    View Slide

  15. View Slide

  16. Mutiny!
    + many more!

    View Slide

  17. Julien Ponge
    Q&A

    View Slide