Slide 1

Slide 1 text

PARADIGMA REATIVO? Kamila Santos Por dentro da programação reativa com Spring Webflux e Projeto Reactor

Slide 2

Slide 2 text

KAMILA SANTOS Desenvolvedora Backend Ame Digital Bacharel em ciência da computação Co organizadora das comunidades Perifacode, WoMakersCode e DevsJavaGirl

Slide 3

Slide 3 text

PARADIGMA REATIVO

Slide 4

Slide 4 text

PARADIGMA REATIVO É um paradigma de programação orientado a fluxos de dados/eventos, bem como a propagação dos mesmos de forma assíncrona.

Slide 5

Slide 5 text

PARADIGMA REATIVO Por trabalhar de forma assíncrona é altamente recomendada para lidar com grande volume de dados que sofrem grandes mudanças em tempo real.

Slide 6

Slide 6 text

PARADIGMA REATIVO Também é bastante utilizado em redes sociais (front e back) por funcionar orientado a ações do usuário que resultam em eventos.

Slide 7

Slide 7 text

MANIFESTO REATIVO

Slide 8

Slide 8 text

https://www.reactivemanifesto.org/

Slide 9

Slide 9 text

RESPONSIVO O sistema responde em tempo hábil, se possível

Slide 10

Slide 10 text

RESILIENTE O sistema permanece responsivo a falhas

Slide 11

Slide 11 text

ELÁSTICO O sistema permanece responsivo em face de uma carga de trabalho variável.

Slide 12

Slide 12 text

MESSAGE DRIVEN Os aplicativos reativos contam com a passagem de mensagens assíncronas para estabelecer um limite entre os componentes, garantindo acoplamento flexível, isolamento e transparência

Slide 13

Slide 13 text

RX JAVA

Slide 14

Slide 14 text

RXJAVA É uma implementação para a JVM das Reactie Extensions , que é uma biblioteca assíncrona e baseada em eventos que trabalha com sequências de observables.

Slide 15

Slide 15 text

RXJAVA Estende do padrão observer -> cada objeto chamado (subject), tem uma listas de dependentes (observers) que são notificados pelo subject automaticamente a cada mudança de estado por meio de seus operadores e métodos.

Slide 16

Slide 16 text

RXJAVA Suporta sequências de dados e eventos para compor suas sequências de eventos de forma declarativa.

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

REACTIVE STREAMS

Slide 19

Slide 19 text

REACTIVE STREAMS Iniciativa para fornecer um padrão / guia / regras para processamento de fluxo assíncrono com backpressure NIO

Slide 20

Slide 20 text

INTERFACE FLOW.PUBLISHER métodos para produzir streams e demais eventos

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

INTERFACE FLOW.SUBSCRIBER métodos para receber streams e demais eventos

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

INTERFACE FLOW.SUBSCRIPTION métodos para vincular o Publisher e o Subscriber.

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

INTERFACE FLOW.PROCESSOR define métodos para fazer algumas operações avançadas, como transformar itens de publishers para subscriber

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

CLASS SUBMISSIONPUBLISHER IMPLEMENTS FLOW.PUBLISHER Producer flexível de itens, em conformidade com a Reactive Streams.

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

REACTIVE STREAMS destinado a ambientes de tempo de execução (JVM), bem como protocolos de rede.https://github.com/reactive-streams/reactive-streams-jvm

Slide 31

Slide 31 text

REACTIVE STREAMS o objetivo principal é definir a troca de dados de fluxo através de um limite assíncrono.

Slide 32

Slide 32 text

REACTIVE STREAMS seu escopo é encontrar um conjunto mínimo de métodos, interfaces e protocolos que irão descrever as operações e entidades necessárias para ter fluxos de dados assíncronos com backpressure NIO.

Slide 33

Slide 33 text

CONCEITOS DE PROGRAMAÇÃO REATIVA

Slide 34

Slide 34 text

BACKPRESSURE Resistência ou força que se opõe ao fluxo de dados desejado por meio do software. Feedback do receptor ao produtor de que ele não está suportando a carga.

Slide 35

Slide 35 text

STREAM Sequência de objetos que suporta vários métodos que podem ser operados para produzir um resultado

Slide 36

Slide 36 text

STREAM vinculado a uma fonte de dados, um stream é capaz de emitir três eventos:

Slide 37

Slide 37 text

ONNEXT() representa algum valor, vá para o próximo valor de uma lista

Slide 38

Slide 38 text

ONERROR() houve um erro na execução

Slide 39

Slide 39 text

ONCOMPLETE() no caso de eventos finitos, indica que foi concluído

Slide 40

Slide 40 text

FLUX Pode emitir de 0 to N eventos, passando por OnNext (), OnComplete () e onError.

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

OBSERVABLE um observable pode passar mensagens de forma assíncrona.

Slide 44

Slide 44 text

SUBSCRIBER consome os dados recebidos da subscription

Slide 45

Slide 45 text

PUBLISHER produz os dados que serão consumidos pela assinatura.

Slide 46

Slide 46 text

SUBSCRIPTION conexão entre o Subscriber e o Publisher

Slide 47

Slide 47 text

No content

Slide 48

Slide 48 text

COLD OBSERVABLE a sequência de eventos só é executada se o Observable tiver um subscriber associado

Slide 49

Slide 49 text

HOT OBSERVABLE ele emite eventos independentemente de haver um subscriber associado

Slide 50

