95
A Tour of (Advanced) Akka Features in 60 Minutes [CON1706] Johan Janssen, Info Support @johanjanssen42

JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Embed Size (px)

Citation preview

Page 1: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

A Tour of (Advanced) Akka Features in 60 Minutes [CON1706]Johan Janssen, Info Support@johanjanssen42

Page 2: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Content

▪ Why Akka?▪ Local actor▪ Remote actor▪ Scheduling▪ Cluster▪ Routing▪ Cluster singleton

▪ Sharding▪ Persistence▪ Akka HTTP▪ Finite State Machines▪ Conclusion▪ Questions

Page 3: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Why Akka?

Page 4: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Why Akka?

▪ Concurrent▪ Scalable▪ Fault tolerant

▪ More natural programming experience when connecting to other systems

▪ Easy to use?

Page 5: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Disclai

mer

Page 6: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Local actor

Page 7: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Local actor

Actor on JVM 1

Page 8: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Local actor

Coordinator Actor

Hello conferenc

e

Page 9: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Local actor

Coordinator Actor

println("Hello conference")

Page 10: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

class Worker extends Actor { def receive = { case x => println(x) }}

val system = ActorSystem("ExampleActorSystem")

val workerActorRef = system.actorOf(Props[Worker])workerActorRef ! "Hello conference"

Scala

Page 11: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Remote actor

Page 12: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Remote actor

Actor on JVM 1

Actor on JVM 2

Page 13: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

val workerActorRef = system.actorOf(Props[Worker])workerActorRef ! "Hello conference"

