SlideShare ist ein Scribd-Unternehmen logo
1 von 60
Downloaden Sie, um offline zu lesen
Introduction to
Concurrent programming
with
Akka Actors
https://github.com/shashankgowdal/introduction-to-concurrentprogrammin
g-with-akka
● Shashank L
● Senior Software engineer at Tellius
● Part time big data consultant and trainer
at datamantra.io
● www.shashankgowda.com
Concurrency
● Concurrency is the decomposability property of a
program, algorithm, or problem into order-independent or
partially-ordered components or units
● Structure a program by breaking it into pieces that can be
executed independently
● Co ordinating the execution of independent pieces
Concurrency and parallelism
● Concurrency is dealing with more than one thing at once
● Parallelism is doing more than one thing at once
Given tasks T1 and T2
T1 may be executed and finished before T2 or vice versa
(serial and sequential)
T1 and T2 may be executed alternately
(serial and concurrent)
T1 and T2 may be executed simultaneously at the same instant of time
(parallel and concurrent)
Concurrency is not parallelism
● Queues can be thought of
processed/threads
● Vending machine is
processor core
Moore’s law
The number of transistors on a chip doubles approximately
every 2 years.
~ Gordon Moore, 1965
Free performance lunch
● Over 30 years till 2000, performance gains were in 3
areas
○ Clock speed
○ Execution optimization
○ Caching
Old applications have always run significantly faster
even without being recompiled
Moore’s law
● Early 2000
○ Chips got big, transistors were added aggressively
○ Clock cycle was almost unchanged
○ Heat dissipation issues
○ Power consumption
○ Current leakage
Moore’s law
Birth of Multicore processors
● Multi-core processors
● Handle multiple operations in parallel
● CPU speeds are not increasing drastically anytime soon
● No free performance lunch without significant redesign
● Performance gains in new chips will be fueled by three main
approaches
○ Hyperthreading
○ Multicore
○ cache
Free performance lunch is over
● Concurrency revolution
● Build multi core aware applications
● Operate in concurrent fashion
● Scale horizontally
Types of Concurrency
● Shared state concurrency
● Software transactional concurrency
● Message passing concurrency
Shared state concurrency
● Shared mutability
● Memory blocks can be access simultaneously by multiple
programs
● Race condition
● Dead locks
● Blocking calls
com.shashank.akka.basic.ThreadUnsafeBuffer
Software transactional memory
● Shared, managed mutability
● Objects can be mutated only within a transaction
● STM keeps track of changes made in a particular
● Once transaction is completed, it validates and commits the
results
● Validation fails when others have committed the result
● Transaction will be repeated with the updated value.
Message passing concurrency
● Isolated mutability
● Mutable objects are isolated from the threads
● Threads will not be able to directly access the objects
● Access to the mutable objects is done through messages
● Sending message can be asynchronous and nonblocking
Joe Armstrong’s words
The world is concurrent. It is parallel. Pure message-passing
concurrency is what we do all the time.
Imagine a group of people. They have no shared state.
I have my private memory (in my head) and you have yours. It is NOT
shared. We communicate by passing messages (sound and light
waves). We update our private state based on the reception of these
messages.
That’s Concurrency Oriented Programming in a nutshell.
Actors
● From a 1973 paper, written by Carl Hewitt
● First major adoption was done by Ericsson in 80s
○ Invented Erlang and open sourced in 90s
○ Built a distributed, concurrent, and fault-tolerant telcom
system which has 99.9999999% uptime
● Implements Message-Passing or Isolated mutability based
concurrency
Actor model
● Share Nothing
○ No need to synchronize.
● Isolated. Lightweight event-based Processes
○ ~ 6.5m on 4GB RAM
● Communicate through Messages
○ Asynchronous and Nonblocking
○ Messages are immutable
● Each actor has a mailbox (message queue)
● Scalable and fast
When an Actor receives messages
● Creates new actors
● Send message to other actors/self
● Designate how it should handle the next
message
Akka
● Founded by Jonas Boner and now part of Typesafe stack
● Actor implementation on JVM - Scala
○ Java API and Scala API
● Provides a framework to create & manage actors
● Backed by JVM Thread model
● Akka provides a mailbox for each actor
○ in-memory queue to stage messages
● Clients can send messages synchronously or
asynchronously
● Actor receives messages and respond to clients
Actor System
● Actors are created within this context
● Fundamental unit that embodies:
Processing, storage and communication
● Manage shared facilities:
scheduling, logging, configuration etc
● Can have many per JVM with different configs
● Can contain millions of actors
ACTOR OPERATIONS
DEFINE
class LoggerActor extends Actor {
def receive = {
case x:String => println(x)
case _ => println("huh?")
}
}
CREATE
val system = ActorSystem("LogSystem")
val loggerActor = system.actorOf(
Props[LoggerActor],
name = "loggeractor")
SEND
● Fire and forget
○ Async
○ No expected reply
○ ! or tell()
● Send and Receive
○ Async
○ Expects reply (Future)
○ ? or ask()
SEND - Fire and forget
//No need to return anything in the receive method
def receive = {
case x:Int => println(x)
}
//Send the message and don’t wait for the reply
actorRef ! (100)
com.shashank.akka.basic.SimpleActor
SEND - Send and receive
//Use the sender method to get the actorRef of the sender
def receive = {
case "hello" =>
sender() ! ("hello how are you?")
}
//Send the message and get a future back, we can wait for that future to be successful to get
the result
val responseFuture = bufferActor ? ("hello")
responseFuture onSuccess{
case response => println(response)
}
com.shashank.akka.basic.ThreadSafeBuffer
ActorRef
ActorRef Mailbox
Actor
Instance
Points to Actor
Delivers to Mailbox
Mailbox
ActorRef Mailbox
Actor
Instance
Invokes Actor Instance with Message
Runs on dispatcher - abstracts threading
ActorInstance
ActorRef Mailbox
Actor
Instance
Your code here
BECOME
● Dynamically redefines actor behaviour
● Reactively triggered by message
● Like changing an interface or implementation on-the-fly
com.shashank.akka.basic.ThreadSafeBufferWithLimit
How error handling is done in Java
● You are given a single thread of control
● If this thread blows up, you are screwed
● So you need to do all explicit error handling within this single
thread
● Errors do not propagate between threads
● This leads to Defensive programming with
○ Error handling tangled with business logic
○ Error handling scattered all over the code
SUPERVISE
● Manage another actor’s failure
● Supervisor receives notification
and it can react upon failure
● Every actor has a default
supervisor strategy
○ Can be overridden
SUPERVISE
● On Failure, Supervisor decides what happens next
○ Resume child and keep the internal state
○ Restart child and wipe the internal state
○ Stop child permanently
○ Stop itself and escalate the error
● OneForOneStrategy affects only failed child
● AllForOneStrategy affects all the children
com.shashank.akka.supervision.BasicSupervision
SUPERVISE - OneForOneStrategy
SUPERVISE - AllForOneStrategy
Actor can form a hierarchy
Actor can form a hierarchy
Name resolution - like a file system
Stopping Actors
//Shutting down the Actor System
system.shutdown()
//Sending PoisonPill message
actorRef ? (PoisonPill)
//Shutting the actor from inside the actor
context.stop(self)
//Shutting another actor from inside the actor
context.stop(actorRef)
com.shashank.akka.basic.ShuttingDown
Message delivery
● At most once - No guaranteed delivery
● Cheapest
● Highest performance
● Least implementation overhead
● It can be done in a fire-and-forget fashion without keeping
state at the sending end or in the transport mechanism
● At least once - Akka persistence
Message ordering
● Message ordering per sender-receiver pair
Dispatcher
● Controls and coordinates the message dispatching to the
actors
● Make sure that the resources are optimized and messages
are processed as fast as possible
● Dispatch policies that can be customized(number of cores or
memory available)
Dispatcher
● Runways - Threads
● Airlines - Mailboxes
● ATC - Dispatcher or
Dispatch policy
Dispatcher
Dispatcher and Mailboxes
Types of dispatchers
● Dispatcher
● Pinned dispatcher
● Balancing dispatcher
● Calling thread dispatcher
Mailbox implementations
● Unbounded mailbox
● Bounded mailbox
● Unbounded priority mailbox
● Bounded priority mailbox
● Entity that directs the message from source to the destination actor
● Router is also a type of actor
● Does not make use of the store-and-forward mechanism
● Routers dispatch the incoming messages directly to the destination
actor’s mailboxes
system.actorOf(Props[MyActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))
Routers
● Round robin router
It routes the incoming messages in a circular order to all its routees
● Random router
It randomly selects a routee and routes the message to the same
● Smallest mailbox router
It identifies the actor with the least number of messages in its mailbox and routes the
message to the same
● Broadcast router
It forwards the same message to all the routees
● Scatter gather first completed router
It forwards the message to all its routees as a future, then whichever routee actor responds
back, it takes the results and sends them back to the caller
com.shashank.akka.basic.Router
Types of Routers
def preStart(): Unit = ()
def postStop(): Unit = ()
def preRestart(reason: Throwable, message: Option[Any]): Unit = {
context.children foreach { child ⇒
context.stop(child)
}
postStop()
}
def postRestart(reason: Throwable): Unit = {
preStart()
}
Actor API
● A path is a place that can be occupied by a living actor
● When actorOf() is called it assigns an incarnation of the
actor described by the passed Props to the given path
● An ActorRef always represents an incarnation (path and
UID) not just a given path. Another actor created later with
the same name will have a different ActorRef
// will look up this absolute path
context.actorSelection("/user/serviceA/aggregator")
// will look up sibling beneath same supervisor
context.actorSelection("../joe")
Actor Path
Actor life-cycle
● Consists of 2 parts
○ A public interface
○ An implementation
● Similar to Interface and implements in Java, Traits in
Scala
● TypedActors have a static contract
● Some features like become is not available
● Bridging between actor systems (the “inside”) and
non-actor code (the “outside”)
Typed actors
def squareDontCare(i: Int): Unit //fire-forget
def square(i: Int): Future[Int] //non-blocking send-request-reply
def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply
def squareNow(i: Int): Int //blocking send-request-reply
@throws(classOf[Exception]) //declare it or you will get an UndeclaredThrowableException
def squareTry(i: Int): Int //blocking send-request-reply with possible exception
//Creating an actorRef of a TypedActor
val mySquarer: Squarer = TypedActor(system).typedActorOf(TypedProps[SquarerImpl]())
com.shashank.akka.basic.TypedActorExample
Typed actors
● Dedicated module akka-testkit for supporting tests
● Testing isolated pieces of code without involving the actor
model, meaning without multiple threads
● Testing (multiple) encapsulated actors including
multi-threaded scheduling
● Integration with ScalaTest to write more readable
assertions
com.shashank.akka.supervision.SupervisorTestSpec
Actor TestKit
● All configuration for Akka is held within instances of ActorSystem
● ActorSystem is the only consumer of configuration information
● Parse the configuration file
val config =
ConfigFactory.parseFile(new File("src/main/resources/router/application.conf"))
val system = ActorSystem("NameOfActorSystem", config)
● Read the configuration files automatically from ClassLoader
val config = ConfigFactory.defaultReference()
val system = ActorSystem("NameOfActorSystem", config)
● Parse all application.conf, application.json and application.properties
● akka.log-config-on-start
Configuration - TypeSafe config
● Distributed by default
● Messages should be and are serializable
● ActorRefs are serializable
● Probability of the message reaching is higher than local
JVM
● No separate remoting layer in Akka. Purely driven by
config
● Communication between involved system is symmetric
● Not possible to create pure client-server setups
Remote Actors
Remote Actors
com.shashank.akka.remote
In different scenarios Actors can be alternatives for:
● A thread
● An object instance or component
● A callback or listener
● A singleton or service
● A router, load-balancer or pool
● An out-of-service process
● A Finite State machine (FSM)
What can I use Actors for?
● http://doc.akka.io/docs/akka/2.4/scala
● http://blog.madhukaraphatak.com/simple-akka-remote-example/
● https://www.youtube.com/watch?v=W_l57iyn4mU
Programming with Actors by Venkat
● https://www.slideshare.net/jboner/introducing-akka
● https://www.slideshare.net/RoyRusso1/introduction-to-akka-atlanta-ja
va-users-group
● https://blog.golang.org/concurrency-is-not-parallelism
References

