SlideShare a Scribd company logo
Akka Introduction
LLAAMA - March 2022
© LLAAMA 2022 www.llaama.com
Akka is developed and
supported by Lightbend
© LLAAMA 2022
Agenda
Akka Actors & Cluster
Multithreading, Akka Actors & Systems, Actor location, Actor hierarchy, Supervision,
Exception-handling, Reactive Architecture, Cluster, Domain-Driven Design, Singleton, Sharding,
Split-Brain Resolution, Protocol and serialization…
Akka Streams
Source, Flow, Sink, Backpressure, Materialization, Graph, Operators,...
© LLAAMA 2022
Akka Background
© LLAAMA 2022
Akka Background
● Actor Paradigm first described in a
paper in 1973 by Carl Hewitt
● Akka is a Scala project that started
in 2009, current version is 2.6.x
● Very much inspired from Erlang
Actors
● Akka Actors were not typed
until 2.6
● Akka can be used in a Object
Oriented as well as in a Functional
Programming approach
● Scala engineers tend to favor the FP
approach
● Java engineers tend to use the OO
approach
● Used by ING, PayPal, Tesla, Netflix,...
© LLAAMA 2022
Akka, Bottom-Up
© LLAAMA 2022
Java Concurrency
Java and the JVM aimed from the very beginning at becoming the platforms for
multi-processed, multithreaded and concurrent applications development but :
Concurrency (and reasoning about it) is difficult and has always been!
Low level constructs for concurrent programming are complex:
happens-before relationship
Monitor locks with synchronized
volatile to synchronize writes/reads
Java Memory Model is improving but still difficult to understand
© LLAAMA 2022
Bus
CPU Architecture and Concurrent Programming
CPU
RAM
Memory
cache
lines
L1
L2
L..
CPU
Memory
cache
lines
L1
L2
L..
volatile
Bus
CPU
RAM
Memory
cache
lines
L1
L2
L..
CPU
Memory
cache
lines
L1
L2
L..
N
e
t
w
o
r
k
© LLAAMA 2022
(Java) Concurrent Object-Oriented Programming is Broken
Obj A Obj B Obj C
methodA()
return
methodA()
return
Thread 1
Thread 2
© LLAAMA 2022
Solutions?
runnable() {...}
synchronized(...) {...}
© LLAAMA 2022
Actors: a better
approach of
Concurrent
Programming
© LLAAMA 2022
New Viewpoints
No shared memory anymore
read-write
Think about inter-CPU
communication (almost) the same
way as network communication
Think distributed as default
Optimize when local
Use immutable messages
for concurrency
© LLAAMA 2022
Actor Model Contract
An Actor is an abstraction for a computational entity that can:
1. send messages to other actors
2. create new actors
3. designate the behavior to be applied to the next message
4. Make local decisions, like modifying private state
© LLAAMA 2022
Akka Actors Happens-Before Rules
1. Actor send rule, send of message M happens before receive of
message M by the same actor
2. Actor subsequent processing rule, processing of a message
happens before processing of next message by same actor
© LLAAMA 2022
Actors, CPU architecture and concurrent programming
● Read-write paradigm is finished: there is no shared memory anymore
● Data exchange over the network is not different from inter-CPU communication
● Actor approach: keep state local and exchange immutable messages
© LLAAMA 2022
Fixing Concurrent Object-Oriented Programming with Actors
Actor A Actor B Actor C
message A
Message D
Message B
Message C
Process
message A
Process message
B
Message B
processed after A
© LLAAMA 2022
Akka Actors
● Akka Actors are distributed by default, all functions are built for clusters
of hundreds of machines and JVMs
● Upside-down: designed to be distributed, optimized when local (instead of
generalization from local to remote)
● Interactions between actors happen through sending asynchronous
immutable messages
● Messages must be immutable and serializable! - when local, JVM object
references
Are Actors what Object-Oriented Programming should be ?
© LLAAMA 2022
Akka Actors:
Lightweight
Objects
© LLAAMA 2022
Akka Actor, Lightweight Construct
Actor
Mailbox
Message C
Message B
Message A
Incoming
messages
Behaviors
State
Execution
context
Processing
next message
Behavior
Scheduled to
process message
akka://actor-syst/user/actor1
Children
actors
© LLAAMA 2022
What does an Akka Actor contain?
● Actor Reference
○ A kind of proxy that enables to talk to the actor from anywhere while shielding Actor
internal state
● State
○ Any state related to the application logic, hidden from outside, modified like it would own
its own thread
● Behavior
○ Behaviors define what action should be performed for which received message
○ Behaviors change over time and every message processing should provide next behavior
○ Messages are statically typed
● Mailbox
○ An Actor has exactly one mailbox, a FIFO queue.
● Child Actors
○ An Actor can (should) have child actors to delegate tasks
● Supervision Strategy
○ What to do in case of failure ? restart x times - resume - stop, …
© LLAAMA 2022
Akka
ActorSystem:
The plumbing
© LLAAMA 2022
Akka Actor System
● An ActorSystem is the home of a hierarchy of Actors
● An ActorSystem is a heavyweight construct
○ It might allocate many threads
○ There should be one per logical application
● The ActorSystem hierarchy enables splitting-up tasks in small and logical
pieces
● The top-level Actor (given at construction) should be a supervisor
© LLAAMA 2022
Akka Actor Hierarchy
Root guardian
User guardian System guardian
Created while
creating the
Actor System
/user /system
/
/user/a /user/b
/system/internalActor
Internal to Akka
User created
hierarchy
/user/a/aa /user/a/ab /user/a/ac
context.spawn(behavior, “a”)
context.spawn(behavior, “aa”)
/deadLetters Receives messages that cannot reach destination
/temp Guardian for short-lived system actors (e.g. to manage ask implementation)
/remote For Remote references
© LLAAMA 2022
● Actor references are available when actors are created
○ val greeter: ActorRef[HelloWorld.Greet] = context.spawn(HelloWorld(), “greeter”)
○ ActorRef<HelloWorld.Greet> greeter = context.spawn(HelloWorld.create(), “greeter”
● Actor references can be part of the message protocols
● Actor references correspond to real existing actors and are bound to their life-cycle
● Actor references can be obtained through the Receptionist
● Actor Paths are unique accessors, in form of path structures, from the actor
system, through the actor hierarchy to the actor itself
○ akka://actorsystem/user/a/b/c (local)
○ akka://actorsystem@host.example.com:5555/user/a/b/c (remote)
Akka Actor References and Addresses
© LLAAMA 2022
Call stack
Traditional Actor based
● Non-blocking, message-driven tasks
delegation amongst Threads
● Failures are part of the domain model
● Let it crash approach
● Response deadlines are handle with
timeouts
Main Thread Worker Thread
Delegates some work
Start task
Task fails!
Exception is only propagated
to worker thread
Main thread is not notified
of the exception!
© LLAAMA 2022
Warnings
● In an actor, messages can be processed by different threads
● Don’t close over internal Actor state
● Avoid as much as possible blocking in actors, when unavoidable use a
dedicated dispatcher
● Don’t try to control the order in which messages are processed in big
systems !
© LLAAMA 2022
Asynchronous
Interactions
© LLAAMA 2022
Akka Actor Interactions
Actor A
Tell - Fire and Forget
Actor B
Message
Actor A
Tell - Request-Response
Actor B
Request
Actor A
Ask - Request-Response, 1-1, with timeout
Actor B
Response
Request
Response
● Tell is thread safe!
● Tell is asynchronous and
returns directly
● Wrapper can be used to adapt
protocol objects
● Ask needs timeout
● Many other constructs can be
built up on top of Tell
© LLAAMA 2022
Akka Actor Protocol
● The protocol of an actor are the types the actor understands
○ It includes accepted messages as well as reply types
● Protocols can be defined for multiple actors, contributing to the application
logic
● A Behavior is defined with a protocol type
● sealed trait and case class
● interface and static final class
© LLAAMA 2022
ActorContext
Kind of
“Decorator”
© LLAAMA 2022
Akka Actor Context
ActorContext provides the Actor with important features:
● spawn to create child actors (Actor contract)
● Access to own identity (self)
● Access to children
● messageAdapter (wrap messages to translate protocols)
● Access to ActorSystem of the actor
● Provides watch to register for Terminated notifications
● Logging
© LLAAMA 2022
Message Delivery Contract
1. At-most-once
2. Message ordering per sender-receiver pair
© LLAAMA 2022
“Let it crash!”
© LLAAMA 2022
Akka Fault Tolerance and Supervision
“Shit happens” therefore apply the Let it crash approach !
Actor /user/a
Actor /user/a/b
Actor /user/a/b/c
Database
E.g. database
call exception
child
child
Define supervision strategy on Exception types
restart, restart.withLimit, stop, resume
A parent actor can decide to watch its child for termination
Failures can climb the actor hierarchy with the Terminated signal,
depending on application needs
Expected exceptions should rather be
included in the actors protocols!
© LLAAMA 2022
Group Router -
ActorSystem - Node 4
Group Router -
ActorSystem - Node 3
Group Router -
ActorSystem - Node 2
Pool Router - ActorSystem - Node 1
Routers
● Distributing messages to set of delegated actors
● Enables parallel processing
● Pool Router: routees are router’s children, local
● Group Router: uses ServiceKey and Receptionist to find routee, clustered
○ Available routing strategies: Round Robin, Random, Consistent Hashing
Routees, router’s children
Router
Messages
Messages
forwarded to
children
Group Router - ActorSystem - Node 1
Router
Messages
Forwarding
strategy
© LLAAMA 2022
Akka Message Stashing
● Stashing enables buffering messages before they are passed on to an actor
● It is an important feature in Domain Driven Design and Sharding
new
Actor A
Messages
Datastore
Building initial
state
Buffer
Messages released once behavior changes
(e.g. initialization completed)
© LLAAMA 2022
Akka Actor model and Finite-State Machine
Mathematical model of computation, part of automata theory, a Finite-State
Machine (FSM):
● Has a finite number of states
● Is in one state at a time
● Events change its state
Actor A
Behaviors
Messages
protocol
FSM
events as actor m
essages
FSM
states as actor behaviors
© LLAAMA 2022
Under the hood:
MessageDispatcher
© LLAAMA 2022
Akka Dispatchers
● MessageDispatcher is the engine at the heart of an ActorSystem
● Default MessageDispatcher implements a fork-join-executor
● Internal actors are protected by an internal dispatcher
● If needed, other dispatchers can be used (e.g. blocking, for I/O)
MessageDispatcher
ExecutionContext
ExecutionContextExecutor
Executor
ExecutorService
ForkJoinPool
implements
extends
extends
akka
scala.concurrent
java.util.concurrent
© LLAAMA 2022
Miscellaneous
● By default, every Actor has an unbounded Mailbox
○ Mailboxes can be configured
○ Other mailbox types are available
○ A custom mailbox can be provided
○ Akka doc - mailboxes
● Configuration
○ All configuration for Akka happens in instances of ActorSystem
○ Defaults come from reference.conf
○ Merging is done with application.conf, application.json, application.properties
○ Akka doc - configuration
● Testing
○ Asynchronous testing and Synchronous behavior testing
○ Akka doc - testing
© LLAAMA 2022
Akka: Top Down
© LLAAMA 2022
Reactive Architecture
Message Driven
Responsive
Resilient
Elastic
VALUE
FORM
MEANS
Maintainable Extensible
The Reactive Manifesto
© LLAAMA 2022
Reactive Systems Features
Responsive
Flexible
Loosely-coupled
Scalable
Resilient and tolerant to failure
Elastic
Message-drive (asynchronous)
Location transparency
Failures as messages
Back-pressure
Non-blocking
© LLAAMA 2022
Distributed Computing
with Akka Cluster
© LLAAMA 2022
One Actor
is
No Actor
© LLAAMA 2022
What is an Akka Cluster?
Multiple ActorSystems nodes joining to form one coordinated distributed application
“Akka Cluster provides a fault-tolerant
decentralized peer-to-peer based Cluster
Membership Service with no single point of
failure or single point of bottleneck. It does
this using gossip protocols and an
automatic failure detector.” (Akka doc -
cluster specification)
An actor
An Actor System (a JVM)
A cluster Node
© LLAAMA 2022
Akka Cluster Benefits
● Akka Cluster is the best way to build Akka Actor Systems with several hundreds
actors
● Akka Cluster provides everything that is needed to build complex distributed
systems
● Akka Cluster fits perfectly with the goal of Reactive systems as well as cloud
Native systems
● Akka Cluster fits very well with platforms like Kubernetes
○ E.g. it can easily use K8s APIs for node discovery
○ It can use K8s lease feature for SBR
● There is rarely the need to use Akka remote anymore
© LLAAMA 2022
Akka Cluster is
like a Beehive
© LLAAMA 2022
How to Build a Cluster?
Challenges:
● Starting Cluster
● Cluster Membership
● Leadership
● Failure Detection
● Network Partition
● Roles
● Message Serialization
© LLAAMA 2022
Membership
Node Member States
● Joining
● Weakly Up
● Up
● Leaving
● Down
● Removed
?
© LLAAMA 2022
Nodes States Transitions
Joining Up Leaving Exiting Removed
Weakly Up
Down
Join
Leave
Down
Join, Leave, Down: User actions
Weakly up: nodes waiting for gossip
convergence to be reached
Leader action Leader action
Leader action
L
e
a
d
e
r
a
c
t
i
o
n
© LLAAMA 2022
Members Events
Joining Up Leaving Exiting Removed
Weakly Up
Down
ClusterEvent.MemberJoined
ClusterEvent.MemberUp
ClusterEvent.MemberExited
ClusterEvent.MemberRemoved
ClusterEvent.Unreachable: member not reachable by failure detector
ClusterEvent.Reachable: member reachable again (after being unreachable)
ClusterEvent.MemberPreparingForShutdown: member preparing for full cluster shutdown
ClusterEvent.MemberReadyForShutdown: member is ready for full cluster shutdown
© LLAAMA 2022
“Anyone can start a
rumor, but nobody
can stop one.”
© LLAAMA 2022
Gossip Convergence
● Gossip Protocol (aka epidemic protocol) to spread out cluster state around nodes
● Random information dissemination, vector clock (node, counter, state) for partial ordering of
events and causality violation detection
● Gossip message Serialization done with protobuf
● Gossip Convergence
○ when “one node can prove that the cluster state
it is observing has been observed
by all other nodes from the cluster”
○ Any unreachable node prevents
Gossip Convergence
● Optimizations of the Gossip Protocol
○ Digests sent instead of full data
○ Changes to the algorithm depending
on number of nodes
Gossip
© LLAAMA 2022
Special Roles in Akka cluster
● Leader
○ Defined when (gossip) convergence is reached
○ No special node, just a role
○ Deterministic way to recognize it
○ Confirms states changes (e.g. joining -> up)
● Seed Nodes
○ Fixed entry points for nodes to join the cluster
○ No special other role
○ Can be defined in conf or as system.properties
○ First seed node needs to be available when starting the cluster
○ Cluster Bootstrap module enable automatic discovery of nodes
application.conf:
akka.cluster.seed-nodes = [
"akka://MyCluster@host1:2552",
"akka://MyCluster@host2:2552"]
JVM system properties:
-Dakka.cluster.seed-nodes.0=akka://ClusterSystem@host1:2552
-Dakka.cluster.seed-nodes.1=akka://ClusterSystem@host2:2552
© LLAAMA 2022
Failure Detector
● Detects unreachable nodes
● Decides how to react
● Uses the gossip protocol
● One node is monitored by N (default 5) other nodes
● An unreachable node will be quarantined and eventually downed and removed
● Failure detection is based on Phi Accrual Failure Detector
○ Distinguish expected latencies (network, garbage collections, etc.) from crashes
○ Based on regular heartbeat messages
○ Learns from previous failures
○ Calculates a likelihood (phi) of a node to be down
○ Threshold (acceptable-heartbeat-pause) can be defined by user
© LLAAMA 2022
Split Brain
Machine crashes, unresponsiveness,
network partitions cannot be distinguished from each other !
Only information: unanswered heartbeats messages
© LLAAMA 2022
Split Brain Resolution
● Decisions must be taken…
● There are multiple SBR strategies
● Most obvious strategy: Keep Majority
○ Downs the nodes if they are in the minority
● Static Quorum
● Lease
● Keep Oldest
● Down all
© LLAAMA 2022
Singleton
Exactly one instance of an actor with a defined role in the whole cluster
● Goal: single point of responsibility
● Start with ClusterSingleton.init on all nodes with given role
● Singleton will run on oldest node
● Cluster ensures there is one and only one instance available
● ClusterSingleton.init provides a proxy ActorRef to the
Singleton wherever it’s actually running
● Issues
○ Downing
○ Singletons can by definition become bottlenecks!
© LLAAMA 2022
Singleton Reference and Proxy
Node crashes
Singleton Actor A,
running on oldest node
Singleton Actor A is restarted
on new oldest node
M
essage
to
A
M
e
s
s
a
g
e
t
o
A
Proxy to route message to Actor A
Proxy to route
message to Actor A
M
essage
to
A
New route
© LLAAMA 2022
Stateless
versus
Stateful
Applications
© LLAAMA 2022
Stateless (traditional) Applications
Database
Application
API
State
Scaling
Database
Application
State still here
API on Load balancer
Application
cache
© LLAAMA 2022
CAP (Theorem)
Any distributed system can only guarantee 2 out of 3
from Consistency, Availability and Partition tolerance
1. Consistency: read returns the most
recent write
2. Availability: every request gets a
response (maybe not latest write)
3. Partition tolerance: system keeps
working even though some messages are
lost
● Interpretation can be complicated as partitions
will happen but rarely
● It sounds “binary”, but it’s continuous !
● It determines design decisions that can vary
depending on data or use cases
Recommendation: Forget about
CAP, instead reason about
trade-offs between A and C !
A C
P
© LLAAMA 2022
Domain-Driven
Design
© LLAAMA 2022
Domain-Driven Design, Reactive Architecture and Microservices
● Domain-Driven Design and Reactive Architecture are often
used together because they are very compatible
● DDD main goal
○ Breaking down a large domain model into smaller pieces
○ Determine boundaries between different smaller domain
○ Define a good communication channel between domain experts and
software engineers
● Reactive Microservices also try to define clear boundaries
and roles
© LLAAMA 2022
Different Approaches to Domain-Driven Design
Defining the Domain using the domain expert language
Finding subdomains
Boundaries around the domain and subdomains
Analyze the Domain from an Event DDD perspective using the
Subject-Verb-Object Notation
© LLAAMA 2022
Stateful
Applications
through Sharding
© LLAAMA 2022
Cluster for Stateful Application
Stateful entities existing as actors in the cluster,
they connect to the DB when needed
Actors as API entry points
Messages
are routed to
the right
actor
© LLAAMA 2022
Akka Sharding for Stateful Applications
One Actor = one DDD Entity
Actor becomes a Consistency boundary for its data,
enabling Strong Consistency
Unique Entity Id through out the cluster
Messages are addressed to the Entity Id
Actor A1 managing Entity E1
Messages to E1 are routed to A1
Entity Actors are grouped in Shards
A function gives the Shard Id (usually based on the Entity Id)
Shards are grouped in Shard Regions
Typically, one Shard Region per JVM for an Entity type
Shard Coordinator, Singleton for message routing to the
right Shards
© LLAAMA 2022
Sharding: Routing, Entities, Shards
● Entities Ids must be unique throughout the cluster
● A message to an entity contains its Id to enable routing
● A common pattern is an Envelope for a message:
case class EntityEnvelope(entityId: String, message: Any)
● An Extractor function enables to extract the Entity Id
● To distribute Entities in Shards, a function needs to map Entity Ids to Shard Ids
● Example:
Math.abs(entityId.hashCode % nbrOfShards)).toString()
© LLAAMA 2022
Akka Sharding
● Ensures strong Consistency with Single
source of Truth (one Actor, one Entity)
● State is in the Actor, sync with the DB
happens from the Actor
● Single threaded illusion (from Akka
Actor)
● Contention problems can be mitigated in
increasing the number of nodes or
changing cluster topology
● Failures are isolated to actors or actor
Systems
Actor A
Actor gets its state
from the Database at
startup
DB
updateState(value)
message
getState() message
state 0
state 1
state 1
state 1
s
t
a
t
e
1
state 0
© LLAAMA 2022
Akka Sharding Features
Blocking
● Blocking calls can be wrapped into Futures
● Messages can be stashed (e.g. during processing of non-blocking database calls)
● Stashed messages are kept while an actor is restarting
Passivation
● Automatically stop and removes Actor after a defined period without a message
● Messages are buffered during passivation
● Can be done manually (Passivate message)
● Passivation time can be optimized looking at memory footprint and/or actor being active
Rebalancing
● Rebalancing happens when the number of nodes in a cluster is changed (failure, scaling)
● The Shard Coordinator initiates the rebalancing, redistributing the shards among nodes
● The cluster must be in an healthy state (no Unreachable nodes)
● During Rebalancing, messages to re-balanced shards are buffered
© LLAAMA 2022
Akka Cluster Miscellaneous
● Coordinated shutdown
○ Enables clean and stepwise shutdown of an ActorSystem
● Akka Management
○ Akka Discovery
■ Endpoint lookup delegation using some kind of discovery service (e.g. DNS)
○ Akka Cluster Bootstrap
○ Cluster HTTP Management
■ Extension library providing a REST API to query and manage an Akka cluster
■ Enables Health checks queries
● Akka Serverless
○ Fully managed Akka Stateful application environment
● Lightbend Subscription
○ Tools (e.g. Telemetry) and support directly from the Akka team
© LLAAMA 2022
Akka Cluster Miscellaneous
● Serialization
○ Akka for its internal messages uses protobuf
○ Jackson is a good choice but any other library or own code can be used
○ Obvious: Java serialization should be avoided !!
● Event-Sourcing
○ Storing events, not state
○ State is reconstructed from stored events
● Command Query Responsibility Segregation (CQRS)
○ Fits well with ES, but is also possible without it
© LLAAMA 2022
Akka Streams
© LLAAMA 2022
Introduction
● Why?
○ Some real big data can only be processed as streams
○ Always more data only exist as streams
● How?
○ Reactive Streams Specification (www.reactive-streams.org)
○ Asynchronous streams with back-pressure
○ Constructs: publisher | processor | subscriber
○ Reactive streams is a Service Provider Interface (SPI)
○ included in JDK9
○ Akka Streams is a friendly user API that can use Reactive Streams Interfaces
© LLAAMA 2022
Akka Streams implementation
Akka Streams big picture
Akka Streams API
End-users
Akka Actors
Reactive
Streams*
*https://www.reactive-streams.org/
© LLAAMA 2022
Akka Streams
● Source: produces elements asynchronously
● Sink: receives elements
● Flow: processes elements (transformer)
● Back pressure included
● From Source to Flow to Sink
● Blueprints at every level
© LLAAMA 2022
Akka Streams, Backpressure
Source Flow Sink
Speed of stream is defined by consumers
Consumers define the demand
Backpressure is implemented in an
non-blocking and asynchronous way!
upstream downstream
© LLAAMA 2022
From Source to Sink
source.via(flow) is a source
flow.to(sink) is a sink
Blue prints are executed with .run() which needs an ActorSystem
for materialization
Nothing happens with the graph blueprint until materialization (run)
Nulls are not allowed!
© LLAAMA 2022
Source + Flow = New Source
Flow + Sink = New Sink
Source, Flow, Sink: Lego blocks
Source Flow Sink
Source Flow Sink
© LLAAMA 2022
Materializing
● A graph element can be used multiple times (think blueprint)
● Graph component are static until run is called
● Every run is a different materialization
● Run result is a materialized value, running graph = materializing
○ Resources allocations for a blueprint happens at materialization
■ Actors, threads, connections, etc.
● For every component, running => producing a materialized value
● But the graph produces only one materialized value
Materialized values can be everything from nothing to any object!
© LLAAMA 2022
Graphs
Fan-out Fan-in
© LLAAMA 2022
Graph DSL
● Fan-out
○ Broadcast
○ Balance
● Fan-in
○ Zip
○ ZipWith
○ Merge
○ Concat
© LLAAMA 2022
The End
© LLAAMA 2022

