Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distribuídos para a JVM

dcsobral 1,743 views 51 slides Nov 30, 2011
Slide 1
Slide 1 of 51
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51

About This Presentation

Apresentação sobre programação de sistemas concorrentes usando Akka, em Java e Scala, apresentada na QConSP 2011.

Ementa:


Conheça Akka, uma plataforma para o JVM para desenvolvimento de sistemas concorrentes e/ou distribuídos através do paradigma de Atores.

Descreveremos o paradigma de at...


Slide Content

Uma plataforma para o desenvolvimento de sistemas concorrentes e distribuídos para a JVM

Akka Uma plataforma para o desenvolvimento de sistemas concorrentes e distribuídos para a JVM Daniel Capó Sobral Consultor pela Tecnisys Programador e Sysadmin Ex-committer FreeBSD Aficionado por Scala

Akka Uma plataforma para o desenvolvimento de sistemas concorrentes e distribuídos para a JVM Conheça Akka , uma plataforma para o JVM para desenvolvimento de sistemas concorrentes e/ou distribuídos através do paradigma de Atores . Descreveremos o paradigma de atores, suas vantagens e desvantagens, e mostraremos exemplos da API em Java e em Scala, com execução local e distribuída, memória transacional e tolerância a falhas.

Conteúdo

O que é Akka ?

Uma cadeia de montanhas?

Uma cadeia de montanhas? “ Akka ” é uma cadeia de montanhas na Suécia

Um componente do Typesafe Stack ?

Um componente do Typesafe Stack ? A Typesafe foi fundada em 2011 pelos criadores da linguagem de programação Scala e do middleware Akka . O Typesafe Stack contém Scala, Akka e ferramentas de desenvolvimento, tudo open source . A Typesafe Subscription provê suporte comercial.

Uma solução de:

Uma solução de:

Uma solução de:

Uma solução de:

Concorrência

Atores

Objetos vs Atores

Objetos vs Atores

Objetos vs Atores

Objetos vs Atores

Objetos vs Atores

Objetos vs Atores

Fatos sobre Atores

Definindo um Ator - Java public class SampleUntypedActor extends UntypedActor { public void onReceive (Object message) throws Exception { if ( message instanceof String ) EventHandler.info( this , String.format ( "Received String message: %s" , message )); else throw new IllegalArgumentException ( "Unknown message: " + message); } }

Criando um Ator - Java import static akka.actor.Actors .*; ActorRef myActor = actorOf ( SampleUntypedActor.class ); myActor.start (); // Construtor com parâmetros ActorRef actor = actorOf ( new UntypedActorFactory () { public UntypedActor create () { return new MyUntypedActor ( " service:name " , 5 ); } }).start();

ActorRef vs Actor

Ciclo de Vida

Enviando uma mensagem

Futuros interface Future<T> { void await (); boolean isCompleted (); boolean isExpired (); long timeoutInNanos (); Option <T> result (); Option < Throwable > exception (); Future<T> onComplete (Procedure<Future<T>> procedure); }

Usando Futuros - Java Future future = actorRef.sendRequestReplyFuture ( " Hello " , getContext (), 1000 ); future.await (); if ( future.isCompleted ()) { Option resultOption = future.result (); if ( resultOption.isDefined ()) { Object result = resultOption.get (); ... } ... // whatever }

Respondendo ao Remetente - Java public void onReceive (Object message) throws Exception { if ( message instanceof String ) { String msg = ( String ) message ; if ( msg.equals ( "Hello" ) && getContext (). getSenderFuture (). isDefined ()) { // Reply to original sender of message using the channel getContext ().channel(). sendOneWay ( msg + " from " + getContext (). getUuid ()); } } }

Respondendo Mensagem - Java public void onReceive (Object message) throws Exception { if ( message instanceof String ) { String msg = ( String ) message ; if ( msg.equals ( " Hello " )) { if ( getContext (). replySafe ( msg + " from " + getContext (). getUuid ())) ... // success else ... // handle failure } } }

Parando um Ator - Java actor.stop ();

Akka em Scala

Akka em Scala

Typed Actors

Agentes

Agentes - Scala

STM

STM - Java final Ref<Integer> ref = new Ref<Integer>( ); public int counter () { return new Atomic < Integer >() { public Integer atomically () { int inc = ref.get () + 1 ; ref.set ( inc ); return inc ; } }.execute(); }

Dataflow

Dataflow - Scala

Escalabilidade

Atores Remotos - Java // server code class HelloWorldActor extends UntypedActor { public void onReceive ( Object msg ) { getContext (). replySafe ( msg + " World" ); } } remote ().start( " localhost " , 9999). register ( " hello-service " , actorOf ( HelloWorldActor.class )); // client code ActorRef actor = remote (). actorFor ( " hello-service " , " localhost " , 9999); Object res = actor.sendRequestReply ( " Hello " );

Atores Remotos

Tolerância à Falhas

Tolerância à Falhas

Só isso?

Só isso?

Só isso? Crédito: Palestra Above the Clouds : Introducing Akka Jonas Bonér

Mais informações...

Contato