Weitere ähnliche Inhalte

Was ist angesagt?

Exploratory Data Analysis in Spark
Exploratory Data Analysis in SparkExploratory Data Analysis in Spark
Exploratory Data Analysis in Sparkdatamantra
 
Understanding Implicits in Scala
Understanding Implicits in ScalaUnderstanding Implicits in Scala
Understanding Implicits in Scaladatamantra
 
Migrating to Spark 2.0 - Part 2
Migrating to Spark 2.0 - Part 2Migrating to Spark 2.0 - Part 2
Migrating to Spark 2.0 - Part 2datamantra
 
Building end to end streaming application on Spark
Building end to end streaming application on SparkBuilding end to end streaming application on Spark
Building end to end streaming application on Sparkdatamantra
 
Productionalizing Spark ML
Productionalizing Spark MLProductionalizing Spark ML
Productionalizing Spark MLdatamantra
 
Improving Mobile Payments With Real time Spark
Improving Mobile Payments With Real time SparkImproving Mobile Payments With Real time Spark
Improving Mobile Payments With Real time Sparkdatamantra
 
A Tool For Big Data Analysis using Apache Spark
A Tool For Big Data Analysis using Apache SparkA Tool For Big Data Analysis using Apache Spark
A Tool For Big Data Analysis using Apache Sparkdatamantra
 