More Related Content

What's hot

Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
Diego Pacheco
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
confluent
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
emreakis
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive Programming
Andres Almiray
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
Amir Sedighi
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
NexThoughts Technologies
 
Reactive Programming in Java and Spring Framework 5
Reactive Programming in Java and Spring Framework 5Reactive Programming in Java and Spring Framework 5
Reactive Programming in Java and Spring Framework 5
Richard Langlois P. Eng.
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
AIMDek Technologies
 
How Uber scaled its Real Time Infrastructure to Trillion events per day
How Uber scaled its Real Time Infrastructure to Trillion events per dayHow Uber scaled its Real Time Infrastructure to Trillion events per day
How Uber scaled its Real Time Infrastructure to Trillion events per day
DataWorks Summit
 
Grafana.pptx
Grafana.pptxGrafana.pptx
Grafana.pptx
Bhushan Rane
 
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Scrum Breakfast Vietnam
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examples
Peter Lawrey
 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explained
confluent
 
Multithreading and Actors
Multithreading and ActorsMultithreading and Actors
Multithreading and Actors
Diego Pacheco
 
Kafka At Scale in the Cloud
Kafka At Scale in the CloudKafka At Scale in the Cloud
Kafka At Scale in the Cloud
confluent
 
Top 10 RxJs Operators in Angular
Top 10 RxJs Operators in Angular Top 10 RxJs Operators in Angular
Top 10 RxJs Operators in Angular
Jalpesh Vadgama
 
