Typesafe Stack Software Development On The JVM Sushanta Pradhan Talentica Software (I) Pvt. Ltd.
May 10, 2015
Typesafe Stack Software Development On The JVM
Sushanta PradhanTalentica 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
Moore’s Law
PPP – Grand Challenge
• Parallel programming as easy as sequential programming
• Moores’s 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
“system guardian”order
Remoting
• ActorPath • purely local - "akka://my-sys/user/service-a/worker1" • local or remote - "akka://[email protected]: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