Productionalizing a spark application
Productionalizing a spark applicationProductionalizing a spark application
Productionalizing a spark applicationdatamantra
 
Structured Streaming with Kafka
Structured Streaming with KafkaStructured Streaming with Kafka
Structured Streaming with Kafkadatamantra
 
Introduction to Spark 2.0 Dataset API
Introduction to Spark 2.0 Dataset APIIntroduction to Spark 2.0 Dataset API
Introduction to Spark 2.0 Dataset APIdatamantra
 
Core Services behind Spark Job Execution
Core Services behind Spark Job ExecutionCore Services behind Spark Job Execution
Core Services behind Spark Job Executiondatamantra
 
Introduction to Flink Streaming
Introduction to Flink StreamingIntroduction to Flink Streaming
Introduction to Flink Streamingdatamantra
 
Multi Source Data Analysis using Spark and Tellius
Multi Source Data Analysis using Spark and TelliusMulti Source Data Analysis using Spark and Tellius
Multi Source Data Analysis using Spark and Telliusdatamantra
 
Understanding time in structured streaming
Understanding time in structured streamingUnderstanding time in structured streaming
Understanding time in structured streamingdatamantra
 
Building real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark StreamingBuilding real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark Streamingdatamantra
 
Introduction to dataset
Introduction to datasetIntroduction to dataset
Introduction to datasetdatamantra
 
Building scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTPBuilding scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTPdatamantra
 
Anatomy of Data Source API : A deep dive into Spark Data source API
Anatomy of Data Source API : A deep dive into Spark Data source APIAnatomy of Data Source API : A deep dive into Spark Data source API
Anatomy of Data Source API : A deep dive into Spark Data source APIdatamantra
 
Introduction to Structured Streaming
Introduction to Structured StreamingIntroduction to Structured Streaming
Introduction to Structured Streamingdatamantra
 
Spark architecture
Spark architectureSpark architecture
Spark architecturedatamantra
 

Was ist angesagt? (20)

Exploratory Data Analysis in Spark
Exploratory Data Analysis in SparkExploratory Data Analysis in Spark
Exploratory Data Analysis in Spark
 
Understanding Implicits in Scala
Understanding Implicits in ScalaUnderstanding Implicits in Scala
Understanding Implicits in Scala
 
Migrating to Spark 2.0 - Part 2
Migrating to Spark 2.0 - Part 2Migrating to Spark 2.0 - Part 2
Migrating to Spark 2.0 - Part 2
 
Building end to end streaming application on Spark
Building end to end streaming application on SparkBuilding end to end streaming application on Spark
Building end to end streaming application on Spark
 
Productionalizing Spark ML
Productionalizing Spark MLProductionalizing Spark ML
Productionalizing Spark ML
 