React hooks
React hooksReact hooks
React hooks
Sadhna Rana
 
Kafka presentation
Kafka presentationKafka presentation
Kafka presentation
Mohammed Fazuluddin
 
Cloud Monitoring tool Grafana
Cloud Monitoring  tool Grafana Cloud Monitoring  tool Grafana
Cloud Monitoring tool Grafana
Dhrubaji Mandal ♛
 
Introduction to Spring webflux
Introduction to Spring webfluxIntroduction to Spring webflux
Introduction to Spring webflux
Knoldus Inc.
 

What's hot (20)

Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
From Zero to Hero with Kafka Connect
From Zero to Hero with Kafka ConnectFrom Zero to Hero with Kafka Connect
From Zero to Hero with Kafka Connect
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
Understanding Reactive Programming
Understanding Reactive ProgrammingUnderstanding Reactive Programming
Understanding Reactive Programming
 
An Introduction to Apache Kafka
An Introduction to Apache KafkaAn Introduction to Apache Kafka
An Introduction to Apache Kafka
 
Java 8 features
Java 8 featuresJava 8 features
Java 8 features
 
Reactive Programming in Java and Spring Framework 5
Reactive Programming in Java and Spring Framework 5Reactive Programming in Java and Spring Framework 5
Reactive Programming in Java and Spring Framework 5
 
