Simpler Concurrency, Scalability & Fault-tolerance through …assets.en.oreilly.com/1/event/45/Akka_...

Post on 10-Aug-2018

240 views 0 download

Transcript of Simpler Concurrency, Scalability & Fault-tolerance through …assets.en.oreilly.com/1/event/45/Akka_...

Akka:Simpler Concurrency, Scalability &

Fault-tolerance through Actors

Jonas Bonér@jboner

Tuesday, July 20, 2010

•Writing correct concurrent

applications is too hard

•Scaling out applications is

too hard

•Writing highly fault-tolerant

applications is too hard

We believe that...

Tuesday, July 20, 2010

It doesn’t have to

be like this

We need to raise the abstraction level

Tuesday, July 20, 2010

Locks & Threads

are...

Tuesday, July 20, 2010

...sometimes

plain evil

Tuesday, July 20, 2010

...but always the

wrong default

Tuesday, July 20, 2010

“Threads are to Concurrency as Witchcraft is to Physics”

“Hanging by a thread is the punishment for Shared State Concurrency”

- Gilad Bracha

Tuesday, July 20, 2010

Actorsone tool in the toolbox

Tuesday, July 20, 2010

• Implements Message-Passing Concurrency

• Share!NOTHING

• Isolated lightweight processes

•Communicates through messages

•Asynchronous and non-blocking

• Each actor has a mailbox (message queue)

Actor Model of Concurrency

Tuesday, July 20, 2010

Actor Model of Concurrency

• Easier to reason about

• Raised abstraction level

• Easier to avoid

–Race conditions

–Deadlocks

–Starvation

–Live locks

Tuesday, July 20, 2010

Introducing

STM

Persistent

Distributed

RESTful Secure

Agents

Dataflow Open Source

Actors

Tuesday, July 20, 2010

ARCHITECTURE

CORE

SERVICES

Tuesday, July 20, 2010

ARCHITECTURE

ADD-ON

MODULES

Tuesday, July 20, 2010

ARCHITECTURE

ENTERPRISE

MODULES

Tuesday, July 20, 2010

Akka Actors

Tuesday, July 20, 2010

Two different models

• Thread-based

• Event-based

– Very!lightweight (600 bytes per actor)

– Can easily create!millions!on a single workstation (6.5 million on 4 G RAM)

– Does not consume a thread

Tuesday, July 20, 2010

!"#$%&'($!)!"#$%

!*"##!&'()*+,!$+)$,-#!-$*',!.

!!./01")$!1"/!$'()*+,!/!0

!!-$2!,+$+#1+!/!.

!!!!!"#$!"#$%!/2!

!!!!!!$'()*+,!3/!4

!!!!!!5,#)*6)7$'()*+,8

!!9

9

Actors

Tuesday, July 20, 2010

03.&/)!-$*',:;

1"*!$'()*+,!/!<$*',=>?&'()*+,@

Create Actors

$'()*+, is an -$*',A+>

Tuesday, July 20, 2010

1"*!<$*',!/!<$*',=>7,$4!BC-$*',7::88

Create Actors

create actor with constructor arguments

Tuesday, July 20, 2010

1"*!$'()*+,!/!<$*',=>?&'()*+,@

$'()*+,:D*<,*

Start actors

Tuesday, July 20, 2010

1"*!$'()*+,!/!<$*',=>?&'()*+,@:D*<,*

Start actors

Tuesday, July 20, 2010

1"*!$'()*+,!/!<$*',=>?&'()*+,@:D*<,*

$'()*+,:D*'5

Stop actors

Tuesday, July 20, 2010

!*"##%BC-$*',!$+)$,-#!-$*',!.

%%&1$//0-$%-$2!#)#*!/!.

!!!!:::!EE!$<66+F!<>*+,!GD*<,*H!

!!9

!!&1$//0-$%-$2!DI(*F'J)!/!.

!!!!:::!EE!$<66+F!K+>',+!GD*'5H

!!9

9

init & shutdown callbacks

Tuesday, July 20, 2010

!*"##!A+$(,D#1+-$*',!$+)$,-#!-$*',!.

!!./01")$!1"/!$'()*+,!/!0