Improving Mobile Payments With Real time Spark
Improving Mobile Payments With Real time SparkImproving Mobile Payments With Real time Spark
Improving Mobile Payments With Real time Spark
 
A Tool For Big Data Analysis using Apache Spark
A Tool For Big Data Analysis using Apache SparkA Tool For Big Data Analysis using Apache Spark
A Tool For Big Data Analysis using Apache Spark
 
Productionalizing a spark application
Productionalizing a spark applicationProductionalizing a spark application
Productionalizing a spark application
 
Structured Streaming with Kafka
Structured Streaming with KafkaStructured Streaming with Kafka
Structured Streaming with Kafka
 
Introduction to Spark 2.0 Dataset API
Introduction to Spark 2.0 Dataset APIIntroduction to Spark 2.0 Dataset API
Introduction to Spark 2.0 Dataset API
 
Core Services behind Spark Job Execution
Core Services behind Spark Job ExecutionCore Services behind Spark Job Execution
Core Services behind Spark Job Execution
 
Introduction to Flink Streaming
Introduction to Flink StreamingIntroduction to Flink Streaming
Introduction to Flink Streaming
 
Multi Source Data Analysis using Spark and Tellius
Multi Source Data Analysis using Spark and TelliusMulti Source Data Analysis using Spark and Tellius
Multi Source Data Analysis using Spark and Tellius
 
Understanding time in structured streaming
Understanding time in structured streamingUnderstanding time in structured streaming
Understanding time in structured streaming
 
Building real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark StreamingBuilding real time Data Pipeline using Spark Streaming
Building real time Data Pipeline using Spark Streaming
 
Introduction to dataset
Introduction to datasetIntroduction to dataset
Introduction to dataset
 
Building scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTPBuilding scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTP
 
Anatomy of Data Source API : A deep dive into Spark Data source API
Anatomy of Data Source API : A deep dive into Spark Data source APIAnatomy of Data Source API : A deep dive into Spark Data source API
Anatomy of Data Source API : A deep dive into Spark Data source API
 
Introduction to Structured Streaming
Introduction to Structured StreamingIntroduction to Structured Streaming
Introduction to Structured Streaming
 
Spark architecture
Spark architectureSpark architecture
Spark architecture
 

Andere mochten auch

Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in Scaladatamantra
 
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 actorsShashank L
 
Levelling up in Akka
Levelling up in AkkaLevelling up in Akka
Levelling up in AkkaSigmoid
 
An Updated Performance Comparison of Virtual Machines and Linux Containers
An Updated Performance Comparison of Virtual Machines and Linux ContainersAn Updated Performance Comparison of Virtual Machines and Linux Containers
An Updated Performance Comparison of Virtual Machines and Linux ContainersKento Aoyama
 
Demystifying datastores
Demystifying datastoresDemystifying datastores
Demystifying datastoresvishnu rao
 
Golang 101 (Concurrency vs Parallelism)
Golang 101 (Concurrency vs Parallelism)Golang 101 (Concurrency vs Parallelism)
Golang 101 (Concurrency vs Parallelism)Pramesti Hatta K.
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPFAlex Maestretti
 
Introduction to Akka
Introduction to AkkaIntroduction to Akka
Introduction to AkkaJohan Andrén
 
Introduction of Mesosphere DCOS
Introduction of Mesosphere DCOSIntroduction of Mesosphere DCOS
Introduction of Mesosphere DCOSDeughyeon Chang
 
Сергей Радзыняк ".NET Microservices in Real Life"
Сергей Радзыняк ".NET Microservices in Real Life"Сергей Радзыняк ".NET Microservices in Real Life"
Сергей Радзыняк ".NET Microservices in Real Life"Fwdays
 
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCorley S.r.l.
 
Introduction To Anypoint CloudHub With Mulesoft
Introduction To Anypoint CloudHub With MulesoftIntroduction To Anypoint CloudHub With Mulesoft
Introduction To Anypoint CloudHub With MulesoftJitendra Bafna
 
Redis原生命令介绍
Redis原生命令介绍Redis原生命令介绍
Redis原生命令介绍Edward Lee
 
Running .NET on Docker
Running .NET on DockerRunning .NET on Docker
Running .NET on DockerBen Hall
 
Magnetic door lock using arduino
Magnetic door lock using arduinoMagnetic door lock using arduino
Magnetic door lock using arduinoSravanthi Sinha
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv larsgeorge
 
Apache spark with Machine learning
Apache spark with Machine learningApache spark with Machine learning
Apache spark with Machine learningdatamantra
 

Andere mochten auch (20)

Functional programming in Scala
Functional programming in ScalaFunctional programming in Scala
Functional programming in Scala
 
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
 
Levelling up in Akka
Levelling up in AkkaLevelling up in Akka
Levelling up in Akka
 
An Updated Performance Comparison of Virtual Machines and Linux Containers
An Updated Performance Comparison of Virtual Machines and Linux ContainersAn Updated Performance Comparison of Virtual Machines and Linux Containers
An Updated Performance Comparison of Virtual Machines and Linux Containers
 
Sensu Monitoring
Sensu MonitoringSensu Monitoring
Sensu Monitoring
 
Demystifying datastores
Demystifying datastoresDemystifying datastores
Demystifying datastores
 
Redis overview
Redis overviewRedis overview
Redis overview
 
Golang 101 (Concurrency vs Parallelism)
Golang 101 (Concurrency vs Parallelism)Golang 101 (Concurrency vs Parallelism)
Golang 101 (Concurrency vs Parallelism)
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
 
