You are on page 1of 33

Typesafe Stack Software Development On The JVM

Sushanta Pradhan
Talentica Software (I) Pvt. Ltd.

History of Hardware Architecture


Single core era moore's law achieved by increasing clock cycles Multi core era moore's law achieved by increasing # of cores

Moores Law

PPP Grand Challenge

Parallel programming as easy as sequential programming Mooress law of performance speed up 2 times year on year Eliminate concurrency bugs

History of software applications


pre .com era standalone desktop apps .com era web sites - static web pages, automated business processes data controlled by software vendor deployed on data centers

contd ..
web2.0/semantic web era web/networked applications Smart apps data not controlled by vendor but by the users deployed on cloud

Properties of modern day App


Scalability Distributed Parallel & Concurrent Dynamic Agile & Swift

Parallelism & Concurrency


Parallel Programming parallel execution of programs can't be performed without parallel hardware programs get faster

Parallelism & Concurrency


Concurrent Programming simultaneous execution of programs can be performed without parallel hardware programs get more responsive

Both are too hard !!

Why Hard?
non-determinism due to shared mutable state by concurrent threads encapsulate state in actors or transactors but fundamental problems still remains non-determinism = parallel processing + mutable state

Remedy?
PREVENTION IS BETTER THAN CURE !! Avoid mutable state and get deterministic processing

Which means program functionally

Space vs Time
Space(functional/parallel)

Time(imperative/concurrent)

Scala
Hybrid functional & object oriented (pure) strong static typing Agile - concise & expressive Parallel & Sequential intermixes well with Java

Scala contd ..
Parallellism parallel collections distributed collections Concurrency Actors STM Akka Futures

Scala contd ..
Concise Java Immutability Val & Var Tuples & Multiple Assignments Sensible Defaults Operator Overloading

Scala classes ..
Terse Object keyword - Singleton Companion Objects Type inference Option[T] Some[T], None

Class hierarchy

Scala Functional Aspects


Functions too are objects Higher Order Functions Partially applied Functions Closures

Scala Inehritance
Traits Mixins Type inference - implicit keyword

Scala collections
Mutable & immutable filter() Map() foldLeft() foldRight()

Scala Pattern Matching


Advanced switch case Literals and constants WildCards Tuples & Lists Guards Regular Expressions

Scala - Concurrency
actor() Actor Class receive() & recieveWithin() react() & reachWithin() loop() & loopwhile()

Akka - Middleware
Concurrent, Scalable & fault-tolerant based on actor model highly performant event driven location transparency

Actor system
ensemble of actors sharing common configuration hierarchical structure heavyweight has its own pool of resources threads

Supervision
dependency relationship between actors supervisor - subordinate model supervisor monitors and reacts to any errors reported by subordinates configurable supervision strategy lifecycle monitoring

Supervision hierarchy

root guardian guardian shutdown guardian order system

Remoting
ActorPath purely local - "akka://my-sys/user/service-a/worker1" local or remote - "akka://my-sys@host.example.com:5678 /user/service-b"

Seamlessly send messages to actors on remote nodes

Routing
route messages to actors(routees) ideal for load balancing Examples RoundRobinRouter RandomRouter SmallestMailboxRouter BroadcastRouter

Dispatchers
make akka actors tick manages the resources(threads) used by actors configure mailboxes of actors Examples fork-join-executor thread-pool-executor

Play
ruby on rails like agility convention over configuration seamless integration with akka for scalability edit and test

Play contd ..
an easy, out-of-the-box setup for unit and functional testing asynchronous HTTP request handling WebSocket support cache support (e.g. memcached) integrated JSON and XML handling

Progressive Stream Processing


Iteratees Enumerators Enumeratees

Q/A

You might also like