Simpler Concurrency, Scalability & Fault-tolerance through …assets.en.oreilly.com/1/event/45/Akka_...
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