Slide 1

Slide 1 text

Razões e emoções na programação reativa em Java Jéssica Félix

Slide 2

Slide 2 text

404 not found

Slide 3

Slide 3 text

Nada do que foi será, denovo, do jeito que já foi um dia... ● maior quantidade de usuários; ● maior quantidade de requests e mais dados; ● maior exigência de performance e tempo de resposta; ● Intolerância a downtime; ● Maior quantidade de nós de servidores por aplicação necessários para atender a toda essa demanda.

Slide 4

Slide 4 text

“Não vou mudar a arquitetura agora” “A equipe não vai saber fazer, vamos manter assim mesmo” “o projeto já está em andamento, vamos ver no próximo”

Slide 5

Slide 5 text

“A programação funcional tem muito mais a ver com paradigmas a serem utilizados do que com frameworks e arquiteturas de projetos” Bruno Bilescky, “Programação Funcional e Reativa para todos”

Slide 6

Slide 6 text

4 pilares da programação reativa Responsivo Resiliente Reage á eventos Elástico

Slide 7

Slide 7 text

4 pilares da programação reativa Reage á usuários em tempo real Reage e se recupera a falhas de software Gerenciadores assíncronos e não bloqueantes Reage á demanda (cores/servidores)

Slide 8

Slide 8 text

Nossa vida é reativa e funcional

Slide 9

Slide 9 text

Migrando uma aplicação para arquitetura reativa Atul Shukla Revant Talari

Slide 10

Slide 10 text

Arquitetura não-reativa - (ARC206) Architecting Reactive Applications on AWS

Slide 11

Slide 11 text

4 pilares da programação reativa Reagir á usuários em tempo real Reagir e se recuperar a falhas de software Gerenciadores assíncronos e não bloqueantes Reagir à demanda (cores/servidores)

Slide 12

Slide 12 text

Não reativa para reativa - (ARC206) Architecting Reactive Applications on AWS

Slide 13

Slide 13 text

Modelo de arquitetura final - (ARC206) Architecting Reactive Applications on AWS

Slide 14

Slide 14 text

Threads e Capacidade de concorrência Administração manual de threads; Java 5 - java.util.concurrent - Executors. Java 7 - Fork/Join framework Criação de aplicações de alta concorrência sem se preocupar com detalhes de baixo nível é possível? Framework Akka!

Slide 15

Slide 15 text

Modelo de Concorrência Estado compartilhado: o código a ser paralelizado é executado simultaneamente através da criação de processos ou threads. Quando as threads precisam acessar a mesma informação (estado compartilhado), usamos blocos synchronized, que acabam gerando um gargalo na aplicação, pois as instruções protegidas por synchronized são executadas apenas por uma thread por vez.

Slide 16

Slide 16 text

modelo de concorrência: estado compartilhado

Slide 17

Slide 17 text

Modelo de Concorrência Troca de mensagens: Os componentes não compartilham estado e se comunicam através de mensagens predominantemente assíncronas. O envio das mensagens normalmente é feito por algum outro software que atua como intermediário entre os componentes. Este “desconhecimento” entre os componentes garante um bom nível de desacoplamento e favorece a distribuição, pois permite a troca de mensagens entre componentes que estejam em servidores diferentes ou até em outras redes.

Slide 18

Slide 18 text

modelo de concorrência: troca de mensagens

Slide 19

Slide 19 text

“tudo são atores” Os atores são definidos como entidades capazes de realizar um processamento computacional e que se comunicam entre si através do envio e recebimento de mensagens. A comunicação entre atores é feita estritamente pela troca de mensagens, o estado interno de um ator não é acessível para outros. Um ator pode ter várias mensagens pendentes, mas apenas uma ser processada por vez, eliminando problemas com lock.

Slide 20

Slide 20 text

modelo de concorrência baseado em atores

Slide 21

Slide 21 text

Escrito em Scala e com API para Scala e Java, o Akka foi desenvolvido sobre a API de concorrência do Java e que possibilita ao desenvolvedor utilizar um modelo de concorrência baseado em atores. O Akka foi desenvolvido em 2009 por Jonas Bonér, inspirado pelo modelo de atores do Erlang Em Akka, a comunicação entre serviços usa mensagens assíncronas que otimizam a utilização da CPU, baixa latência, alto rendimento e escalabilidade.

Slide 22

Slide 22 text

Akka Revelado: A jornada de um arquiteto da JVM de atores resilientes para clusters escalonáveis

Slide 23

Slide 23 text

Operação de maneira distribuída Atores: Utiliza o modelo de concorrência baseado em atores · Futures: Os futures do Akka são muito parecidos com a implementação padrão do java.util.concurrent, porém possui integração com atores; · Scheduler: integrado ao contexto de atores, o Akka permite o agendamento de tarefas usando vários tipos de schedulers.

Slide 24

Slide 24 text

Primeiro passos usando Akka - Dev Media

Slide 25

Slide 25 text

LinkedIn Learning - Reactive Programming with Java 8 (RJava e Akka)

Slide 26

Slide 26 text

RxJava (Reactive extensions Java) Embora o RxJava não seja tão explicitamente orientado a mensagens como outras implementações de sistemas reativos, tais como os modelos de atores (por exemplo, o Akka), a plataforma RxJava oferece inúmeros recursos onde essa característica de orientação a mensagens fica mais evidente. O melhor exemplo disso são os Subjects que implementam o padrão Publish/Subscribe. No RxJava, um Subject representa um Observer e um Observable ao mesmo tempo, permitindo o multicasting de eventos de uma única fonte para múltiplos Subscribers filhos. Observer: coleção que funciona de forma unidirecional, ou seja, ele emite notificações sempre que ocorre uma mudança em um de seus itens e a partir disso podemos executar uma ação.

Slide 27

Slide 27 text

Entendendendo um pouco mais de RxJava em Android - ótimos argumentos!

Slide 28

Slide 28 text

Alpakka O projeto Alpakka é uma iniciativa de código aberto para implementar pipelines de integração reativa e com reconhecimento de fluxo para Java e Scala. Ele é construído sobre o Akka Streams e foi projetado desde o início para entender o fluxo nativamente e fornecer uma DSL para programação reativa e orientada por fluxo, com suporte integrado para contrapressão. O Akka Streams é uma implementação compatível com JavacontactStreams e JDK 9+ java.util.concurrent.Flow e, portanto, totalmente interoperável com outras implementações.

Slide 29

Slide 29 text

Quem me ajudou a construir essa palestra: https://www.reactivemanifesto.org https://www.youtube.com/watch?v=wioDkHQ9Pm8&feature=youtube_gdata https://www.devmedia.com.br/akka-programacao-concorrente/30714 https://doc.akka.io/docs/alpakka/current/ https://www.linkedin.com/learning/reactive-programming-with-java-8 https://pt.stackoverflow.com/questions/207362/qual- é-a-diferença-entre-promises-e-observables

Slide 30

Slide 30 text

Twitter: @tech_jessi | @meninadochapeu Linkedin: in/jessica-cris-felix Medium: @meninadochapeu Instagram: @meninadochapeuu Obrigada, Lindes! <3