!!D+6>:#F!/!LD+,1#$+M,+$(,D#1+N

!!-$2!,+$+#1+!/!.

!!!!!"#$!"#$%!/2!

!!!!!!$'()*+,!3/!4

!!!!!!D+6>!O!"#$%

!!9

9

the self reference

Tuesday, July 20, 2010

1"*%J',%+,!/!<$*',!.

!!!"#$!P',%7>)8!/2!>)78

9

Actorsanonymous

Tuesday, July 20, 2010

$'()*+,!O!"#$%!

Send: !

fire-forget

Tuesday, July 20, 2010

1"*!,+D(6*!/!7<$*',!OO!B+DD<Q+8:<D?R*,#)Q@

Send: !!

uses Future under the hood (with time-out)

Tuesday, July 20, 2010

1"*!,+D(6*=5*#')!/!<$*',!OO!B+DD<Q+

1"*!,+D(6*!/!,+D(6*=5*#')

!!!!!!!!!!!!:Q+*=,S6D+7F+><(6*A+D(6*8

1"*!,+D(6*!/!,+D(6*=5*#'):Q+*=,S6D+7

!!!!)5/&4%,$4!ST$+5*#')7L"#U+F!'(*N888

Send: !!

returns an Option[ResultType] directly

Tuesday, July 20, 2010

EE!,+*(,)D!<!>(*(,+

1"*!>(*(,+!/!<$*',!OOO!B+DD<Q+

>(*(,+:<J<#*

1"*!,+D(6*!/!>(*(,+:Q+*

:::

V(*(,+D:<J<#*=)+7W#D*7>(*4X!>(*YX!:::88

V(*(,+D:<J<#*-667W#D*7>(*4X!>(*YX!:::88

Send: !!!

returns the Future directly

Tuesday, July 20, 2010

!*"##!R'U+-$*',!$+)$,-#!-$*',!.

!!-$2!,+$+#1+!/!.

!!!!!"#$!ZD+,7)<U+8!/2!

!!!!!!EE!(D+!,+56C

!!!!!!D+6>:,+56C7L[#!N!3!)<U+8

!!9

9

Reply

Tuesday, July 20, 2010

!*"##!R'U+-$*',!$+)$,-#!-$*',!.

!!-$2!,+$+#1+!/!.

!!!!!"#$!ZD+,7)<U+8!/2!

!!!!!!EE!D*',+!<J<C!*I+!D+)F+,

!!!!!!EE!*'!(D+!6<*+,!',!

!!!!!!EE!D'U+JI+,+!+6D+

!!!!!!:::!/!D+6>:D+)F+,

!!9

9

Reply

Tuesday, July 20, 2010

!*"##!R'U+-$*',!$+)$,-#!-$*',!.

!!-$2!,+$+#1+!/!.

!!!!!"#$!ZD+,7)<U+8!/2!

!!!!!!EE!D*',+!<J<C!*I+!D+)F+,!>(*(,+

!!!!!!EE!*'!,+D'61+!6<*+,!',!

!!!!!!EE!D'U+JI+,+!+6D+

!!!!!!:::!/!D+6>:D+)F+,V(*(,+

!!9

9

Reply

Tuesday, July 20, 2010

EE!F+>#)+!*I+!$<D+!$6<DD

!"#$%!*"##!A+Q#D*+,7(D+,M!ZD+,8

EE!$,+<*+!<)F!D+)F!<!)+J!$<D+!$6<DD!U+DD<Q+

<$*',!O!A+Q#D*+,7(D+,8

EE!*(56+D

<$*',!O!7(D+,)<U+X!5<DDJ',F8

EE!6#D*D

<$*',!O!W#D*7LK#66NX!LK'KNX!L<6#$+N8

Good immutable messages

Tuesday, July 20, 2010

Akka Dispatchers

Tuesday, July 20, 2010

&'($!)!\#D5<*$I+,D!.

!!-$2!)+JST+$(*',]<D+FS1+)*\,#1+)\#D5<*$I+,7)<U+M!R*,#)Q8

!!-$2!)+JST+$(*',]<D+FS1+)*\,#1+)P',%R*+<6#)Q\#D5<*$I+,7)<U+M!R*,#)Q8

!!-$2!)+J"I,+<F]<D+F\#D5<*$I+,7<$*',M!-$*',A+>8

!!

!!-$2!)+JA+<$*',]<D+F"I,+<F^''6S1+)*\,#1+)\#D5<*$I+,7)<U+M!R*,#)Q8

!!-$2!)+JA+<$*',]<D+FR#)Q6+"I,+<FS1+)*\,#1+)\#D5<*$I+,7)<U+M!R*,#)Q8

9

Dispatchers

Tuesday, July 20, 2010

!*"##!BC-$*',!$+)$,-#!-$*',!.

!!D+6>:F#D5<*$I+,!/!\#D5<*$I+,D

!!!!:)+J"I,+<F]<D+F\#D5<*$I+,7D+6>8

!!

!!:::

9

<$*',:F#D5<*$I+,!/!F#D5<*$I+,!EE!K+>',+!D*<,*+F

Set dispatcher

Tuesday, July 20, 2010

1"*!F#D5<*$I+,!/

!!\#D5<*$I+,D:)+JST+$(*',]<D+FS1+)*\,#1+)\#D5<*$I+,

F#D5<*$I+,!!!!

!!!!:J#*I_+J"I,+<F^''6P#*I]'()F+F]6'$%#)Q`(+(+74008

!!!!:D+*&',+^''6R#a+74b8

!!!!:D+*B<T^''6R#a+74Yc8

!!!!:D+*d++5-6#1+"#U+e)B#66#D7b00008

!!!!:D+*A+f+$*#')^'6#$C7,$4!&<66+,A()D^'6#$C8

!!!!:K(#6F"I,+<F^''6

EventBasedDispatcherFluent DSL

Tuesday, July 20, 2010

MessageQueues

• Unbounded LinkedBlockingQueue• Bounded LinkedBlockingQueue• Bounded ArrayBlockingQueue

Bounded SynchronousQueue

Plus different options per queue

Tuesday, July 20, 2010

1"*!<$*',D!/!-$*',A+Q#D*,C:<$*',D

1"*!<$*',D!/!-$*',A+Q#D*,C:<$*',DV',?"g^S@

1"*!<$*',D!/!-$*',A+Q#D*,C:<$*',DV',7#F8

1"*!<$*',!/!-$*',A+Q#D*,C:<$*',V',7((#F8

-$*',A+Q#D*,C:>',+<$I7>)8

-$*',A+Q#D*,C:DI(*F'J)-66

ActorRegistry

Tuesday, July 20, 2010

Let it crash fault-tolerance

Tuesday, July 20, 2010

Stolen from

Erlang

Tuesday, July 20, 2010

9 nines

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

OneForOne fault handling strategy

Tuesday, July 20, 2010

AllForOnefault handling strategy

Tuesday, July 20, 2010

AllForOnefault handling strategy

Tuesday, July 20, 2010

AllForOnefault handling strategy

Tuesday, July 20, 2010

AllForOnefault handling strategy

Tuesday, July 20, 2010

Supervisor hierarchies

Tuesday, July 20, 2010

Supervisor hierarchies

Tuesday, July 20, 2010

Supervisor hierarchies

Tuesday, July 20, 2010

Supervisor hierarchies

Tuesday, July 20, 2010

-66V',=)+R*,<*+QC7

!!U<T_,=>A+*,#+DX!

!!J#*I#)"#U+A<)Q+8

=)+V',=)+R*,<*+QC7

!!U<T_,=>A+*,#+DX!

!!J#*I#)"#U+A<)Q+8

Fault handlers

Tuesday, July 20, 2010

6#)%7<$*',8!

()6#)%7<$*',8!

D*<,*W#)%7<$*',8

D5<J)W#)%?BC-$*',@

Linking

Tuesday, July 20, 2010

*,<5ST#*!/!W#D*7

!$6<DD=>?R+,1#$+ST$+5*#')@X!

!$6<DD=>?^+,D#D*+)$+ST$+5*#')@8

trapExit

Tuesday, July 20, 2010

!*"##!R(5+,1#D',!$+)$,-#!-$*',!.

!!03.&/)!D+6>:;

!!*,<5ST#*!/!W#D*7$6<DD=>?"I,'J<K6+@8

!!><(6*[<)F6+,!/!

!!!!R'U+7=)+V',=)+R*,<*+QC7hX!h00088

!!-$2!,+$+#1+!/!.

!!!!!"#$!A+Q#D*+,7<$*',8!/2!

!!!!!!6#)%7<$*',8

!!9

9

Supervision

Tuesday, July 20, 2010

!*"##!V<(6*"'6+,<)*R+,1#$+!$+)$,-#!-$*',!.

!!:::

!!&1$//0-$%-$2!5,+A+D*<,*7,+<D')M!"I,'J<K6+8!/!.

!!!!:::!EE!$6+<)!(5!'$2&/$!,+D*<,*

!!9

!!&1$//0-$%-$2!5'D*A+D*<,*7,+<D')M!"I,'J<K6+8!/!.

!!!!:::!EE!#)#*!"2)$/!,+D*<,*

!!9

9

Manage failure

Tuesday, July 20, 2010

Remote Actors

Tuesday, July 20, 2010

EE!(D+!I'D*!i!5',*!#)!$')>#Q

A+U'*+_'F+:D*<,*

A+U'*+_'F+:D*<,*7j6'$<6I'D*jX!kkkk8

Remote Server

Scalable implementation based on NIO (Netty) & Protobuf

Tuesday, July 20, 2010

•Client-initated and managed

•Server-initiated and managed

Two types of

remote actors

Tuesday, July 20, 2010

EE!U+*I'FD!#)!-$*',!$6<DD

D5<J)A+U'*+?BC-$*',@7I'D*X!5',*8!

D5<J)W#)%A+U'*+?BC-$*',@7I'D*X!5',*8