Introduction to Apache Kafka
Introduction to Apache KafkaIntroduction to Apache Kafka
Introduction to Apache Kafka
 
How Uber scaled its Real Time Infrastructure to Trillion events per day
How Uber scaled its Real Time Infrastructure to Trillion events per dayHow Uber scaled its Real Time Infrastructure to Trillion events per day
How Uber scaled its Real Time Infrastructure to Trillion events per day
 
Grafana.pptx
Grafana.pptxGrafana.pptx
Grafana.pptx
 
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
Reactive programming by spring webflux - DN Scrum Breakfast - Nov 2018
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examples
 
Apache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals ExplainedApache Kafka Architecture & Fundamentals Explained
Apache Kafka Architecture & Fundamentals Explained
 
Multithreading and Actors
Multithreading and ActorsMultithreading and Actors
Multithreading and Actors
 
Kafka At Scale in the Cloud
Kafka At Scale in the CloudKafka At Scale in the Cloud
Kafka At Scale in the Cloud
 
Top 10 RxJs Operators in Angular
Top 10 RxJs Operators in Angular Top 10 RxJs Operators in Angular
Top 10 RxJs Operators in Angular
 
React hooks
React hooksReact hooks
React hooks
 
Kafka presentation
Kafka presentationKafka presentation
Kafka presentation
 
Cloud Monitoring tool Grafana
Cloud Monitoring  tool Grafana Cloud Monitoring  tool Grafana
Cloud Monitoring tool Grafana
 
Introduction to Spring webflux
Introduction to Spring webfluxIntroduction to Spring webflux
Introduction to Spring webflux
 

Similar to Akka-intro-training-public.pdf

Actor model in .NET - Akka.NET
Actor model in .NET - Akka.NETActor model in .NET - Akka.NET
Actor model in .NET - Akka.NET
Konrad Dusza
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017
Petr Zapletal
 
Introduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actorsIntroduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actors
Shashank L
 
Introduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actorsIntroduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actors
datamantra
 
Fundamentals of Akka - Webinar
Fundamentals of Akka - WebinarFundamentals of Akka - Webinar
Fundamentals of Akka - Webinar
Knoldus Inc.
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
Harinath Krishnamoorthy
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And Design
Yaroslav Tkachenko
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
Steven Wu
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
Allen (Xiaozhong) Wang
 
Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to Practice
Docker, Inc.
 