Introduction to Akka
Introduction to AkkaIntroduction to Akka
Introduction to Akka
 
Introduction of Mesosphere DCOS
Introduction of Mesosphere DCOSIntroduction of Mesosphere DCOS
Introduction of Mesosphere DCOS
 
Сергей Радзыняк ".NET Microservices in Real Life"
Сергей Радзыняк ".NET Microservices in Real Life"Сергей Радзыняк ".NET Microservices in Real Life"
Сергей Радзыняк ".NET Microservices in Real Life"
 
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented applicationCloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
CloudConf2017 - Deploy, Scale & Coordinate a microservice oriented application
 
Introduction To Anypoint CloudHub With Mulesoft
Introduction To Anypoint CloudHub With MulesoftIntroduction To Anypoint CloudHub With Mulesoft
Introduction To Anypoint CloudHub With Mulesoft
 
Redis原生命令介绍
Redis原生命令介绍Redis原生命令介绍
Redis原生命令介绍
 
Running .NET on Docker
Running .NET on DockerRunning .NET on Docker
Running .NET on Docker
 
Magnetic door lock using arduino
Magnetic door lock using arduinoMagnetic door lock using arduino
Magnetic door lock using arduino
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
 
LCache DrupalCon Dublin 2016
LCache DrupalCon Dublin 2016LCache DrupalCon Dublin 2016
LCache DrupalCon Dublin 2016
 
Apache spark with Machine learning
Apache spark with Machine learningApache spark with Machine learning
Apache spark with Machine learning
 

Ähnlich wie Introduction to concurrent programming with akka actors

Java Threads: Lightweight Processes
Java Threads: Lightweight ProcessesJava Threads: Lightweight Processes
Java Threads: Lightweight ProcessesIsuru Perera
 
Programming with Threads in Java
Programming with Threads in JavaProgramming with Threads in Java
Programming with Threads in Javakoji lin
 
Reactive Software Systems
Reactive Software SystemsReactive Software Systems
Reactive Software SystemsBehrad Zari
 
Building stateful systems with akka cluster sharding
Building stateful systems with akka cluster shardingBuilding stateful systems with akka cluster sharding
Building stateful systems with akka cluster shardingKnoldus Inc.
 
Multithreading programming in java
Multithreading programming in javaMultithreading programming in java
Multithreading programming in javaElizabeth alexander
 
Dive into Akka Actors
Dive into Akka ActorsDive into Akka Actors
Dive into Akka ActorsKnoldus Inc.
 
Apache Airflow | What Is An Operator
Apache Airflow | What Is An OperatorApache Airflow | What Is An Operator
Apache Airflow | What Is An OperatorMarc Lamberti
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debuggerIulian Dragos
 
Akka-intro-training-public.pdf
Akka-intro-training-public.pdfAkka-intro-training-public.pdf
Akka-intro-training-public.pdfBernardDeffarges
 
Concurrent/ parallel programming
Concurrent/ parallel programmingConcurrent/ parallel programming
Concurrent/ parallel programmingTausun Akhtary
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdprat0ham
 
Multithreading in Scala
Multithreading in Scala Multithreading in Scala
Multithreading in Scala Knoldus Inc.
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017Petr Zapletal
 
Multi threading
Multi threadingMulti threading
Multi threadinggndu
 
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency ProgrammingConcurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency ProgrammingSachintha Gunasena
 
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptxsandhyakiran10
 

Ähnlich wie Introduction to concurrent programming with akka actors (20)

Java Threads: Lightweight Processes
Java Threads: Lightweight ProcessesJava Threads: Lightweight Processes
Java Threads: Lightweight Processes
 
Programming with Threads in Java
Programming with Threads in JavaProgramming with Threads in Java
Programming with Threads in Java
 
Actors in the Small
Actors in the SmallActors in the Small
Actors in the Small
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
 
Reactive Software Systems
Reactive Software SystemsReactive Software Systems
Reactive Software Systems
 
Building stateful systems with akka cluster sharding
Building stateful systems with akka cluster shardingBuilding stateful systems with akka cluster sharding
Building stateful systems with akka cluster sharding
 
Multithreading programming in java
Multithreading programming in javaMultithreading programming in java
Multithreading programming in java
 
Dive into Akka Actors
Dive into Akka ActorsDive into Akka Actors
Dive into Akka Actors
 
Apache Airflow | What Is An Operator
Apache Airflow | What Is An OperatorApache Airflow | What Is An Operator
Apache Airflow | What Is An Operator
 
Rethinking the debugger
Rethinking the debuggerRethinking the debugger
Rethinking the debugger
 
Introdução à Elixir
Introdução à ElixirIntrodução à Elixir
Introdução à Elixir
 
Akka-intro-training-public.pdf
Akka-intro-training-public.pdfAkka-intro-training-public.pdf
Akka-intro-training-public.pdf
 
Concurrent/ parallel programming
Concurrent/ parallel programmingConcurrent/ parallel programming
Concurrent/ parallel programming
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rd
 
Linux Internals - Part III
Linux Internals - Part IIILinux Internals - Part III
Linux Internals - Part III
 
Multithreading in Scala
Multithreading in Scala Multithreading in Scala
Multithreading in Scala
 
Reactive mistakes - ScalaDays Chicago 2017
Reactive mistakes -  ScalaDays Chicago 2017Reactive mistakes -  ScalaDays Chicago 2017
Reactive mistakes - ScalaDays Chicago 2017
 
