34
Reactive Programming: Brincando com eficiência, composição e assincronia. Felipe Mamud @ftmamud Raphael Almeida @raphait HPC

Reactive programming: Brincando com eficiência, composição e assíncronia

Embed Size (px)

Citation preview

Page 1: Reactive programming: Brincando com eficiência, composição e assíncronia

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

Agradecimentos

HPC

Page 3: Reactive programming: Brincando com eficiência, composição e assíncronia

Será que nossos sistemas já estão no limite?

Page 4: Reactive programming: Brincando com eficiência, composição e assíncronia
Page 5: Reactive programming: Brincando com eficiência, composição e assíncronia

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

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

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

Reactive Programming“Readily responsive to a stimulus”

Page 9: Reactive programming: Brincando com eficiência, composição e assíncronia

Reactive Manifesto

Page 10: Reactive programming: Brincando com eficiência, composição e assíncronia

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

Reactive frameworksReactor

ReactiveX

Page 12: Reactive programming: Brincando com eficiência, composição e assíncronia

Message-Driven“Reactive Systems rely on asynchronous

message-passing”

Page 13: Reactive programming: Brincando com eficiência, composição e assíncronia

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

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

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

Some t ls

● Actors

● Agents

● Future/Dataflow

● Reactive Extensions (Rx)

Page 17: Reactive programming: Brincando com eficiência, composição e assíncronia

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

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

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

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

Elastic“Capable of being easily expanded or

upgraded on demand”

Page 22: Reactive programming: Brincando com eficiência, composição e assíncronia

● Mobile

● SQL Replication

● NoSQL DB

● Cloud Services

Distributed systems

Page 23: Reactive programming: Brincando com eficiência, composição e assíncronia

What is the essence of distributed computing?

Page 24: Reactive programming: Brincando com eficiência, composição e assíncronia

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

Why necessary?

● Scalability;

● Availability;

● The network is unreliable;

● Location Transparency;

Page 26: Reactive programming: Brincando com eficiência, composição e assíncronia

“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

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

● 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

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

Responsive“Quick to respond or react appropriately”

Page 31: Reactive programming: Brincando com eficiência, composição e assíncronia

● 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

Dúvidas?

Page 34: Reactive programming: Brincando com eficiência, composição e assíncronia

THANK YOU!FRIENDS TECHDAY

COMPARTILHAR, APRENDER E CONTRIBUIR!

Felipe Mamud@ftmamud

Raphael Almeida@raphait

We are a reactive family