val workerActorRef = context.actorSelection("akka.tcp://

[email protected]:9005/user/workerActor")

workerActorRef ! "Hello conference"

Page 14: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

akka { actor { provider =

"akka.remote.RemoteActorRefProvider" } remote { enabled-transports =

["akka.remote.netty.tcp"] netty.tcp { hostname = "127.0.0.1" port = 9002

Page 15: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Remote actor

Coordinator actor

Worker actor

StartMessage

Hello conferenc

e

Page 16: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Remote actor

Coordinator actor

Worker actor

WorkerMessage

Greetings from the coordinator:

Hello Conference

Page 17: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Remote actor

Coordinator actor

Worker actor

WorkerResponseMessage

Item processed successfully

Page 18: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Scheduling

Page 19: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Scheduling

Actor

Scheduled once after 1 second

Tick

Scheduled every 5 seconds

Tock

system.scheduler.scheduleOnce(1 seconds, scheduleReceiveActor, Tick)

system.scheduler.schedule(0 seconds, 5 seconds, scheduleReceiveActor, Tock)

Page 20: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Scheduling

▪ Does not work for fixed point in time like 17:00– Use Quartz

Page 21: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster

Page 22: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster

ActorSystem on JVM

1

ActorSystem on JVM

3

ActorSystem on JVM

2

ActorSystem on JVM

4

Page 23: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Seed nodes

▪ Contact points for automatically joining a cluster

Page 24: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

akka { cluster { seed-nodes = [ "akka.tcp://[email protected]:2551", "akka.tcp://[email protected]:2552" ] }}

Page 25: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster Worker Node

Port 2551

Association failed with [akka.tcp://[email protected]:2552

Page 26: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster Worker Node

Port 2551

Worker Node

Port 2552

Member Up with IP: 127.0.0.1 and port: 2551Member Up with IP: 127.0.0.1 and port: 2552

Member Up with IP: 127.0.0.1 and port: 2551Member Up with IP: 127.0.0.1 and port: 2552

Page 27: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster Worker Node

Port 2551

Worker Node

Port 2552

Member Up with IP: 127.0.0.1 and port: 2550

Member Up with IP: 127.0.0.1 and port: 2550

CoordinatorNode

Port 2550

Page 28: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster Worker Node

Port 2551

Worker Node

Port 2552

CoordinatorNode

Port 2550

RegisterWorker

RegisterWorker

Page 29: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster Worker Node

Port 2551

Worker Node

Port 2552

CoordinatorNode

Port 2550

Worker registered with IP: 127.0.0.1 and port: 2551Worker registered with IP: 127.0.0.1 and port: 2552

Page 30: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

Page 31: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

Actor on JVM 1

Actor on JVM 3

Actor on JVM 4

Actor on JVM 2

Loadbalancer

Page 32: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

akka { actor { provider = "akka.cluster.ClusterActorRefProvider"

deployment { /coordinator/router { router = round-robin-pool nr-of-instances = 10 routees.paths = ["/user/emptystringactor"] cluster { enabled = on allow-local-routees = off } } } }}

Page 33: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

CoordinatorActor

on JVM 1

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

Page 34: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

CoordinatorActor

on JVM 1

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

HashMap[hostname, counter]

Page 35: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

CoordinatorActor

on JVM 1

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2

""

Page 36: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Routing

CoordinatorActor

on JVM 1

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2

""

Page 37: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Page 38: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

▪ Only one instance of the actor in the cluster▪ (Re)created on the oldest node▪ Can be used for instance for scheduling/caching

Page 39: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Actor on JVM 1

Other actors on

JVM 3

Other actors on

JVM 4

Singleton actor and

other actors on

JVM 2

Page 40: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

Page 41: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

HashMap[hostname, counter]

Page 42: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

Page 43: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2""

HashMap[hostname, counter]

Page 44: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

EmptyString Actor on JVM 2Crash

Page 45: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

""

Page 46: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

""

HashMap[hostname, counter]

Page 47: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

""

Page 48: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Cluster singleton

Coordinator

EmptyString Actor on JVM 3

EmptyString Actor on JVM 4

""

HashMap[hostname, counter]

Page 49: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Sharding

Page 50: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Sharding

▪ Dividing a set of actors over a cluster▪ Actors will be divided into groups called shards▪ It will divide based on a logical identifier

Page 51: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Sharding

Actor on JVM 1

oddShard on

JVM 3

evenShard on

JVM 20, 2, 4, 6, 8

1, 3, 5, 7, 9

Page 52: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

Page 53: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

▪ Store actor information▪ Recover after crash▪ Possibility to take snapshots

Page 54: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Actor

Cobol

Page 55: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Actor

Cobol

Page 56: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Cobol

Actor

Page 57: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Actor

Java Cobol

Page 58: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

CobolJava

ActorCrash

Restart

Page 59: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Actor

Page 60: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Actor

Scala

Page 61: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Example without persistence

Scala

Actor

Page 62: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

PersistentActor

Cobol

Command

Journal

Page 63: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

PersistenceJournal

CobolEvent

PersistentActor

Page 64: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

PersistenceJournal

ACK

PersistentActor CobolEvent

Page 65: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

Cobol

Journal

CobolEvent

PersistentActor

Page 66: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

Cobol

Journal

CobolEvent

PersistentActor

JavaEven

t

Page 67: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

CobolJava

Journal

CobolEvent

PersistentActorCrash

Restart JavaEven

t

Page 68: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

PersistenceJournal

CobolEvent

PersistentActor

JavaEven

t

Page 69: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

CobolJava

Journal

CobolEvent

PersistentActor

JavaEven

t

Scala

Page 70: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Persistence

CobolJavaScala

Journal

CobolEvent

PersistentActor

JavaEven

t

Page 71: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

store

State until

Event C++

C++Cobol

Page 72: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

store State until

Event C++ C++

Cobol

Page 73: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

storeState until

Event C++ C++

Cobol

Page 74: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

storeState until

Event C++ Java

C++Cobol

Page 75: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

storeState until

Event C++

Crash

Restart

C++Cobol

Java

Page 76: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

JournalPersistentActorSnapshot

storeState until

Event C++ C++

Cobol

Java

Page 77: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

CobolC++

JournalPersistentActorSnapshot

storeState until

Event C++ C++

Cobol

Java

Page 78: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

CobolC++Java

JournalPersistentActorSnapshot

storeState until

Event C++ C++

Cobol

Java

Page 79: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Snapshots

CobolC++JavaScala

JournalPersistentActorSnapshot

storeState until

Event C++ C++

Cobol

Java

Page 80: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Akka HTTP

Page 81: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Akka HTTP

Actor on JVM 1

Actor on JVM 2

Page 82: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machine

Page 83: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machine

▪ State▪ Event

Page 84: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Progress, iterationProgress, iteration

Progress, iteration

NoProgressProgress, 2

Page 85: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Work harderIteration: 0

Page 86: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Good job!

Iteration: 0

Page 87: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Wrong direction

Iteration: 0

Page 88: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Use Akka

Iteration: 0

Page 89: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Good job!

Iteration: 1

Page 90: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Wrong direction

Iteration: 1

Page 91: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject

Use Akka

Iteration: 1

Page 92: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Finite State Machines (FSM)

InprogressProject

CrappyProject

NewProject Get another job!

Iteration: 2

Page 93: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Conclusion

Page 94: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Conclusion

▪ Akka can be used with Scala or Java▪ There is even a .NET version of Akka▪ Akka is really powerful▪ Akka is quite easy to use▪ Some features are still experimental

Page 95: JavaOne: A tour of (advanced) akka features in 60 minutes [con1706]

Questions

Johan Janssen @johanjanssen42GitHub: https://github.com/johanjanssen/Akka-examples