D*<,*W#)%A+U'*+7<$*',X!I'D*X!5',*8

Client-managedsupervision works across nodes

Tuesday, July 20, 2010

1"*!<$*',^,'TC!/!D5<J)W#)%A+U'*+?BC-$*',@7

!!LF<,%D*<,NX!

!!kkkk8

<$*',^,'TC!O!U+DD<Q+

Client-managedmoves actor to server

client manages through proxy

Tuesday, July 20, 2010

A+U'*+_'F+:,+Q#D*+,7

!!LD+,1#$+M#FNX!<$*',=>?BCR+,1#$+@8

Server-managedregister and manage actor on server

client gets “dumb” proxy handle

server part

Tuesday, July 20, 2010

1"*!I<)F6+!/!A+U'*+&6#+)*:<$*',V',7

!!LD+,1#$+M#FNX!

!!LF<,%D*<,NX!

!!kkkk8

I<)F6+!O!U+DD<Q+

Server-managed

client part

Tuesday, July 20, 2010

&6(D*+,:,+6<CB+DD<Q+7

!!$6<DD=>?"C5+=>-$*',@X!U+DD<Q+8

2&/%7+)F5'#)*!lm!&6(D*+,8!

!!D5<J)A+U'*+?"C5+=>-$*',@7!!