Reactive Streams - László van den Hoek
Reactive Streams - László van den HoekReactive Streams - László van den Hoek
Reactive Streams - László van den Hoek
RubiX BV
 
Spark on yarn
Spark on yarnSpark on yarn
Spark on yarn
datamantra
 
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messages
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messagesMulti-Tenancy Kafka cluster for LINE services with 250 billion daily messages
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messages
LINE Corporation
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafka
Samuel Kerrien
 
Reactive mistakes reactive nyc
Reactive mistakes   reactive nycReactive mistakes   reactive nyc
Reactive mistakes reactive nyc
Petr Zapletal
 
Akka for big data developers
Akka for big data developersAkka for big data developers
Akka for big data developers
Taras Fedorov
 
Actors in the Small
Actors in the SmallActors in the Small
Actors in the Small
Bill La Forge
 
Serverless Event Streaming with Pulsar Functions
Serverless Event Streaming with Pulsar FunctionsServerless Event Streaming with Pulsar Functions
Serverless Event Streaming with Pulsar Functions
StreamNative
 
DotNext 2020 - When and How to Use the Actor Model and Akka.NET
DotNext 2020 - When and How to Use the Actor Model and Akka.NETDotNext 2020 - When and How to Use the Actor Model and Akka.NET
DotNext 2020 - When and How to Use the Actor Model and Akka.NET
petabridge
 

Similar to Akka-intro-training-public.pdf (20)

Actor model in .NET - Akka.NET
Actor model in .NET - Akka.NETActor model in .NET - Akka.NET
Actor model in .NET - Akka.NET
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017
 
Introduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actorsIntroduction to concurrent programming with Akka actors
Introduction to concurrent programming with Akka actors
 
Introduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actorsIntroduction to concurrent programming with akka actors
Introduction to concurrent programming with akka actors
 
Fundamentals of Akka - Webinar
Fundamentals of Akka - WebinarFundamentals of Akka - Webinar
Fundamentals of Akka - Webinar
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And Design
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Netflix Data Pipeline With Kafka
Netflix Data Pipeline With KafkaNetflix Data Pipeline With Kafka
Netflix Data Pipeline With Kafka
 
Container Orchestration from Theory to Practice
Container Orchestration from Theory to PracticeContainer Orchestration from Theory to Practice
Container Orchestration from Theory to Practice
 
Reactive Streams - László van den Hoek
Reactive Streams - László van den HoekReactive Streams - László van den Hoek
Reactive Streams - László van den Hoek
 
Spark on yarn
Spark on yarnSpark on yarn
Spark on yarn
 
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messages
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messagesMulti-Tenancy Kafka cluster for LINE services with 250 billion daily messages
Multi-Tenancy Kafka cluster for LINE services with 250 billion daily messages
 
Akka (1)
Akka (1)Akka (1)
Akka (1)
 
Introduction to apache kafka
Introduction to apache kafkaIntroduction to apache kafka
Introduction to apache kafka
 
Reactive mistakes reactive nyc
Reactive mistakes   reactive nycReactive mistakes   reactive nyc
Reactive mistakes reactive nyc
 
Akka for big data developers
Akka for big data developersAkka for big data developers
Akka for big data developers
 
Actors in the Small
Actors in the SmallActors in the Small
Actors in the Small
 
Serverless Event Streaming with Pulsar Functions
Serverless Event Streaming with Pulsar FunctionsServerless Event Streaming with Pulsar Functions
Serverless Event Streaming with Pulsar Functions
 
DotNext 2020 - When and How to Use the Actor Model and Akka.NET
DotNext 2020 - When and How to Use the Actor Model and Akka.NETDotNext 2020 - When and How to Use the Actor Model and Akka.NET
DotNext 2020 - When and How to Use the Actor Model and Akka.NET
 

Recently uploaded

Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
TeeVichai
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
bakpo1
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
R&R Consult
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdf
Pipe Restoration Solutions
 
Event Management System Vb Net Project Report.pdf
Event Management System Vb Net  Project Report.pdfEvent Management System Vb Net  Project Report.pdf
Event Management System Vb Net Project Report.pdf
Kamal Acharya
 
ethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.pptethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.ppt
Jayaprasanna4
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
Kamal Acharya
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
gdsczhcet
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
Kamal Acharya
 
Democratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek AryaDemocratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek Arya
abh.arya
 
ethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.pptethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.ppt
Jayaprasanna4
 
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSETECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
DuvanRamosGarzon1
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
ankuprajapati0525
 
Halogenation process of chemical process industries
Halogenation process of chemical process industriesHalogenation process of chemical process industries
Halogenation process of chemical process industries
MuhammadTufail242431
 
Forklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella PartsForklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella Parts
Intella Parts
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
fxintegritypublishin
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
SamSarthak3
 
CME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional ElectiveCME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional Elective
karthi keyan
 
Standard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - NeometrixStandard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - Neometrix
Neometrix_Engineering_Pvt_Ltd
 

Recently uploaded (20)

Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
 
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
一比一原版(SFU毕业证)西蒙菲莎大学毕业证成绩单如何办理
 
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptxCFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
CFD Simulation of By-pass Flow in a HRSG module by R&R Consult.pptx
 
The Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdfThe Benefits and Techniques of Trenchless Pipe Repair.pdf
The Benefits and Techniques of Trenchless Pipe Repair.pdf
 
Event Management System Vb Net Project Report.pdf
Event Management System Vb Net  Project Report.pdfEvent Management System Vb Net  Project Report.pdf
Event Management System Vb Net Project Report.pdf
 
ethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.pptethical hacking-mobile hacking methods.ppt
ethical hacking-mobile hacking methods.ppt
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
 
Democratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek AryaDemocratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek Arya
 
ethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.pptethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.ppt
 
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSETECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
 
Halogenation process of chemical process industries
Halogenation process of chemical process industriesHalogenation process of chemical process industries
Halogenation process of chemical process industries
 
Forklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella PartsForklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella Parts
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
 
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdfAKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
AKS UNIVERSITY Satna Final Year Project By OM Hardaha.pdf
 
CME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional ElectiveCME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional Elective
 
Standard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - NeometrixStandard Reomte Control Interface - Neometrix
Standard Reomte Control Interface - Neometrix
 

