reactive programming: brincando com eficiência, composição e assíncronia
TRANSCRIPT
![Page 1: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/1.jpg)
Reactive Programming: Brincando com eficiência, composição e assincronia.
Felipe Mamud@ftmamud
Raphael Almeida@raphait
HPC
![Page 2: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/2.jpg)
Agradecimentos
HPC
![Page 3: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/3.jpg)
Será que nossos sistemas já estão no limite?
![Page 4: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/4.jpg)
![Page 5: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/5.jpg)
INTERNET USERS2.4bi
2012
INTERNET USERS3.01bi
TENS OF SERVERS
Fontes: http://recode.net/2014/05/28/meeker-as-internet-user-growth-slows-the-real-driver-is-mobile-usage/http://www.slideshare.net/wearesocialsg/digital-social-mobile-in-2015
RESPONSE TIMESECONDS
CLOUD-BASED CLUSTERMULTICORE
OFFLINE MAINTENANCE
REAL TIMEMILLISEC/MICROSEC
100% UPTIME
FAST DATA
GIBABYTE DATA
BIGDATA
PETABYTES
2015
![Page 6: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/6.jpg)
As exigências e as expectativas para aplicações mudaram
drasticamente nos últimos anos.
![Page 7: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/7.jpg)
Precisamos de sistemas que irão:
● Reagir a eventos (Event-Driven)
● Reagir a carga (Scalable)
● Reagir a falhas (Resilient)
● Reagir a usuários (Responsive)
![Page 8: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/8.jpg)
Reactive Programming“Readily responsive to a stimulus”
![Page 9: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/9.jpg)
Reactive Manifesto
![Page 10: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/10.jpg)
O que são sistemas Reativos?
Sistemas criados como Reativos são muito mais flexíveis, desacoplados e escaláveis. Isso os torna
mais fáceis de desenvolver e manter. São mais tolerantes a falhas e quando elas ocorrem são tratadas com elegância ao invés de desastre.
Sistemas Reativos são responsivos, dando aos usuários feedbacks mais interativos.
Fonte: http://www.reactivemanifesto.org/pt-BR
![Page 11: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/11.jpg)
Reactive frameworksReactor
ReactiveX
![Page 12: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/12.jpg)
Message-Driven“Reactive Systems rely on asynchronous
message-passing”
![Page 13: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/13.jpg)
Share Mutable State
● with threads:
○ code that is totally non-deterministic;
○ the root of all evil;
● Avoid it at all cost;
● Use immutability;
![Page 14: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/14.jpg)
Never/Avoid Block
● Unless you really have to;
● Blocking kills scalability (+ performance);
● Use non-blocking IO;
● Use lock-free concurrency;
![Page 15: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/15.jpg)
Async● Use asynchronous event/message passing;
● Lower latency (vs sales);
● Better throughput;
● A more loosely coupled architecture, easier
to extend, evolve and maintain.
![Page 16: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/16.jpg)
Some t ls
● Actors
● Agents
● Future/Dataflow
● Reactive Extensions (Rx)
![Page 17: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/17.jpg)
Actors
● Isolated lightweight event-based processes;● Each actor has a mailbox (message queue);● Communicates through asynchronous and
non-blocking message passing;● Location transparent (distributable);● Supervision-based failure management;
![Page 18: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/18.jpg)
Agents
● Reactive memory cells;● Send a update function to the Agent;● Reads are “free”, just dereferences
the Ref;● Composes nicely;
![Page 19: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/19.jpg)
Futures/Dataflow
● Allows you to spawn concurrent computations and work with the not yet computed results;
● Freely sharable;● Allows non-blocking composition;● Build in model for managing failure;
![Page 20: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/20.jpg)
Reactive Extensions (Rx)
● Extend Futures with the concept of a
Stream;
● Composable in a type-safe way;
● Event-based & asynchronous;
● Observable ⇛ Push Collections;
![Page 21: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/21.jpg)
Elastic“Capable of being easily expanded or
upgraded on demand”
![Page 22: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/22.jpg)
● Mobile
● SQL Replication
● NoSQL DB
● Cloud Services
Distributed systems
![Page 23: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/23.jpg)
What is the essence of distributed computing?
![Page 24: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/24.jpg)
What is the essence of distributed computing?
1. Information travels at the speed of light;
2. Independent things fail independently.
![Page 25: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/25.jpg)
Why necessary?
● Scalability;
● Availability;
● The network is unreliable;
● Location Transparency;
![Page 26: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/26.jpg)
“Almost” no limit to scalability.
Shared Nothing
Assynchronous communication
Location Transparency
Loose Coupling
![Page 27: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/27.jpg)
Resilience“The ability of a substance or object to spring back into shape.”
“The capacity to recover quickly from difficulties.”
![Page 28: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/28.jpg)
● Exception in thread;
● Errors do not propagate between threads;
● Error handling tangled with business logic;
Failure recover
![Page 29: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/29.jpg)
Right Way
● Isolate the failure;
● Compartmentalize;
● Manage failure locally;
● Avoid cascading failures;
● Supervision;
![Page 30: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/30.jpg)
Responsive“Quick to respond or react appropriately”
![Page 31: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/31.jpg)
● Latency consistent;
● Use Back Pressure;
● Smart Batching;
● Reative Request
(Async & Non-blocking Request & Response)
Responsive
![Page 33: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/33.jpg)
Dúvidas?
![Page 34: Reactive programming: Brincando com eficiência, composição e assíncronia](https://reader033.vdocuments.net/reader033/viewer/2022042820/55d100f0bb61eb72428b47ad/html5/thumbnails/34.jpg)
THANK YOU!FRIENDS TECHDAY
COMPARTILHAR, APRENDER E CONTRIBUIR!
Felipe Mamud@ftmamud
Raphael Almeida@raphait
We are a reactive family