• Montée en charge • C10K (= 10K connexions) • Comment supporter 10000 connexions simultanées ? • Robustesse • Que faire si la base ou les systèmes tiers sont (très) lents ? Objectifs Server DB @fbeaufume
• Modèle standard de nos serveurs • Est bloquant avec pool de thread : • En charge : • Multiplier les serveurs ? • Multiplier les threads ? Modèle « thread-per-request » Server Requests Threads pool @fbeaufume
• "Programming with asynchronous data streams" • Basé sur des étapes asynchrones et non bloquantes • API orientées callback et/ou déclaratives par composition de fonctions • Programmation réactive ≈ streams + CompletableFuture + backpressure • Bénéfices : • Montée en charge • Robustesse Programmation réactive @fbeaufume
• Syntaxe déroutante • Commencer par les streams Java 8 et la programmation fonctionnelle • API contaminante • Plus facile pour de nouvelles applications ou microservices Difficultés @fbeaufume
• JDBC pas encore supporté • Mono.fromCallable(() -> { … }).subscribeOn(Schedulers.elastic()) • Attendre JDK 10 • ThreadLocal perdent leur intérêt (MDC logging par exemple) • Pas encore de scope request ou session • myFlux.subscriberContext(Context.of("key", "value"))… Limitations @fbeaufume
• Supporter une forte charge • Pour fiabiliser des applications très communicantes • Microservices • Applications sensibles à la contention Cas d’usages @fbeaufume