!!!!!!!!!!!!!!+)F5'#)*:I'D*X!

!!!!!!!!!!!!!!+)F5'#)*:5',*8

Cluster Membership

Tuesday, July 20, 2010

STManother tool in the toolbox

Tuesday, July 20, 2010

60

What is STM?

Tuesday, July 20, 2010

STM: overview• See the memory (heap and stack) as a transactional dataset

• Similar to a database

• begin

• commit

• abort/rollback

• Transactions are retried automatically upon collision

• Rolls back the memory on abort

Tuesday, July 20, 2010

• Separates Identity from Value

- Values are immutable

- Identity (Ref) holds Values

•Change is a function

•Compare-and-swap (CAS)

•Abstraction of time

•Must be used within a transaction

Managed References

Tuesday, July 20, 2010

1"*!,+>!/!A+>7B<5?R*,#)QX!ZD+,@788

1"*!(D+,D!/!,+>:Q+*

1"*!)+JZD+,D!/!(D+,D!3!7LK#66N!m2!ZD+,7LK#66N88

,+>:DJ<57)+JZD+,D8

Managed References

Tuesday, July 20, 2010

1"*!(D+,D!/!",<)D<$*#')<6B<5?R*,#)QX!ZD+,@78

1"*!(D+,D!/!",<)D<$*#')<6n+$*',?ZD+,@78