Multi threading
Multi threadingMulti threading
Multi threading
 
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency ProgrammingConcurrency Programming in Java - 01 - Introduction to Concurrency Programming
Concurrency Programming in Java - 01 - Introduction to Concurrency Programming
 
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx
8.-OBJECT-ORIENTED-PROGRAMMING-USING-JAVA-Multithreading.pptx
 

Mehr von datamantra

State management in Structured Streaming
State management in Structured StreamingState management in Structured Streaming
State management in Structured Streamingdatamantra
 
Spark on Kubernetes
Spark on KubernetesSpark on Kubernetes
Spark on Kubernetesdatamantra
 
Understanding transactional writes in datasource v2
Understanding transactional writes in  datasource v2Understanding transactional writes in  datasource v2
Understanding transactional writes in datasource v2datamantra
 
Optimizing S3 Write-heavy Spark workloads
Optimizing S3 Write-heavy Spark workloadsOptimizing S3 Write-heavy Spark workloads
Optimizing S3 Write-heavy Spark workloadsdatamantra
 
Spark stack for Model life-cycle management
Spark stack for Model life-cycle managementSpark stack for Model life-cycle management
Spark stack for Model life-cycle managementdatamantra
 
Testing Spark and Scala
Testing Spark and ScalaTesting Spark and Scala
Testing Spark and Scaladatamantra
 
Scalable Spark deployment using Kubernetes
Scalable Spark deployment using KubernetesScalable Spark deployment using Kubernetes
Scalable Spark deployment using Kubernetesdatamantra
 
Telco analytics at scale
Telco analytics at scaleTelco analytics at scale
Telco analytics at scaledatamantra
 
Platform for Data Scientists
Platform for Data ScientistsPlatform for Data Scientists
Platform for Data Scientistsdatamantra
 
Real time ETL processing using Spark streaming
Real time ETL processing using Spark streamingReal time ETL processing using Spark streaming
Real time ETL processing using Spark streamingdatamantra
 
Anatomy of Spark SQL Catalyst - Part 2
Anatomy of Spark SQL Catalyst - Part 2Anatomy of Spark SQL Catalyst - Part 2
Anatomy of Spark SQL Catalyst - Part 2datamantra
 
Anatomy of spark catalyst
Anatomy of spark catalystAnatomy of spark catalyst
Anatomy of spark catalystdatamantra
 

Mehr von datamantra (12)

State management in Structured Streaming
State management in Structured StreamingState management in Structured Streaming
State management in Structured Streaming
 
Spark on Kubernetes
Spark on KubernetesSpark on Kubernetes
Spark on Kubernetes
 
Understanding transactional writes in datasource v2
Understanding transactional writes in  datasource v2Understanding transactional writes in  datasource v2
Understanding transactional writes in datasource v2
 
Optimizing S3 Write-heavy Spark workloads
Optimizing S3 Write-heavy Spark workloadsOptimizing S3 Write-heavy Spark workloads
Optimizing S3 Write-heavy Spark workloads
 
Spark stack for Model life-cycle management
Spark stack for Model life-cycle managementSpark stack for Model life-cycle management
Spark stack for Model life-cycle management
 
Testing Spark and Scala
Testing Spark and ScalaTesting Spark and Scala
Testing Spark and Scala
 
Scalable Spark deployment using Kubernetes
Scalable Spark deployment using KubernetesScalable Spark deployment using Kubernetes
Scalable Spark deployment using Kubernetes
 
Telco analytics at scale
Telco analytics at scaleTelco analytics at scale
Telco analytics at scale
 
Platform for Data Scientists
Platform for Data ScientistsPlatform for Data Scientists
Platform for Data Scientists
 
Real time ETL processing using Spark streaming
Real time ETL processing using Spark streamingReal time ETL processing using Spark streaming
Real time ETL processing using Spark streaming
 
Anatomy of Spark SQL Catalyst - Part 2
Anatomy of Spark SQL Catalyst - Part 2Anatomy of Spark SQL Catalyst - Part 2
Anatomy of Spark SQL Catalyst - Part 2
 
Anatomy of spark catalyst
Anatomy of spark catalystAnatomy of spark catalyst
Anatomy of spark catalyst
 

Kürzlich hochgeladen

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
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
 

Kürzlich hochgeladen (20)

