SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Akka$Concurrency$Works
by#Duncan#K.#DeVore,
Viridity'Energy,'Inc.
InfoQ.com: News & Community Site
• 750,000 unique visitors/month
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• News 15-20 / week
• Articles 3-4 / week
• Presentations (videos) 12-15 / week
• Interviews 2-3 / week
• Books 1 / month
Watch the video with slide
synchronization on InfoQ.com!
http://www.infoq.com/presentations
/akka-concurrency-jvm
Presented at QCon New York
www.qconnewyork.com
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
About&Viridity:&Energy&So2ware&Company
• Industrials,-data-centers,-universi1es,-etc.
• Help-customers-manage
• Renewables-&-storage
• Controllable-load
• Forecas1ng
• Energy-assets
About&Viridity:&VPower&So1ware&Pla4orm
• Suite'of'applica.ons
• Distributed'&'cloud'based
• Micro'service'architecture
• Reac.ve'philosophy
• Event<driven,'responsive,'resilient,'scalable
• Transform'energy'profiles'into'financial'returns
About&Me:&VP,&So.ware&Engineering
• 25$years
• Enterprise$applica1ons
• Distributed$compu1ng
• Reac1ve$applica1ons
• Open$source$<$Akka$Persistence$Mongo
• Scala,$Akka,$Tes1ng,$Agile
• Book:$Manning,$Building$Reac1ve$Applica1ons
Outline
• How%many%with%concurrency%experience?
• How%many%with%Scala/Akka%experience?
• Concurrency
• Java
• Reac=ve
• Scala
• Akka
Concurrency:*Defini.on
In#computer#science,#concurrency#is#a#property#of#systems#in#which#
several#computa6ons#are#execu6ng#simultaneously,#and#poten6ally#
interac6ng#with#each#other.
—"Google
Concurrency:*The*Early*Days
• Computers+ran+one+program+at+a+/me
• From+start+to+end
• Had+access+to+all+of+the+machines+resources
• Sequen/al+compu/ng+model
• This+was+very+inefficient+and+expensive
Concurrency:*The*Process
• More&than&one&program&could&run&at&once&(not&concurrently)
• Isolated&independent&execu9on&of&programs
• OS&would&allocate&resources&(memory,&file&handles,&etc.)
• Communica9on&(sockets,&shared&memory,&semaphores,&etc.)
• Process&schedulers
• Mul9Dtasking,&9me&sharing
Concurrency:*The*Thread
• Mul%ple(program(control(flow
• Coexist(within(the(same(process
• Path(to(hardware(parallelism
• Simultaneous(scheduling
• Run(on(mul%ple(CPU's
• Non?sequen%al(compu%ng(model
• Awesome,(mul%ple(things(at(once!
• But(there(are(challenges...
Concurrency:*Not*Easy!
• Non%determinism
• Shared0Mutable0State
• Amdahl's0Law
• Exponen<al0growth0of0problem
Concurrency:*Non,Determinism
Although(threads(seem(to(be(a(small(step(from(sequen4al(
computa4on,(in(fact,(they(represent(a(huge%step.(They(discard(the(
most(essen4al(and(appealing(proper4es(of(sequen4al(computa4on:(
understandability,(predictability,(and(determinism.(Threads,(as(a(
model(of(computa4on,(are(wildly(non=determinis4c,(and(the(job(of(
the(programmer(becomes(one(of(pruning(that(nondeterminism.
—"The"Problem"with"Threads,"Edward"A."Lee,"Berkeley"2006
Concurrency:*Non,
Determinism
• What&is&going&on?
• Try&using&a&debugger
• Ok,&I'll&use&a&print&statement
• Ok,&I'll&use&logging
Imagine(a(man(walking(down(a(path(in(a(
forest(and,(every(7me(he(steps(further,(he(
must(pick(which(fork(in(the(road(he(wishes(
to(take.
—"Wikipedia
Concurrency:*Shared*State
Impera've)programming,)the)most)popular)form)of)structured)
programming,)is)centered)around)the)no'on)of)sequen&al)
execu&on)and)mutable)state.
• Derived(from(the(Von(Neuman(architecture
• Works(great(in(a(sequen9al(single(threaded(environment
• Not(fun(in(a(mul9;threaded(environment
• Not(fun(trying(to(parallelize
• Locking,(blocking,(call;back(hell
Concurrency:*Amdahl's*
Law
The$speedup$of$a$program$using$mul2ple$
processors$in$parallel$compu2ng$is$limited'
by'the'sequen/al$frac2on$of$the$program.$
For$example,$if$95%$of$the$program$can$be$
parallelized,$the$theore2cal$maximum$
speedup$using$parallel$compu2ng$would$
be$20×$as$shown$in$the$diagram,$no$
maBer$how$many$processors$are$used.
—"Wikipedia
Concurrency:*Exponen.al*Growth
• The%days%of%increasing%clock%speed%are%over
• Faster%switches%will%not%help
• Mul:;core%systems%are%common%place
• Four%or%more%cores%are%now%common
• 10%or%more%cores%are%coming%soon!
• Performance%is%based%on%concurrency%and%mul:ple%cores
Concurrency:*Exponen.al*Growth
• Programmers*must*embrace*concurrent*programming
• Local*=*mul56core,*mul56core*=*distributed
• Distributed*systems*are*the*future
• Resilience*(not*just*fault*tolerance)
• Scaling*for*load*(both*in*and*out)
• Responsiveness*(users*don't*care)
Concurrency:*Defini.on*
(Real*One)
Madness,(mayhem,(heisenbug,(bohrbug,(
mandelbug(and(general(all(around(pain(an(
suffering.
—"me
Concurrency:*Solu-ons?
• Solu&ons)Exist
• Some)Hard
• Some)not)so)Hard
• Java
• Scala
• Akka
Java
• Impera(ve*Style
• Shared*State*(the*elephant*in*the*room)
• Atomic*Variables
• Locking
• Executors*&*Thread*Pools
• ExecutorService*&*Futures
Java:%Impera+ve%Style
Characteristic | How its Handled
------------------ | --------------------------------------------
Focus | How to perform tasks and track state changes
State Changes | Important
Order of Execution | Important
Flow Control | Loops, conditionals and methods
Manipulation Units | Instances of structures or classes
Java:%Impera+ve%Style
The$be&er$argument$for$func1onal$programming$is$that,$in$modern$
applica1ons$involving$highly$concurrent$compu1ng$on$mul1core$
machines,$state%is%the%problem.$All$impera1ve$languages,$including$
object=oriented$languages,$involve$mul1ple$threads$changing$the$
shared$state$of$objects.$This$is$where$deadlocks,$stack$traces,$and$
low=level$processor$cache$misses$all$take$place.$If%there%is%no%state,%
there%is%no%problem.
—"JavaWorld,"2012
Java:%Shared%State
If#mul'ple#threads#access#the#same#mutable#state#variable#without#
appropriate#synchroniza'on,#your%program%is%broken.#There#are#
three#ways#to#fix#it:
*#Don't%share#the#state#variable#across#threads;
*#Make#the#state#variable#immutable;#or
*#Use#synchroniza'on#when#accessing#state
—"Java"Concurrency"In"Prac0ce
Java:%Atomic%Variables
• Implement)low)level)machine)instruc4ons
• Atomic)and)non7blocking
• Scalable)&)performant
• compare7and7swap)opera4on)(CAS)
• AtomicInteger,)AtomicLong,)AtomicBoolean,)etc.
Java:%Atomic%Variables
• Limited(number(of(atomic(variables
• Shared(state(is(o6en(represented(by(a(complex(composi:ons
• O6en(compound(ac:ons(are(required(for(state(muta:on
• Will(not(work(for(compound(ac:ons
To#preserve#state#consistency,#update#related#state#variables#in#a#
single'atomic'opera/on.
—"Java"Concurrency"In"Prac0ce
Java:%Locking
• Built'in'locking'mechanism'for'enforcing'atomicity
• Locks'automa6cally'acquired'by'execu6ng'thread'upon'entry
• Locks'automa6cally'released'upon'exit
• Reentrant'='per=thread'rather'than'per=invoca6on'basis
• synchronized,'Lock,'ReadWriteLock,'Condition
Java:%Locking
• Deadlocks
• Livelocks
• Lock.starva1on
• Race.condi1ons
The$more$complex$the$shared'state$composi/on$and$the$more$
compound'ac/ons$required$to$mutate$that$state,$the$more$likely$a$
concurrency$bug.
Java:%Locking
• Requires)great)vigilence!
• Must)be)used)anywhere)threads)cross)paths
• Must)reason)about)mutable)state
• Must)reason)about)compound)ac;ons
• Must)reason)about)deadlocks,)livelocks,)race)condi;ons,)etc.
• Act)as)mutexes)(mutual)exclusion)locks))C)they)block)C)Yuck!
Java:%Executors
• Simple(interface(for(execu2on(of(logical(units(of(work((tasks)
• Single(method(execute,(replacement(for(thread(crea2on
• execute(is(based(on(the(executor(implementa/on
• Some(create(a(new(thread(and(launch(immediately
• Others(may(use(an(exis2ng(worker(thread(to(run(r
• Others(place(r(in(a(queue(and(wait(for(a(worker(thread(to(
become(available
Java:%Thread%Pools
• Most&executor&implementa2ons&use&thread&pools
• They&consist&of&worker&threads
• They&minimize&overhead&due&to&thread&crea2on
• Fixed&thread&pools
• Cached&thread&pools
Java:%ExecutorService
• An$extension$of$Executor$that$provides$termina3on$and$a$
Future$for$tracking$asynchronous$progress
• Can$be$shutdown$and$will$reject$new$tasks
• Has$submit$method$that$extends$Executor.execute$that$
returns$a$Future
• The$Future$can$be$used$to$cancel$execu3on$or$wait$for$
comple3on
Java:%Futures
• Represents)the)result)of)an)asynchronous)computa3on
• cancel)method)for)stopping)execu3on
• get)methods)for)wai3ng)and)returning)the)result
• Methods)to)determine)if)comple3on)was)normal)or)cancelled
• Cannot)be)cancelled)a<er)comple3on
• get)methods)are)blocking
Reac%ve
Merriam'Webster,defines,reac1ve,as,“readily)responsive)to)a)
s0mulus”,,i.e.,its,components,are,“ac0ve”,and,always,ready,to,
receive,events.,This,defini1on,captures,the,essence,of,reac1ve,
applica1ons,,focusing,on,systems,that:,react&to&events,,react&to&
load,,react&to&failure,,react&to&users
—)Reac0ve)Manifesto
Reac%ve
How$Does$this$Relate$to$Concurrency?
Why$do$We$Build$Concurrent$Applica4ons?
Performance*&*Scalability!!
Reac%ve
Techniques*to*Achieve*Performance*&*Scalability
• Asynchronous
• Non,blocking
• Message5Passing
• Share5Nothing
Reac%ve:(Asynchronous
• Use%async%message/event%passing
• Think%workflow,%how%events%flow
• This%will%give%you
• A%more%loosely%coupled%system
• Easier%to%reason%about%and%evolve
• Lower%latency
• Higher%throughput
Reac%ve:(Non,Blocking
• ...unless(you(have(absolutely*no(other(
choice
• Blocking(kills(scalability
• Use(non7blocking(I/O
• Use(concurrency(paradigms(that(are(
lock*free
Reac%ve:(Message(Passing
• The%asynchronous%passing%of%events
• Concurrent%apps%equal%mul89core%without%changes
• Naturally%asynchronous%and%non9blocking
• Increase%in%paralleliza8on%opportuni8es
• Tend%to%rely%on%push%rather%than%pull%or%poll
Reac%ve:(Share(Nothing
A"share"nothing"architecture"(SN)"is"a"distributed"compu7ng"
architecture"in"which"each"node"is"independent"and"self*sufficient,"
and"there"is"no"single/point"of"conten7on"across"the"system."More"
specifically,"none"of"the"nodes"share"memory"or"disk"storage.
—"Wikipedia
This%means%no#shared#mutable#state.
Reac%ve:(Share(Nothing
What%Happens?
class SharedMutableState(stuff: Any)
class NonDeterministic(sms: SharedMutableState)
class MultiThreadedEnvironment {
def whatHappens(sms: SharedMtableState): NonDeterministic = new NonDeterministic(sms)
}
In#a#concurrent#environment,#let#alone#a#distributed#system,#
mutable(state#is#the#essence#of#BAD(MOJO.
Reac%ve:(Share(
Nothing
Reac%ve:(Share(Nothing
Instead(Use(Immutable(State!
case class ImmutableState(stuff: Any)
case class Deterministic(is: ImmutableState)
class ImmutableStateActor extends Actor {
def receive = { # <=== workflow allows us to reason deterministically
case msg: ImmutableState => Deterministic(msg)
}
}
Reac%ve:(Share(Nothing
If#mul'ple#threads#access#the#same#mutable#state#variable#without#
appropriate#synchroniza'on,#your%program%is%broken.#There#are#
three#ways#to#fix#it:
*#Don't%share#the#state#variable#across#threads;
*#Make#the#state#variable#immutable;#or
*#Use#synchroniza'on#whenever#accessing#the#state#variable.
—"Java"Concurrency"In"Prac0ce
Scala
• What&is&Scala?
• Func0onal&style
• Future
• Promise
Scala:&What&is&Scala?
Have%the%best%of%both%worlds.%Construct%
elegant%class%hierarchies%for%maximum%
code%reuse%and%extensibility,%implement%
their%behavior%using%higher<order%
func=ons.%Or%anything%in<between.
—"Typesafe
• Acronym)for)“Scalable)Language”.
• Object9Oriented
• Func=onal,)Func=ons)are)objects
• Seamless)Java)interop
Scala:&Func*onal&Style
Characteristic | How its Handled
------------------ | -------------------------------------------------------
Focus | What information is desired, what transform is required
State Changes | Non-existent
Order of Execution | Low importance
Flow Control | Function calls, recursion
Manipulation Units | Functions are first class objects
Scala:&Future
• A#way#to#reason#about#many#concurrent#
opera2ons
• A#placeholder#for#a#result#that#is#yet#to#
occur
• Can#be#composed#for#sequen2al#
reasoning
• Combinators#and#callbacks#for#non<
blocking
• May#only#be#assigned#once,#effec2vely#
immutable
Scala:&Future
Example(with(Callback
import scala.util.{ Success, Failure }
val greeting: Future[String] = future {
session.getLastGreeting
}
...
Scala:&Future
Example(with(Callback
import scala.util.{ Success, Failure }
val greeting: Future[String] = future {
session.getLastGreeting
}
greeting onComplete { # <==== callback when future completes
case Success(greet) => println("Last greeting was " + greet)
case Failure(e) => println("Error: " + e.getMessage)
}
Scala:&Future
Composi'on)with)Combinators
val pizzaStore: Future[PizzaStore] = future {
pizzaService.getClosestStore(zipCode)
}
...
Scala:&Future
Composi'on)with)Combinators
val pizzaStore: Future[PizzaStore] = future {
pizzaService.getClosestStore(zipCode)
}
val pizza: Future[Option[Pizza]] = pizzaStore map { # <==== produces a new future
store => Some(pizzaService.buy(store, "pepporoni"))
} recover {
case NonFatal(e) => None
}
Scala:&Future
Composi'on)with)Combinators
val pizzaStore: Future[PizzaStore] = future {
pizzaService.getClosestStore(zipCode)
}
val pizza: Future[Option[Pizza]] = pizzaStore map { # <==== produces a new future
store => Some(pizzaService.buy(store, "pepporoni"))
} recover { # <==== produces a new future, if error, applies partial function
case NonFatal(e) => None
}
Scala:&Promise
• Promises)can)create)a)future
• Writable)single4assigment)container
• Completes)a)future)with)success
• Fails)a)futre)with)failure
• It's)the)wri<ng)side)of)the)Future
Scala:&Promise
val pss = new PizzaStoreService
val hs = new HomeService
val p = promise[Pizza]()
val f = p.future
val orderFood = future {
val pizza = pss.orderPizza() # <==== they told me it would only be 30 minutes ;-(
p success pizza
hs.setTable()
}
val eat = future {
hs.findMovie()
f onSuccess {
case pizza => hs.eat()
}
}
Scala:&Promise
val pss = new PizzaStoreService
val hs = new HomeService
val p = promise[Pizza]()
val f = p.future
val orderFood = future {
val pizza = pss.orderPizza() # <==== they told me it would only be 30 minutes ;-(
p success pizza # <==== when the pizza arrives complete the future
hs.setTable() # <==== don't wait for the pizza, set the table in the meantime
}
val eat = future {
hs.findMovie()
f onSuccess {
case pizza => hs.eat()
}
}
Scala:&Promise
val pss = new PizzaStoreService
val hs = new HomeService
val p = promise[Pizza]()
val f = p.future
val orderFood = future {
val pizza = pss.orderPizza() # <==== they told me it would only be 30 minutes ;-(
p success pizza # <==== when the pizza arrives complete the future
hs.setTable() # <==== don't wait for the pizza, set the table in the meantime
}
val eat = future {
hs.findMovie() # <==== still waiting, lets find a good movie!
f onSuccess {
case pizza => hs.eat()
}
}
Scala:&Promise
val pss = new PizzaStoreService
val hs = new HomeService
val p = promise[Pizza]()
val f = p.future
val orderFood = future {
val pizza = pss.orderPizza() # <==== they told me it would only be 30 minutes ;-(
p success pizza # <==== when the pizza arrives complete the future
hs.setTable() # <==== don't wait for the pizza, set the table in the meantime
}
val eat = future {
hs.findMovie() # <==== still waiting, lets find a good movie!
f onSuccess {
case pizza => hs.eat() # <==== Yeah! Pizza is here, lets eat!
}
}
Akka
• What&is&Akka?
• Actor&System
• Distributed&Model
Akka:%What%is%Akka?
Akka$is$a$toolkit$and$run.me$for$building$
highly$concurrent,$distributed,$and$fault$
tolerant$event9driven$applica.ons$on$the$
JVM.
—"Typesafe
• Simple(Concurrency(&(Distribu5on
• Resilient(by(Design
• High(Performance
• Elas5c(&(Decentralized
• Extensible
Akka:%Actors
• Lightweight)concurrent)en//es)1)2.5m)/)GB)mem
• Uses)asynchronous)event1driven)receive)loop
• Much)easier)to)reason)about)concurrent)code
• Focus)is)on)workflow)rather)than)concurrency
• Supports)both)Scala)&)Java
Akka:%Actors
case class Pizza(kind: String)
class PizzaActor extends Actor with ActorLogging {
def receive = {
case Pizza(kind) log.info("You want a " + kind + " Pizza!")
}
}
val system = ActorSystem("MySystem")
val PizzaEater = system.actorOf(Props[PizzaActor], name = "pizzaeater")
PizzaEater ! Pizza("Pepporoni")
Akka:%Actors
Fault&Tolerance
• Supervisor+hierarchies+with+"let3it3crash"+seman6cs
• Supervisor+hierarchies+can+span+mul6ple+JVM's
• Self3healing+seman6cs
• Never+stop+philosophy
Fault&Tolerance
• Actor's)supervise)actors)they)create
• When)failure)occurs)the)supervisor)can:
• Resume)the)failed)actor
• Stop)or)Restart)the)failed)actor
• Escalate)the)problem)up)the)chain
• Supervisor)strategy)can)be)overridden
Fault&Tolerance
import akka.actor.OneForOneStrategy
import akka.actor.SupervisorStrategy._
import scala.concurrent.duration._
override val supervisorStrategy =
OneForOneStrategy(maxNrOfRetries = 5, withinTimeRange = 1 minute) {
case _: ArithmeticException => Resume
case _: NullPointerException => Restart
case _: IllegalArgumentException => Stop
case _: Exception => Escalate
}
Akka:%Actors
Loca%on'Transparency
• Distributed+workflow+environment
• Purely+with+messages+passing
• Asynchronous+in+nature
• Local+model+=+distributed+model
• Purely+driven+by+configura?on
Akka:%Actors
Loca%on'Transparency
# Message sent to local actor
ActorRef localWorld = system.actorOf(
new Props(WorldActor.class), "world");
localWorld ! "Hello!"
Akka:%Actors
Loca%on'Transparency
# Message sent to remote actor
ActorRef remoteWorld = system.actorOf(
new Props(WorldActor.class), "world");
remoteWorld ! "Hello!"
Akka:%Actors
Loca%on'Transparency
ActorRef localWorld = system.actorOf(
new Props(WorldActor.class), "world");
localWorld ! "Hello!"
|
# No Difference in Semantics
|
ActorRef remoteWorld = system.actorOf(
new Props(WorldActor.class), "world");
remoteWorld ! "Hello!"
Akka:%Actors
Persistence
• Messages'can'be'op-onally'persisted'and'replayed
• Actors'can'recover'their'state
• even'a7er'JVM'crashes
• even'a7er'node'migra-on
• Supports'snapshots
Akka:%Actors
Persistence
class ExampleProcessor extends PersistentActor {
var state = ExampleState() # <--- mutable state, but NOT shared = OK!
def updateState(event: Evt): Unit =
state = state.update(event)
...
}
Akka:%Actors
Persistence
class ExampleProcessor extends PersistentActor {
...
val receiveRecover: Receive = { # <=== process persisted events on boostrap
case evt: Evt => updateState(evt)
case SnapshotOffer(_, snapshot: ExampleState) => state = snapshot
}
...
}
Akka:%Actors
Persistence
class ExampleProcessor extends PersistentActor {
...
val receiveCommand: Receive = { # <=== process commands, if valid persist events
case Cmd(data) =>
persist(Evt(s"{data}")) { event =>
updateState(event)
context.system.eventStream.publish(event)
}
...
}
}
Akka$Concurrency$Works
Thank&You!
Watch the video with slide synchronization on
InfoQ.com!
http://www.infoq.com/presentations/akka-
concurrency-jvm

Weitere ähnliche Inhalte

Andere mochten auch

Slides - Intro to Akka.Cluster
Slides - Intro to Akka.ClusterSlides - Intro to Akka.Cluster
Slides - Intro to Akka.Clusterpetabridge
 
Akka Persistence and Eventuate
Akka Persistence and EventuateAkka Persistence and Eventuate
Akka Persistence and EventuateMartin Krasser
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreStephane Manciot
 
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsPSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsStephane Manciot
 
Akka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based ApplicationsAkka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based ApplicationsNLJUG
 
Akka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesKonrad Malawski
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Jonas Bonér
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and AkkaYung-Lin Ho
 
Akka in 100 slides or less
Akka in 100 slides or lessAkka in 100 slides or less
Akka in 100 slides or lessDerek Wyatt
 

Andere mochten auch (13)

Akka Fundamentals
Akka FundamentalsAkka Fundamentals
Akka Fundamentals
 
Slides - Intro to Akka.Cluster
Slides - Intro to Akka.ClusterSlides - Intro to Akka.Cluster
Slides - Intro to Akka.Cluster
 
Akka Persistence and Eventuate
Akka Persistence and EventuateAkka Persistence and Eventuate
Akka Persistence and Eventuate
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvre
 
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streamsPSUG #52 Dataflow and simplified reactive programming with Akka-streams
PSUG #52 Dataflow and simplified reactive programming with Akka-streams
 
Akka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based ApplicationsAkka in Practice: Designing Actor-based Applications
Akka in Practice: Designing Actor-based Applications
 
Akka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutesAkka persistence == event sourcing in 30 minutes
Akka persistence == event sourcing in 30 minutes
 
Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)Building Reactive Systems with Akka (in Java 8 or Scala)
Building Reactive Systems with Akka (in Java 8 or Scala)
 
Introducing Akka
Introducing AkkaIntroducing Akka
Introducing Akka
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
 
Introduction to Actor Model and Akka
Introduction to Actor Model and AkkaIntroduction to Actor Model and Akka
Introduction to Actor Model and Akka
 
Akka in 100 slides or less
Akka in 100 slides or lessAkka in 100 slides or less
Akka in 100 slides or less
 

Mehr von C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoC4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileC4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No KeeperC4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like OwnersC4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaC4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideC4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDC4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine LearningC4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at SpeedC4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsC4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsC4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerC4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleC4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeC4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereC4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing ForC4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data EngineeringC4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreC4Media
 

Mehr von C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Kürzlich hochgeladen

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 

Kürzlich hochgeladen (20)

Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Akka for Concurrency Works