Transactionaldatastructures

Tuesday, July 20, 2010

03.&/)!",<)D<$*#'):W'$<6:;

<*'U#$!.

!!:::

!!<*'U#$!.!EE!)+D*+F!*,<)D<$*#')D!$'U5'D+

!!!!:::!EE!F'!D'U+*I#)Q!J#*I#)!<!*,<)D<$*#')

!!9

9

STM: API

Tuesday, July 20, 2010

Actors + STM = Transactors

Tuesday, July 20, 2010

!*"##!ZD+,A+Q#D*,C!$+)$,-#!",<)D<$*',!.

!!

!!./01")$%1"*!D*',<Q+!/!

!!!!",<)D<$*#')<6B<5?R*,#)QX!ZD+,@78

!!-$2!,+$+#1+!/!.

!!!!!"#$!_+JZD+,7(D+,8!/2

!!!!!!D*',<Q+!3!7(D+,:)<U+!m2!(D+,8

!!!!:::!

!!9

9

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

TransactorsStart transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Transaction fails

Tuesday, July 20, 2010

TransactorsStart transaction

Send message

Update statewithin transaction

Transaction fails

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

Transactors

Tuesday, July 20, 2010

TransactorsTransactionautomatically

retried

Tuesday, July 20, 2010

Agentsyet another tool in the toolbox

Tuesday, July 20, 2010

1"*!<Q+)*!/!-Q+)*7h8

EE!D+)F!>()$*#')!<DC)$I,')'(D6C

<Q+)*!D+)F!7;!3!48!

1"*!,+D(6*!/!<Q+)*78!EE!F+,+>

:::!EE!(D+!,+D(6*

<Q+)*:$6'D+

Agents

Cooperates with STMTuesday, July 20, 2010

(some of the) Modules

Tuesday, July 20, 2010

Akka Spring

Tuesday, July 20, 2010

lK+<)D2

!!l<%%<M<$*#1+m'Kf+$*!#F/jUC-$*#1+=Kf+$*j!

!!!!!!!!!!!!!!!!!!!!!!*<,Q+*/j$'U:K#a:BC^=o=j!

!!!!!!!!!!!!!!!!!!!!!!*,<)D<$*#')<6/j*,(+j!

!!!!!!!!!!!!!!!!!!!!!!*#U+'(*/j4000j!E2

!!:::

lEK+<)D2

Spring integration

Tuesday, July 20, 2010

6<%%<MD(5+,1#D#')!#F7jUCmD(5+,1#D',j8

!!6<%%<M,+D*<,*9D*,<*+QC!><#6'1+,7j-66V',=)+j!

!!!!!!!!!!!!!!!!!!!!!!!!!,+*,#+D7jpj!

!!!!!!!!!!!!!!!!!!!!!!!!!*#U+,<)Q+7j4000j8

!!!!6<%%<M*,<59+T#*D8

! !!6<%%<M*,<59+T#*8f<1<:#':e=ST$+5*#')6;<%%<M*,<59+T#*8

!!!!6;<%%<M*,<59+T#*D8

!!6;<%%<M,+D*<,*9D*,<*+QC8

!!6<%%<M<$*#1+9'Kf+$*D8

!!!!6<%%<M<$*#1+9'Kf+$*!*<,Q+*7j$'U:K#a:BC^=o=j!

!!!!!!!!!!!!!!!!!!!!!!!!6#>+$C$6+7j5+,U<)+)*j!

!!!!!!!!!!!!!!!!!!!!!!!!*#U+'(*7j4000j8

!!!!!!6<%%<M,+D*<,*9$<66K<$%D!5,+7j5,+A+D*<,*j!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!5'D*7j5'D*A+D*<,*j;8

!!!!6;<%%<M<$*#1+9'Kf+$*8

!!6;<%%<M<$*#1+9'Kf+$*D8

6;<%%<MD(5+,1#D#')8

Spring integration

Tuesday, July 20, 2010

Akka Camel

Tuesday, July 20, 2010

!*"##!BC&')D(U+,!$+)$,-#!-$*',!40)5!&')D(U+,!.

!!-$2!+)F5'#)*Z,#!/!j>#6+MF<*<E#)5(*j

!

!!-$2!,+$+#1+!/!.

!!!!!"#$!UDQM!B+DD<Q+!/2!

!!!!!!6'Q:#)>'7j,+$+#1+F!qDj!>',U<*

!!!!!!UDQ:K'FC-D7$6<DD=>?R*,#)Q@88

!!9

9

Camel: consumer

Tuesday, July 20, 2010

!*"##!BC&')D(U+,!$+)$,-#!-$*',!40)5!&')D(U+,!.

!!-$2!+)F5'#)*Z,#!/!