[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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...
 
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
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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
 

Introduction to concurrent programming with akka actors

  • 1. Introduction to Concurrent programming with Akka Actors https://github.com/shashankgowdal/introduction-to-concurrentprogrammin g-with-akka
  • 2. ● Shashank L ● Senior Software engineer at Tellius ● Part time big data consultant and trainer at datamantra.io ● www.shashankgowda.com
  • 3. Concurrency ● Concurrency is the decomposability property of a program, algorithm, or problem into order-independent or partially-ordered components or units ● Structure a program by breaking it into pieces that can be executed independently ● Co ordinating the execution of independent pieces
  • 4. Concurrency and parallelism ● Concurrency is dealing with more than one thing at once ● Parallelism is doing more than one thing at once Given tasks T1 and T2 T1 may be executed and finished before T2 or vice versa (serial and sequential) T1 and T2 may be executed alternately (serial and concurrent) T1 and T2 may be executed simultaneously at the same instant of time (parallel and concurrent)
  • 5. Concurrency is not parallelism ● Queues can be thought of processed/threads ● Vending machine is processor core
  • 6. Moore’s law The number of transistors on a chip doubles approximately every 2 years. ~ Gordon Moore, 1965
  • 7. Free performance lunch ● Over 30 years till 2000, performance gains were in 3 areas ○ Clock speed ○ Execution optimization ○ Caching Old applications have always run significantly faster even without being recompiled
  • 8. Moore’s law ● Early 2000 ○ Chips got big, transistors were added aggressively ○ Clock cycle was almost unchanged ○ Heat dissipation issues ○ Power consumption ○ Current leakage
  • 10. Birth of Multicore processors ● Multi-core processors ● Handle multiple operations in parallel ● CPU speeds are not increasing drastically anytime soon ● No free performance lunch without significant redesign ● Performance gains in new chips will be fueled by three main approaches ○ Hyperthreading ○ Multicore ○ cache
  • 11. Free performance lunch is over ● Concurrency revolution ● Build multi core aware applications ● Operate in concurrent fashion ● Scale horizontally
  • 12. Types of Concurrency ● Shared state concurrency ● Software transactional concurrency ● Message passing concurrency
  • 13. Shared state concurrency ● Shared mutability ● Memory blocks can be access simultaneously by multiple programs ● Race condition ● Dead locks ● Blocking calls com.shashank.akka.basic.ThreadUnsafeBuffer
  • 14. Software transactional memory ● Shared, managed mutability ● Objects can be mutated only within a transaction ● STM keeps track of changes made in a particular ● Once transaction is completed, it validates and commits the results ● Validation fails when others have committed the result ● Transaction will be repeated with the updated value.
  • 15. Message passing concurrency ● Isolated mutability ● Mutable objects are isolated from the threads ● Threads will not be able to directly access the objects ● Access to the mutable objects is done through messages ● Sending message can be asynchronous and nonblocking
  • 16. Joe Armstrong’s words The world is concurrent. It is parallel. Pure message-passing concurrency is what we do all the time. Imagine a group of people. They have no shared state. I have my private memory (in my head) and you have yours. It is NOT shared. We communicate by passing messages (sound and light waves). We update our private state based on the reception of these messages. That’s Concurrency Oriented Programming in a nutshell.
  • 17. Actors ● From a 1973 paper, written by Carl Hewitt ● First major adoption was done by Ericsson in 80s ○ Invented Erlang and open sourced in 90s ○ Built a distributed, concurrent, and fault-tolerant telcom system which has 99.9999999% uptime ● Implements Message-Passing or Isolated mutability based concurrency
  • 18. Actor model ● Share Nothing ○ No need to synchronize. ● Isolated. Lightweight event-based Processes ○ ~ 6.5m on 4GB RAM ● Communicate through Messages ○ Asynchronous and Nonblocking ○ Messages are immutable ● Each actor has a mailbox (message queue) ● Scalable and fast
  • 19. When an Actor receives messages ● Creates new actors ● Send message to other actors/self ● Designate how it should handle the next message
  • 20. Akka ● Founded by Jonas Boner and now part of Typesafe stack ● Actor implementation on JVM - Scala ○ Java API and Scala API ● Provides a framework to create & manage actors ● Backed by JVM Thread model ● Akka provides a mailbox for each actor ○ in-memory queue to stage messages ● Clients can send messages synchronously or asynchronously ● Actor receives messages and respond to clients
  • 21.
  • 22. Actor System ● Actors are created within this context ● Fundamental unit that embodies: Processing, storage and communication ● Manage shared facilities: scheduling, logging, configuration etc ● Can have many per JVM with different configs ● Can contain millions of actors
  • 24. DEFINE class LoggerActor extends Actor { def receive = { case x:String => println(x) case _ => println("huh?") } }
  • 25. CREATE val system = ActorSystem("LogSystem") val loggerActor = system.actorOf( Props[LoggerActor], name = "loggeractor")
  • 26. SEND ● Fire and forget ○ Async ○ No expected reply ○ ! or tell() ● Send and Receive ○ Async ○ Expects reply (Future) ○ ? or ask()
  • 27. SEND - Fire and forget //No need to return anything in the receive method def receive = { case x:Int => println(x) } //Send the message and don’t wait for the reply actorRef ! (100) com.shashank.akka.basic.SimpleActor
  • 28. SEND - Send and receive //Use the sender method to get the actorRef of the sender def receive = { case "hello" => sender() ! ("hello how are you?") } //Send the message and get a future back, we can wait for that future to be successful to get the result val responseFuture = bufferActor ? ("hello") responseFuture onSuccess{ case response => println(response) } com.shashank.akka.basic.ThreadSafeBuffer
  • 30. Mailbox ActorRef Mailbox Actor Instance Invokes Actor Instance with Message Runs on dispatcher - abstracts threading
  • 32. BECOME ● Dynamically redefines actor behaviour ● Reactively triggered by message ● Like changing an interface or implementation on-the-fly com.shashank.akka.basic.ThreadSafeBufferWithLimit
  • 33. How error handling is done in Java ● You are given a single thread of control ● If this thread blows up, you are screwed ● So you need to do all explicit error handling within this single thread ● Errors do not propagate between threads ● This leads to Defensive programming with ○ Error handling tangled with business logic ○ Error handling scattered all over the code
  • 34. SUPERVISE ● Manage another actor’s failure ● Supervisor receives notification and it can react upon failure ● Every actor has a default supervisor strategy ○ Can be overridden
  • 35. SUPERVISE ● On Failure, Supervisor decides what happens next ○ Resume child and keep the internal state ○ Restart child and wipe the internal state ○ Stop child permanently ○ Stop itself and escalate the error ● OneForOneStrategy affects only failed child ● AllForOneStrategy affects all the children com.shashank.akka.supervision.BasicSupervision
  • 38. Actor can form a hierarchy
  • 39. Actor can form a hierarchy
  • 40. Name resolution - like a file system
  • 41. Stopping Actors //Shutting down the Actor System system.shutdown() //Sending PoisonPill message actorRef ? (PoisonPill) //Shutting the actor from inside the actor context.stop(self) //Shutting another actor from inside the actor context.stop(actorRef) com.shashank.akka.basic.ShuttingDown
  • 42. Message delivery ● At most once - No guaranteed delivery ● Cheapest ● Highest performance ● Least implementation overhead ● It can be done in a fire-and-forget fashion without keeping state at the sending end or in the transport mechanism ● At least once - Akka persistence
  • 43. Message ordering ● Message ordering per sender-receiver pair
  • 44. Dispatcher ● Controls and coordinates the message dispatching to the actors ● Make sure that the resources are optimized and messages are processed as fast as possible ● Dispatch policies that can be customized(number of cores or memory available)
  • 45. Dispatcher ● Runways - Threads ● Airlines - Mailboxes ● ATC - Dispatcher or Dispatch policy
  • 47. Dispatcher and Mailboxes Types of dispatchers ● Dispatcher ● Pinned dispatcher ● Balancing dispatcher ● Calling thread dispatcher Mailbox implementations ● Unbounded mailbox ● Bounded mailbox ● Unbounded priority mailbox ● Bounded priority mailbox
  • 48. ● Entity that directs the message from source to the destination actor ● Router is also a type of actor ● Does not make use of the store-and-forward mechanism ● Routers dispatch the incoming messages directly to the destination actor’s mailboxes system.actorOf(Props[MyActor].withRouter(RoundRobinRouter(nrOfInstances = 5))) Routers
  • 49. ● Round robin router It routes the incoming messages in a circular order to all its routees ● Random router It randomly selects a routee and routes the message to the same ● Smallest mailbox router It identifies the actor with the least number of messages in its mailbox and routes the message to the same ● Broadcast router It forwards the same message to all the routees ● Scatter gather first completed router It forwards the message to all its routees as a future, then whichever routee actor responds back, it takes the results and sends them back to the caller com.shashank.akka.basic.Router Types of Routers
  • 50. def preStart(): Unit = () def postStop(): Unit = () def preRestart(reason: Throwable, message: Option[Any]): Unit = { context.children foreach { child ⇒ context.stop(child) } postStop() } def postRestart(reason: Throwable): Unit = { preStart() } Actor API
  • 51. ● A path is a place that can be occupied by a living actor ● When actorOf() is called it assigns an incarnation of the actor described by the passed Props to the given path ● An ActorRef always represents an incarnation (path and UID) not just a given path. Another actor created later with the same name will have a different ActorRef // will look up this absolute path context.actorSelection("/user/serviceA/aggregator") // will look up sibling beneath same supervisor context.actorSelection("../joe") Actor Path
  • 53. ● Consists of 2 parts ○ A public interface ○ An implementation ● Similar to Interface and implements in Java, Traits in Scala ● TypedActors have a static contract ● Some features like become is not available ● Bridging between actor systems (the “inside”) and non-actor code (the “outside”) Typed actors
  • 54. def squareDontCare(i: Int): Unit //fire-forget def square(i: Int): Future[Int] //non-blocking send-request-reply def squareNowPlease(i: Int): Option[Int] //blocking send-request-reply def squareNow(i: Int): Int //blocking send-request-reply @throws(classOf[Exception]) //declare it or you will get an UndeclaredThrowableException def squareTry(i: Int): Int //blocking send-request-reply with possible exception //Creating an actorRef of a TypedActor val mySquarer: Squarer = TypedActor(system).typedActorOf(TypedProps[SquarerImpl]()) com.shashank.akka.basic.TypedActorExample Typed actors
  • 55. ● Dedicated module akka-testkit for supporting tests ● Testing isolated pieces of code without involving the actor model, meaning without multiple threads ● Testing (multiple) encapsulated actors including multi-threaded scheduling ● Integration with ScalaTest to write more readable assertions com.shashank.akka.supervision.SupervisorTestSpec Actor TestKit
  • 56. ● All configuration for Akka is held within instances of ActorSystem ● ActorSystem is the only consumer of configuration information ● Parse the configuration file val config = ConfigFactory.parseFile(new File("src/main/resources/router/application.conf")) val system = ActorSystem("NameOfActorSystem", config) ● Read the configuration files automatically from ClassLoader val config = ConfigFactory.defaultReference() val system = ActorSystem("NameOfActorSystem", config) ● Parse all application.conf, application.json and application.properties ● akka.log-config-on-start Configuration - TypeSafe config
  • 57. ● Distributed by default ● Messages should be and are serializable ● ActorRefs are serializable ● Probability of the message reaching is higher than local JVM ● No separate remoting layer in Akka. Purely driven by config ● Communication between involved system is symmetric ● Not possible to create pure client-server setups Remote Actors
  • 59. In different scenarios Actors can be alternatives for: ● A thread ● An object instance or component ● A callback or listener ● A singleton or service ● A router, load-balancer or pool ● An out-of-service process ● A Finite State machine (FSM) What can I use Actors for?
  • 60. ● http://doc.akka.io/docs/akka/2.4/scala ● http://blog.madhukaraphatak.com/simple-akka-remote-example/ ● https://www.youtube.com/watch?v=W_l57iyn4mU Programming with Actors by Venkat ● https://www.slideshare.net/jboner/introducing-akka ● https://www.slideshare.net/RoyRusso1/introduction-to-akka-atlanta-ja va-users-group ● https://blog.golang.org/concurrency-is-not-parallelism References