Akka-intro-training-public.pdf

  • 1. Akka Introduction LLAAMA - March 2022 © LLAAMA 2022 www.llaama.com
  • 2. Akka is developed and supported by Lightbend © LLAAMA 2022
  • 3. Agenda Akka Actors & Cluster Multithreading, Akka Actors & Systems, Actor location, Actor hierarchy, Supervision, Exception-handling, Reactive Architecture, Cluster, Domain-Driven Design, Singleton, Sharding, Split-Brain Resolution, Protocol and serialization… Akka Streams Source, Flow, Sink, Backpressure, Materialization, Graph, Operators,... © LLAAMA 2022
  • 5. Akka Background ● Actor Paradigm first described in a paper in 1973 by Carl Hewitt ● Akka is a Scala project that started in 2009, current version is 2.6.x ● Very much inspired from Erlang Actors ● Akka Actors were not typed until 2.6 ● Akka can be used in a Object Oriented as well as in a Functional Programming approach ● Scala engineers tend to favor the FP approach ● Java engineers tend to use the OO approach ● Used by ING, PayPal, Tesla, Netflix,... © LLAAMA 2022
  • 7. Java Concurrency Java and the JVM aimed from the very beginning at becoming the platforms for multi-processed, multithreaded and concurrent applications development but : Concurrency (and reasoning about it) is difficult and has always been! Low level constructs for concurrent programming are complex: happens-before relationship Monitor locks with synchronized volatile to synchronize writes/reads Java Memory Model is improving but still difficult to understand © LLAAMA 2022
  • 8. Bus CPU Architecture and Concurrent Programming CPU RAM Memory cache lines L1 L2 L.. CPU Memory cache lines L1 L2 L.. volatile Bus CPU RAM Memory cache lines L1 L2 L.. CPU Memory cache lines L1 L2 L.. N e t w o r k © LLAAMA 2022
  • 9. (Java) Concurrent Object-Oriented Programming is Broken Obj A Obj B Obj C methodA() return methodA() return Thread 1 Thread 2 © LLAAMA 2022
  • 11. Actors: a better approach of Concurrent Programming © LLAAMA 2022
  • 12. New Viewpoints No shared memory anymore read-write Think about inter-CPU communication (almost) the same way as network communication Think distributed as default Optimize when local Use immutable messages for concurrency © LLAAMA 2022
  • 13. Actor Model Contract An Actor is an abstraction for a computational entity that can: 1. send messages to other actors 2. create new actors 3. designate the behavior to be applied to the next message 4. Make local decisions, like modifying private state © LLAAMA 2022
  • 14. Akka Actors Happens-Before Rules 1. Actor send rule, send of message M happens before receive of message M by the same actor 2. Actor subsequent processing rule, processing of a message happens before processing of next message by same actor © LLAAMA 2022
  • 15. Actors, CPU architecture and concurrent programming ● Read-write paradigm is finished: there is no shared memory anymore ● Data exchange over the network is not different from inter-CPU communication ● Actor approach: keep state local and exchange immutable messages © LLAAMA 2022
  • 16. Fixing Concurrent Object-Oriented Programming with Actors Actor A Actor B Actor C message A Message D Message B Message C Process message A Process message B Message B processed after A © LLAAMA 2022
  • 17. Akka Actors ● Akka Actors are distributed by default, all functions are built for clusters of hundreds of machines and JVMs ● Upside-down: designed to be distributed, optimized when local (instead of generalization from local to remote) ● Interactions between actors happen through sending asynchronous immutable messages ● Messages must be immutable and serializable! - when local, JVM object references Are Actors what Object-Oriented Programming should be ? © LLAAMA 2022
  • 19. Akka Actor, Lightweight Construct Actor Mailbox Message C Message B Message A Incoming messages Behaviors State Execution context Processing next message Behavior Scheduled to process message akka://actor-syst/user/actor1 Children actors © LLAAMA 2022
  • 20. What does an Akka Actor contain? ● Actor Reference ○ A kind of proxy that enables to talk to the actor from anywhere while shielding Actor internal state ● State ○ Any state related to the application logic, hidden from outside, modified like it would own its own thread ● Behavior ○ Behaviors define what action should be performed for which received message ○ Behaviors change over time and every message processing should provide next behavior ○ Messages are statically typed ● Mailbox ○ An Actor has exactly one mailbox, a FIFO queue. ● Child Actors ○ An Actor can (should) have child actors to delegate tasks ● Supervision Strategy ○ What to do in case of failure ? restart x times - resume - stop, … © LLAAMA 2022
  • 22. Akka Actor System ● An ActorSystem is the home of a hierarchy of Actors ● An ActorSystem is a heavyweight construct ○ It might allocate many threads ○ There should be one per logical application ● The ActorSystem hierarchy enables splitting-up tasks in small and logical pieces ● The top-level Actor (given at construction) should be a supervisor © LLAAMA 2022
  • 23. Akka Actor Hierarchy Root guardian User guardian System guardian Created while creating the Actor System /user /system / /user/a /user/b /system/internalActor Internal to Akka User created hierarchy /user/a/aa /user/a/ab /user/a/ac context.spawn(behavior, “a”) context.spawn(behavior, “aa”) /deadLetters Receives messages that cannot reach destination /temp Guardian for short-lived system actors (e.g. to manage ask implementation) /remote For Remote references © LLAAMA 2022
  • 24. ● Actor references are available when actors are created ○ val greeter: ActorRef[HelloWorld.Greet] = context.spawn(HelloWorld(), “greeter”) ○ ActorRef<HelloWorld.Greet> greeter = context.spawn(HelloWorld.create(), “greeter” ● Actor references can be part of the message protocols ● Actor references correspond to real existing actors and are bound to their life-cycle ● Actor references can be obtained through the Receptionist ● Actor Paths are unique accessors, in form of path structures, from the actor system, through the actor hierarchy to the actor itself ○ akka://actorsystem/user/a/b/c (local) ○ akka://actorsystem@host.example.com:5555/user/a/b/c (remote) Akka Actor References and Addresses © LLAAMA 2022
  • 25. Call stack Traditional Actor based ● Non-blocking, message-driven tasks delegation amongst Threads ● Failures are part of the domain model ● Let it crash approach ● Response deadlines are handle with timeouts Main Thread Worker Thread Delegates some work Start task Task fails! Exception is only propagated to worker thread Main thread is not notified of the exception! © LLAAMA 2022
  • 26. Warnings ● In an actor, messages can be processed by different threads ● Don’t close over internal Actor state ● Avoid as much as possible blocking in actors, when unavoidable use a dedicated dispatcher ● Don’t try to control the order in which messages are processed in big systems ! © LLAAMA 2022
  • 28. Akka Actor Interactions Actor A Tell - Fire and Forget Actor B Message Actor A Tell - Request-Response Actor B Request Actor A Ask - Request-Response, 1-1, with timeout Actor B Response Request Response ● Tell is thread safe! ● Tell is asynchronous and returns directly ● Wrapper can be used to adapt protocol objects ● Ask needs timeout ● Many other constructs can be built up on top of Tell © LLAAMA 2022
  • 29. Akka Actor Protocol ● The protocol of an actor are the types the actor understands ○ It includes accepted messages as well as reply types ● Protocols can be defined for multiple actors, contributing to the application logic ● A Behavior is defined with a protocol type ● sealed trait and case class ● interface and static final class © LLAAMA 2022
  • 31. Akka Actor Context ActorContext provides the Actor with important features: ● spawn to create child actors (Actor contract) ● Access to own identity (self) ● Access to children ● messageAdapter (wrap messages to translate protocols) ● Access to ActorSystem of the actor ● Provides watch to register for Terminated notifications ● Logging © LLAAMA 2022
  • 32. Message Delivery Contract 1. At-most-once 2. Message ordering per sender-receiver pair © LLAAMA 2022
  • 33. “Let it crash!” © LLAAMA 2022
  • 34. Akka Fault Tolerance and Supervision “Shit happens” therefore apply the Let it crash approach ! Actor /user/a Actor /user/a/b Actor /user/a/b/c Database E.g. database call exception child child Define supervision strategy on Exception types restart, restart.withLimit, stop, resume A parent actor can decide to watch its child for termination Failures can climb the actor hierarchy with the Terminated signal, depending on application needs Expected exceptions should rather be included in the actors protocols! © LLAAMA 2022
  • 35. Group Router - ActorSystem - Node 4 Group Router - ActorSystem - Node 3 Group Router - ActorSystem - Node 2 Pool Router - ActorSystem - Node 1 Routers ● Distributing messages to set of delegated actors ● Enables parallel processing ● Pool Router: routees are router’s children, local ● Group Router: uses ServiceKey and Receptionist to find routee, clustered ○ Available routing strategies: Round Robin, Random, Consistent Hashing Routees, router’s children Router Messages Messages forwarded to children Group Router - ActorSystem - Node 1 Router Messages Forwarding strategy © LLAAMA 2022
  • 36. Akka Message Stashing ● Stashing enables buffering messages before they are passed on to an actor ● It is an important feature in Domain Driven Design and Sharding new Actor A Messages Datastore Building initial state Buffer Messages released once behavior changes (e.g. initialization completed) © LLAAMA 2022
  • 37. Akka Actor model and Finite-State Machine Mathematical model of computation, part of automata theory, a Finite-State Machine (FSM): ● Has a finite number of states ● Is in one state at a time ● Events change its state Actor A Behaviors Messages protocol FSM events as actor m essages FSM states as actor behaviors © LLAAMA 2022
  • 39. Akka Dispatchers ● MessageDispatcher is the engine at the heart of an ActorSystem ● Default MessageDispatcher implements a fork-join-executor ● Internal actors are protected by an internal dispatcher ● If needed, other dispatchers can be used (e.g. blocking, for I/O) MessageDispatcher ExecutionContext ExecutionContextExecutor Executor ExecutorService ForkJoinPool implements extends extends akka scala.concurrent java.util.concurrent © LLAAMA 2022
  • 40. Miscellaneous ● By default, every Actor has an unbounded Mailbox ○ Mailboxes can be configured ○ Other mailbox types are available ○ A custom mailbox can be provided ○ Akka doc - mailboxes ● Configuration ○ All configuration for Akka happens in instances of ActorSystem ○ Defaults come from reference.conf ○ Merging is done with application.conf, application.json, application.properties ○ Akka doc - configuration ● Testing ○ Asynchronous testing and Synchronous behavior testing ○ Akka doc - testing © LLAAMA 2022
  • 41. Akka: Top Down © LLAAMA 2022
  • 43. Reactive Systems Features Responsive Flexible Loosely-coupled Scalable Resilient and tolerant to failure Elastic Message-drive (asynchronous) Location transparency Failures as messages Back-pressure Non-blocking © LLAAMA 2022
  • 44. Distributed Computing with Akka Cluster © LLAAMA 2022
  • 46. What is an Akka Cluster? Multiple ActorSystems nodes joining to form one coordinated distributed application “Akka Cluster provides a fault-tolerant decentralized peer-to-peer based Cluster Membership Service with no single point of failure or single point of bottleneck. It does this using gossip protocols and an automatic failure detector.” (Akka doc - cluster specification) An actor An Actor System (a JVM) A cluster Node © LLAAMA 2022
  • 47. Akka Cluster Benefits ● Akka Cluster is the best way to build Akka Actor Systems with several hundreds actors ● Akka Cluster provides everything that is needed to build complex distributed systems ● Akka Cluster fits perfectly with the goal of Reactive systems as well as cloud Native systems ● Akka Cluster fits very well with platforms like Kubernetes ○ E.g. it can easily use K8s APIs for node discovery ○ It can use K8s lease feature for SBR ● There is rarely the need to use Akka remote anymore © LLAAMA 2022
  • 48. Akka Cluster is like a Beehive © LLAAMA 2022
  • 49. How to Build a Cluster? Challenges: ● Starting Cluster ● Cluster Membership ● Leadership ● Failure Detection ● Network Partition ● Roles ● Message Serialization © LLAAMA 2022
  • 50. Membership Node Member States ● Joining ● Weakly Up ● Up ● Leaving ● Down ● Removed ? © LLAAMA 2022
  • 51. Nodes States Transitions Joining Up Leaving Exiting Removed Weakly Up Down Join Leave Down Join, Leave, Down: User actions Weakly up: nodes waiting for gossip convergence to be reached Leader action Leader action Leader action L e a d e r a c t i o n © LLAAMA 2022
  • 52. Members Events Joining Up Leaving Exiting Removed Weakly Up Down ClusterEvent.MemberJoined ClusterEvent.MemberUp ClusterEvent.MemberExited ClusterEvent.MemberRemoved ClusterEvent.Unreachable: member not reachable by failure detector ClusterEvent.Reachable: member reachable again (after being unreachable) ClusterEvent.MemberPreparingForShutdown: member preparing for full cluster shutdown ClusterEvent.MemberReadyForShutdown: member is ready for full cluster shutdown © LLAAMA 2022
  • 53. “Anyone can start a rumor, but nobody can stop one.” © LLAAMA 2022
  • 54. Gossip Convergence ● Gossip Protocol (aka epidemic protocol) to spread out cluster state around nodes ● Random information dissemination, vector clock (node, counter, state) for partial ordering of events and causality violation detection ● Gossip message Serialization done with protobuf ● Gossip Convergence ○ when “one node can prove that the cluster state it is observing has been observed by all other nodes from the cluster” ○ Any unreachable node prevents Gossip Convergence ● Optimizations of the Gossip Protocol ○ Digests sent instead of full data ○ Changes to the algorithm depending on number of nodes Gossip © LLAAMA 2022
  • 55. Special Roles in Akka cluster ● Leader ○ Defined when (gossip) convergence is reached ○ No special node, just a role ○ Deterministic way to recognize it ○ Confirms states changes (e.g. joining -> up) ● Seed Nodes ○ Fixed entry points for nodes to join the cluster ○ No special other role ○ Can be defined in conf or as system.properties ○ First seed node needs to be available when starting the cluster ○ Cluster Bootstrap module enable automatic discovery of nodes application.conf: akka.cluster.seed-nodes = [ "akka://MyCluster@host1:2552", "akka://MyCluster@host2:2552"] JVM system properties: -Dakka.cluster.seed-nodes.0=akka://ClusterSystem@host1:2552 -Dakka.cluster.seed-nodes.1=akka://ClusterSystem@host2:2552 © LLAAMA 2022
  • 56. Failure Detector ● Detects unreachable nodes ● Decides how to react ● Uses the gossip protocol ● One node is monitored by N (default 5) other nodes ● An unreachable node will be quarantined and eventually downed and removed ● Failure detection is based on Phi Accrual Failure Detector ○ Distinguish expected latencies (network, garbage collections, etc.) from crashes ○ Based on regular heartbeat messages ○ Learns from previous failures ○ Calculates a likelihood (phi) of a node to be down ○ Threshold (acceptable-heartbeat-pause) can be defined by user © LLAAMA 2022
  • 57. Split Brain Machine crashes, unresponsiveness, network partitions cannot be distinguished from each other ! Only information: unanswered heartbeats messages © LLAAMA 2022
  • 58. Split Brain Resolution ● Decisions must be taken… ● There are multiple SBR strategies ● Most obvious strategy: Keep Majority ○ Downs the nodes if they are in the minority ● Static Quorum ● Lease ● Keep Oldest ● Down all © LLAAMA 2022
  • 59. Singleton Exactly one instance of an actor with a defined role in the whole cluster ● Goal: single point of responsibility ● Start with ClusterSingleton.init on all nodes with given role ● Singleton will run on oldest node ● Cluster ensures there is one and only one instance available ● ClusterSingleton.init provides a proxy ActorRef to the Singleton wherever it’s actually running ● Issues ○ Downing ○ Singletons can by definition become bottlenecks! © LLAAMA 2022
  • 60. Singleton Reference and Proxy Node crashes Singleton Actor A, running on oldest node Singleton Actor A is restarted on new oldest node M essage to A M e s s a g e t o A Proxy to route message to Actor A Proxy to route message to Actor A M essage to A New route © LLAAMA 2022
  • 62. Stateless (traditional) Applications Database Application API State Scaling Database Application State still here API on Load balancer Application cache © LLAAMA 2022
  • 63. CAP (Theorem) Any distributed system can only guarantee 2 out of 3 from Consistency, Availability and Partition tolerance 1. Consistency: read returns the most recent write 2. Availability: every request gets a response (maybe not latest write) 3. Partition tolerance: system keeps working even though some messages are lost ● Interpretation can be complicated as partitions will happen but rarely ● It sounds “binary”, but it’s continuous ! ● It determines design decisions that can vary depending on data or use cases Recommendation: Forget about CAP, instead reason about trade-offs between A and C ! A C P © LLAAMA 2022
  • 65. Domain-Driven Design, Reactive Architecture and Microservices ● Domain-Driven Design and Reactive Architecture are often used together because they are very compatible ● DDD main goal ○ Breaking down a large domain model into smaller pieces ○ Determine boundaries between different smaller domain ○ Define a good communication channel between domain experts and software engineers ● Reactive Microservices also try to define clear boundaries and roles © LLAAMA 2022
  • 66. Different Approaches to Domain-Driven Design Defining the Domain using the domain expert language Finding subdomains Boundaries around the domain and subdomains Analyze the Domain from an Event DDD perspective using the Subject-Verb-Object Notation © LLAAMA 2022
  • 68. Cluster for Stateful Application Stateful entities existing as actors in the cluster, they connect to the DB when needed Actors as API entry points Messages are routed to the right actor © LLAAMA 2022
  • 69. Akka Sharding for Stateful Applications One Actor = one DDD Entity Actor becomes a Consistency boundary for its data, enabling Strong Consistency Unique Entity Id through out the cluster Messages are addressed to the Entity Id Actor A1 managing Entity E1 Messages to E1 are routed to A1 Entity Actors are grouped in Shards A function gives the Shard Id (usually based on the Entity Id) Shards are grouped in Shard Regions Typically, one Shard Region per JVM for an Entity type Shard Coordinator, Singleton for message routing to the right Shards © LLAAMA 2022
  • 70. Sharding: Routing, Entities, Shards ● Entities Ids must be unique throughout the cluster ● A message to an entity contains its Id to enable routing ● A common pattern is an Envelope for a message: case class EntityEnvelope(entityId: String, message: Any) ● An Extractor function enables to extract the Entity Id ● To distribute Entities in Shards, a function needs to map Entity Ids to Shard Ids ● Example: Math.abs(entityId.hashCode % nbrOfShards)).toString() © LLAAMA 2022
  • 71. Akka Sharding ● Ensures strong Consistency with Single source of Truth (one Actor, one Entity) ● State is in the Actor, sync with the DB happens from the Actor ● Single threaded illusion (from Akka Actor) ● Contention problems can be mitigated in increasing the number of nodes or changing cluster topology ● Failures are isolated to actors or actor Systems Actor A Actor gets its state from the Database at startup DB updateState(value) message getState() message state 0 state 1 state 1 state 1 s t a t e 1 state 0 © LLAAMA 2022
  • 72. Akka Sharding Features Blocking ● Blocking calls can be wrapped into Futures ● Messages can be stashed (e.g. during processing of non-blocking database calls) ● Stashed messages are kept while an actor is restarting Passivation ● Automatically stop and removes Actor after a defined period without a message ● Messages are buffered during passivation ● Can be done manually (Passivate message) ● Passivation time can be optimized looking at memory footprint and/or actor being active Rebalancing ● Rebalancing happens when the number of nodes in a cluster is changed (failure, scaling) ● The Shard Coordinator initiates the rebalancing, redistributing the shards among nodes ● The cluster must be in an healthy state (no Unreachable nodes) ● During Rebalancing, messages to re-balanced shards are buffered © LLAAMA 2022
  • 73. Akka Cluster Miscellaneous ● Coordinated shutdown ○ Enables clean and stepwise shutdown of an ActorSystem ● Akka Management ○ Akka Discovery ■ Endpoint lookup delegation using some kind of discovery service (e.g. DNS) ○ Akka Cluster Bootstrap ○ Cluster HTTP Management ■ Extension library providing a REST API to query and manage an Akka cluster ■ Enables Health checks queries ● Akka Serverless ○ Fully managed Akka Stateful application environment ● Lightbend Subscription ○ Tools (e.g. Telemetry) and support directly from the Akka team © LLAAMA 2022
  • 74. Akka Cluster Miscellaneous ● Serialization ○ Akka for its internal messages uses protobuf ○ Jackson is a good choice but any other library or own code can be used ○ Obvious: Java serialization should be avoided !! ● Event-Sourcing ○ Storing events, not state ○ State is reconstructed from stored events ● Command Query Responsibility Segregation (CQRS) ○ Fits well with ES, but is also possible without it © LLAAMA 2022
  • 76. Introduction ● Why? ○ Some real big data can only be processed as streams ○ Always more data only exist as streams ● How? ○ Reactive Streams Specification (www.reactive-streams.org) ○ Asynchronous streams with back-pressure ○ Constructs: publisher | processor | subscriber ○ Reactive streams is a Service Provider Interface (SPI) ○ included in JDK9 ○ Akka Streams is a friendly user API that can use Reactive Streams Interfaces © LLAAMA 2022
  • 77. Akka Streams implementation Akka Streams big picture Akka Streams API End-users Akka Actors Reactive Streams* *https://www.reactive-streams.org/ © LLAAMA 2022
  • 78. Akka Streams ● Source: produces elements asynchronously ● Sink: receives elements ● Flow: processes elements (transformer) ● Back pressure included ● From Source to Flow to Sink ● Blueprints at every level © LLAAMA 2022
  • 79. Akka Streams, Backpressure Source Flow Sink Speed of stream is defined by consumers Consumers define the demand Backpressure is implemented in an non-blocking and asynchronous way! upstream downstream © LLAAMA 2022
  • 80. From Source to Sink source.via(flow) is a source flow.to(sink) is a sink Blue prints are executed with .run() which needs an ActorSystem for materialization Nothing happens with the graph blueprint until materialization (run) Nulls are not allowed! © LLAAMA 2022
  • 81. Source + Flow = New Source Flow + Sink = New Sink Source, Flow, Sink: Lego blocks Source Flow Sink Source Flow Sink © LLAAMA 2022
  • 82. Materializing ● A graph element can be used multiple times (think blueprint) ● Graph component are static until run is called ● Every run is a different materialization ● Run result is a materialized value, running graph = materializing ○ Resources allocations for a blueprint happens at materialization ■ Actors, threads, connections, etc. ● For every component, running => producing a materialized value ● But the graph produces only one materialized value Materialized values can be everything from nothing to any object! © LLAAMA 2022
  • 84. Graph DSL ● Fan-out ○ Broadcast ○ Balance ● Fan-in ○ Zip ○ ZipWith ○ Merge ○ Concat © LLAAMA 2022