!!!!jf+**CMI**5MEE0:0:0:0MccrrE$<U+6E*+D*j

!

!!-$2!,+$+#1+!/!.

!!!!!"#$!UDQM!B+DD<Q+!/2!

!!!!!!,+56C7j[+66'!qDj!>',U<*!

!!!!!!!!!!!!UDQ:K'FC-D7$6<DD=>?R*,#)Q@88

!!9

9

Camel: consumer

Tuesday, July 20, 2010

!*"##!&'U+*^,'F($+,!

!!$+)$,-#!-$*',!40)5!^,'F($+,!.

!!

!!-$2!+)F5'#)*Z,#!/!

!!!!j$'U+*FMEE6'$<6I'D*Mc444E*+D*j

9

Camel: producer

Tuesday, July 20, 2010

1"*!5,'F($+,!/!<$*',=>?&'U+*^,'F($+,@:D*<,*

1"*!*#U+!/!j&(,,+)*!*#U+M!j!3!,$4!\<*+

5,'F($+,!O!*#U+

Camel: producer

Tuesday, July 20, 2010

Akka Persistence

Tuesday, July 20, 2010

Akka Persistence API

EE!*,<)D<$*#')<6!&<DD<)F,<mK<$%+F!B<5!

1"*!U<5!/!&<DD<)F,<R*',<Q+:)+JB<5

EE!*,<)D<$*#')<6!A+F#DmK<$%+F!n+$*',!

1"*!1+$*',!/!A+F#DR*',<Q+:)+Jn+$*',

EE!*,<)D<$*#')<6!B')Q'mK<$%+F!A+>

1"*!,+>!/!B')Q'R*',<Q+:)+JA+>

Turns the STM into ACID

Tuesday, July 20, 2010

Get data by id

EE!*,<)D<$*#')<6!&<DD<)F,<mK<$%+F!B<5!

1"*!U<5!/!&<DD<)F,<R*',<Q+:Q+*B<57((#F8

EE!*,<)D<$*#')<6!A+F#DmK<$%+F!n+$*',!

1"*!1+$*',!/!A+F#DR*',<Q+:Q+*n+$*',7((#F8

EE!*,<)D<$*#')<6!B')Q'mK<$%+F!A+>

1"*!,+>!/!B')Q'R*',<Q+:Q+*A+>7((#F8

Tuesday, July 20, 2010

For Redis only (so far)

1"*!s(+(+M!^+,D#D*+)*`(+(+?S6+U+)*"C5+@!/!!!

!!A+F#DR*',<Q+:)+J`(+(+

1"*!D+*M%^+,D#D*+)*R',*+FR+*?S6+U+)*"C5+@!/

!!A+F#DR*',<Q+:)+JR',*+FR+*

Tuesday, July 20, 2010

Akka Deployment

Tuesday, July 20, 2010

Deploy as dependency JAR in WEB-INF/lib etc.

Run as microkernel

Soon OSGi-enabled, then drop in any OSGi container (Spring DM server, Karaf etc.)

Deployment

Tuesday, July 20, 2010

REST

Comet

Security

...and much more

Web

GuiceJTA

AMQP

Tuesday, July 20, 2010

Learn morehttp://akkasource.org

Tuesday, July 20, 2010

EOFTuesday, July 20, 2010

?Tuesday, July 20, 2010