Indic threads pune12-typesafe stack software development on the jvm

Preview:

DESCRIPTION

The 7th Annual IndicThreads Pune Conference was held on 14-15 December 2012. http://pune12.indicthreads.com/

Citation preview

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://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