Slide 50 text

SPRING WEBFLUX

Slide 51

Slide 51 text

SPRING WEBFLUX Spring WebFlux pode ser definido como uma versão “paralela” ao já conhecido e amplamente utilizado Spring MVC (servlet), tendo como principal diferença o suporte para streams NIO reativos e por suportar o conceito de backpressure com o servidor Netty vindo por default embutido em seu arquitetura.

Slide 52

Slide 52 text

SPRING WEBFLUX A partir da versão 5.0 do Spring Framework temos uma parte reativa além da estrutura Servlet que já existia, cada módulo destes é opcional, você pode usar a parte Servlet, a parte reativa ou mesmo ambas em suas aplicações.

Slide 53

Slide 53 text

HTTPS://DOCS.SPRING.IO/SPRING-FRAMEWORK/DOCS/5.0.0.BUILD-SNAPSHOT/SPRING-FRAMEWORK-REFERENCE/HTML/WEB-REACTIVE.HTML

Slide 54

Slide 54 text

SPRING WEBFLUX Spring Webflux foi desenvolvido porque precisávamos de aplicativos não bloqueantes que pudessem trabalhar com um pequeno número de threads simultaneamente e que pudessem ser executados com alguns recursos de hardware.

Slide 55

Slide 55 text

SPRING WEBFLUX no Servlet 3.1, uma API NIO foi fornecida, mas seu uso não corresponde ao resto da API e a todos os conceitos por trás do Servlet, que possui contratos de bloqueio.

Slide 56

Slide 56 text

SPRING WEBFLUX Estes fatores foram decisivos para o desenvolvimento de uma nova API que fosse utilizada independentemente do tempo de execução e de forma não bloqueante, o que foi possível com os servidores (Netty por exemplo) que se consolidaram na operação assíncrona e não bloqueante.

Slide 57

Slide 57 text

SPRING WEBFLUX Outra razão é que o WebFlux torna mais fácil entender e usar conceitos de programação funcional / reativa. Com a adição de recursos funcionais do Java 8 e Flowable API no Java 9 , que permitiu ao Spring WebFlux ter functional endpoints e annotated controllers nos aplicativos.

Slide 58

Slide 58 text

COMO AS REQUESTS FUNCIONAM? Este modelo, dependendo do volume de requisições e da forma como foi desenvolvido, pode causar lentidão na sua aplicação e até mesmo um erro de Out Of Memory (este tipo de erro geralmente ocorre quando mantemos objetos por muito tempo ou tentamos processar muito de dados de uma vez)

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

E NO WEBFLUX?

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

PROJETO REACTOR

Slide 64

Slide 64 text

REACTOR É uma biblioteca baseada nas Reactive Streams Specifications, é totalmente não bloqueante e interage diretamente com a API Java funcional (Stream, Duration e Completable Future), para composição de elementos utilizando Flux e Mono em arquiteturas de microsserviços , oferecendo mecanismos de backpressure prontos para TCP, UDP e HTTP (incluindo sockets da web).

Slide 65

Slide 65 text

REACTOR Seus operators e schedulers podem suportar um grande volume de transferência (até 10 milhões de solicitações por segundo, de acordo com a documentação do Reactor https://projectreactor.io/), também foi a primeira biblioteca reativa a implementar alguns pontos sugeridos pela reactive streams applications( https://github.com/reactor/reactive-streams- commons), que mais tarde também foram implementados por RxJava2.

Slide 66

Slide 66 text

REACTOR Seus módulos são fluxos reativos abstratos e interoperáveis para facilitar o seu desenvolvimento, podendo ser utilizados com:Spring FrameworksDrivers e clientes (por exemplo CloudFoundry Java Client https://github.com/cloudfoundry/cf-java-client)- em protocolos / contratos como R2DBC (https://r2dbc.io/) e RSocket (https://rsocket.io/), por exemplo.

Slide 67

Slide 67 text

REACTOR CORE é a parte principal desta biblioteca, os outros módulos são dependentes dela, ela fornece tipos reativos que implementam um Publisher que fornece Flux e Mono

Slide 68

Slide 68 text

REACTOR NETTY é o servidor de nosso aplicativo NIO, usada para o desenvolvimento de servidores altamente escaláveis.

Slide 69

Slide 69 text

BENEFÍCIOS

Slide 70

Slide 70 text

BENEFÍCIOS não bloqueante, o que gera certo ganho de desempenho.

Slide 71

Slide 71 text

BENEFÍCIOS menos threads, menos memória usada / gasta

Slide 72

Slide 72 text

BENEFÍCIOS segue os princípios do manifesto reativo: aplicativos responsivos, resilientes, elásticos e orientados por mensagens.

Slide 73

Slide 73 text

PROBLEMAS

Slide 74

Slide 74 text

PROBLEMA Uma forma diferente de programação (programação declarativa)

Slide 75

Slide 75 text

PROBLEMAS Difícil de depurar (rastreamento de pilha mais complicado de entender).

Slide 76

Slide 76 text

SHOW ME THE CODE

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

No content

Slide 81

Slide 81 text

No content

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

DEMO EM: https://github.com/Kamilahsantos/TheDevConf-2020-ReactiveParadigm- Example

Slide 86

Slide 86 text

OBRIGADA <3 Demais redes sociais e demo no QRCode Linkedin https://www.linkedin.co m/in/kamila-santos- oliveira/ Twitter @kamilah_santos