SlideShare a Scribd company logo
Typesafe stack

Scala, Akka and Play
      Luka Zakrajšek
        @bancek

      December 2012
The Typesafe Stack

• development platform
• easy to build scalable software applications
• seamless integration with existing Java
  infrastructure
Typesafe stack - Scala, Akka and Play
The Typesafe Stack
• Java Virtual Machine
• Scala core
• Akka middleware
• Play web framework
• Tools
• Horizontal scalability
Scala
• general purpose programming language
• object-oriented and functional
• statically typed
• full interoperability with Java
• Twitter, Foursquare, Amazon, LinkedIn
• active community
Object-Oriented

• familiar design patterns from Java
• traits
• mixin-based composition
Functional


• based on the functional principles of
  Haskell and ML
• avoid shared state
Statically Typed

• expressive type system
• detects and avoids many kinds of
  application errors at compile time
• no boilerplate code
Extensible


• easy to add new language constructs
• domain-specific languages (DSLs)
Interoperable with Java
• Java bytecode
• existing Java libraries
• extremely mature Java Virtual Machine
• no difference in deployment
• familiar tools
• shorter, faster, more correct code
Type inference
val   a = 5
val   b = 4.5
val   c = "foo"
val   error = a * c

def actOn[T](x: T) = x.toString

actOn(a)
actOn(c)
Type aliases, closures,
first class functions and
   comprehensions
type UnaryOp[T, R] = T => R

def run[R](gen: UnaryOp[Int, R]) {
    for (x <- 1 to 5) println(gen(x))
}

run(x => -x)
run(x => Array.fill(x)("*").mkString)
Imperative with
         functional-style
           constructs
val someNumbers = List(1, 9, 2, 7, 3, 5)

def   onlyOdds = someNumbers.filter(_ % 2 == 1)
def   onlyEvens = someNumbers.filter(_ % 2 == 0)
def   sum = someNumbers.sum
def   sumAlt = someNumbers.fold(0)(_ + _)
Traits: static mixins
trait Logging {
    protected def log(fmt: String, args: Any*) {
        println(fmt.format(args:_*))
    }
}

class SampleClass extends Logging {
    log("Init")
    val a = 1
    val b = "foo"
    log("%d and %s", a, b)
}
Pattern matching
def act: Either[Any, Exception] //...

act match {
    case Left(message: String) =>
        println(message)
    case Left(count: Int) =>
        counter += count
    case Left(fallback: Any) =>
        println("Error")
    case Right(e) =>
        e.printStackTrace()
}
Akka
• event-driven middleware framework
• high performance and reliable distributed
  applications
• decouples business logic from low-level
  mechanisms
• easily configurable
Simpler Concurrency


• Threads and nonblocking IO are complex
  and error-prone
• Actor concurrency model
Transactions

• software transactional memory (STM)
• atomically modify the state of many objects
  at once
• revert all your changes if the transaction
  fails
Event-driven


• platform for asynchronous event-driven
  architectures
• non-blocking IO frameworks
Scalability


• multicore servers and multiple nodes
• several million Actors on single machine
Fault-tolerance


• supervisor hierarchies
• Let It Crash
Transparent Remoting

• Remote Actors
• distributed programming model
• unified programming model
Scala & Java APIs

• smooth interoperability
• Spring and Guice integrations
• deploy in your existing Java application
  server or run stand-alone
Actors

• every actor has a message queue
• actors accepts and choose what to do with
  messages
• lightweight and asynchronous
Actors

• actors tend to remain bound to single
  thread
• actors rarely block, thread can remain
  active for a long duration
• Akka actors occupy 650 bytes
class GreetingActor extends Actor {
  private var counter = 0
  def receive = {
    case message => {
      counter += 1
      // 1) Hello, Juliet
      log.info(counter + ") Hello, " + message)
    }
  }
}

val greetingActor = actorOf[GreetingActor].start

greetingActor ! "Juliet"
Play Framework
• painless web development for Java and
  Scala
• developer productivity
• RESTful architectures
• clean alternative to bloated Enterprise Java
  stacks
Live reload


• fix the bug and hit reload
• no need to restart the server
Stateless MVC
         architecture
• shared-nothing architecture
• use Ajax or offline storage to solve the
  state problems client-side
• easier to render portions of the page in
  parallel
Type-safe templating
        engine
• Scala-based template engine
• syntax and type errors detected by
  compiler
• routing system is also fully type-checked
Full-stack application
       framework
• relational database support and object-
  relational mapping
• integrated cache support
• straightforward RESTful web services
• flexible deployment options
Controller
package controllers

import play.api.mvc._

object Application extends Controller {

    def index = Action {
      Ok("It works!")
    }

}
Router

# Extract the page parameter from the path, or fix
the value for /
GET   / controllers.Application.show(page = "home")
GET   /:page controllers.Application.show(page)
Scala IDE for Eclipse

• syntax highlighting, code completion,
  inferred type hovers...
• mixed Scala/Java projects
• incremental compilation
• 3rd party support for IntelliJ and NetBeans
Simple Build Tool (sbt)

• compile code
• run tests
• package jars
• manages dependencies
When not to use it


• developers familiar with Python or Ruby
• already have big codebase
Troubles

• compiler is sometimes very slow
• Scala developers are hard to find
• Buggy tools
• Play Framework 2 is still young
Why do we use it?

• Python as first choice
• a lot of long-lived connections
• good support for WebSockets
• when it compiles, it’s fast
Why do we use it?
• most components in Scala and Play
• also Python and Node.js
• Thrift for communication between
  components
• Akka for client connections and blocking
  operations
Why do we use it?

• RESTful API on server
• JavaScript (Angular.JS) on frontend
• router generates helpers for JavaScript
Questions?

More Related Content

PDF
Native Support of Prometheus Monitoring in Apache Spark 3.0
PDF
Monitor Apache Spark 3 on Kubernetes using Metrics and Plugins
PDF
Apache Spark-Bench: Simulate, Test, Compare, Exercise, and Yes, Benchmark wit...
PDF
Opaque: A Data Analytics Platform with Strong Security: Spark Summit East tal...
PDF
Simplify and Boost Spark 3 Deployments with Hypervisor-Native Kubernetes
PDF
Spark Summit EU talk by Jim Dowling
PDF
Degrading Performance? You Might be Suffering From the Small Files Syndrome
PDF
Productizing Structured Streaming Jobs
Native Support of Prometheus Monitoring in Apache Spark 3.0
Monitor Apache Spark 3 on Kubernetes using Metrics and Plugins
Apache Spark-Bench: Simulate, Test, Compare, Exercise, and Yes, Benchmark wit...
Opaque: A Data Analytics Platform with Strong Security: Spark Summit East tal...
Simplify and Boost Spark 3 Deployments with Hypervisor-Native Kubernetes
Spark Summit EU talk by Jim Dowling
Degrading Performance? You Might be Suffering From the Small Files Syndrome
Productizing Structured Streaming Jobs

What's hot (20)

PDF
Extending Spark With Java Agent (handout)
PDF
Spark Summit EU talk by Simon Whitear
PDF
Getting Started with Apache Spark on Kubernetes
PDF
Spark Tuning For Enterprise System Administrators, Spark Summit East 2016
PDF
Sparking up Data Engineering: Spark Summit East talk by Rohan Sharma
PDF
Production Readiness Testing At Salesforce Using Spark MLlib
PPTX
Tuning and Monitoring Deep Learning on Apache Spark
PDF
Structured-Streaming-as-a-Service with Kafka, YARN, and Tooling with Jim Dowling
PDF
Spark Summit EU talk by Rolf Jagerman
PDF
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
PDF
Building Continuous Application with Structured Streaming and Real-Time Data ...
PDF
Teaching Apache Spark Clusters to Manage Their Workers Elastically: Spark Sum...
PDF
Continuous Application with FAIR Scheduler with Robert Xue
PDF
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
PDF
Creating Reusable Geospatial Pipelines
PDF
Spark Summit EU talk by Nimbus Goehausen
PDF
Recipes for Running Spark Streaming Applications in Production-(Tathagata Das...
PDF
Scaling Security Threat Detection with Apache Spark and Databricks
PDF
Building a Business Logic Translation Engine with Spark Streaming for Communi...
PDF
Scaling Apache Spark MLlib to Billions of Parameters: Spark Summit East talk ...
Extending Spark With Java Agent (handout)
Spark Summit EU talk by Simon Whitear
Getting Started with Apache Spark on Kubernetes
Spark Tuning For Enterprise System Administrators, Spark Summit East 2016
Sparking up Data Engineering: Spark Summit East talk by Rohan Sharma
Production Readiness Testing At Salesforce Using Spark MLlib
Tuning and Monitoring Deep Learning on Apache Spark
Structured-Streaming-as-a-Service with Kafka, YARN, and Tooling with Jim Dowling
Spark Summit EU talk by Rolf Jagerman
Migrating ETL Workflow to Apache Spark at Scale in Pinterest
Building Continuous Application with Structured Streaming and Real-Time Data ...
Teaching Apache Spark Clusters to Manage Their Workers Elastically: Spark Sum...
Continuous Application with FAIR Scheduler with Robert Xue
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Creating Reusable Geospatial Pipelines
Spark Summit EU talk by Nimbus Goehausen
Recipes for Running Spark Streaming Applications in Production-(Tathagata Das...
Scaling Security Threat Detection with Apache Spark and Databricks
Building a Business Logic Translation Engine with Spark Streaming for Communi...
Scaling Apache Spark MLlib to Billions of Parameters: Spark Summit East talk ...
Ad

Viewers also liked (8)

PDF
Akka JUGL 2012
PPTX
Lessons Learned: Scala and its Ecosystem
PPTX
Lightbend Training for Scala, Akka, Play Framework and Apache Spark
PDF
The Play Framework at LinkedIn
PDF
Securing Microservices using Play and Akka HTTP
PDF
Project Jigsaw in JDK 9: Modularity Comes To Java
PDF
Scala Days NYC 2016
PDF
Concurrecny inf sharp
Akka JUGL 2012
Lessons Learned: Scala and its Ecosystem
Lightbend Training for Scala, Akka, Play Framework and Apache Spark
The Play Framework at LinkedIn
Securing Microservices using Play and Akka HTTP
Project Jigsaw in JDK 9: Modularity Comes To Java
Scala Days NYC 2016
Concurrecny inf sharp
Ad

Similar to Typesafe stack - Scala, Akka and Play (20)

PPTX
Indic threads pune12-typesafe stack software development on the jvm
PDF
Short intro to scala and the play framework
PDF
Reactive Software Systems
PPTX
Scala adoption by enterprises
PDF
Scala In The Wild
PDF
[Start] Playing
PDF
Martin Odersky: What's next for Scala
PDF
An Introduction to Scala for Java Developers
PDF
BCS SPA 2010 - An Introduction to Scala for Java Developers
PDF
Scala - from "Hello, World" to "Heroku Scale"
PDF
Miles Sabin Introduction To Scala For Java Developers
PDF
A Brief Introduction to Scala for Java Developers
PDF
Scala, Akka, and Play: An Introduction on Heroku
PPTX
Scala, Play 2.0 & Cloud Foundry
PDF
Quick introduction to scala
PPTX
Real world Scala hAkking NLJUG JFall 2011
PDF
Software Engineering Thailand: Programming with Scala
KEY
Scala Introduction
PDF
Build Cloud Applications with Akka and Heroku
PDF
Scala Sjug 09
Indic threads pune12-typesafe stack software development on the jvm
Short intro to scala and the play framework
Reactive Software Systems
Scala adoption by enterprises
Scala In The Wild
[Start] Playing
Martin Odersky: What's next for Scala
An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java Developers
Scala - from "Hello, World" to "Heroku Scale"
Miles Sabin Introduction To Scala For Java Developers
A Brief Introduction to Scala for Java Developers
Scala, Akka, and Play: An Introduction on Heroku
Scala, Play 2.0 & Cloud Foundry
Quick introduction to scala
Real world Scala hAkking NLJUG JFall 2011
Software Engineering Thailand: Programming with Scala
Scala Introduction
Build Cloud Applications with Akka and Heroku
Scala Sjug 09

More from Luka Zakrajšek (7)

PDF
Emscripten, asm.js, and billions of math ops
PDF
How we migrated our huge AngularJS app from CoffeeScript to TypeScript
PDF
Go for Rubyists
PDF
Let's Go-lang
PDF
SOA with Thrift and Finagle
PDF
AngularJS
PDF
Django Class-based views (Slovenian)
Emscripten, asm.js, and billions of math ops
How we migrated our huge AngularJS app from CoffeeScript to TypeScript
Go for Rubyists
Let's Go-lang
SOA with Thrift and Finagle
AngularJS
Django Class-based views (Slovenian)

Recently uploaded (20)

PPTX
Big Data Technologies - Introduction.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PPT
Teaching material agriculture food technology
PDF
Approach and Philosophy of On baking technology
PPTX
Cloud computing and distributed systems.
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
Big Data Technologies - Introduction.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
GamePlan Trading System Review: Professional Trader's Honest Take
Teaching material agriculture food technology
Approach and Philosophy of On baking technology
Cloud computing and distributed systems.
Understanding_Digital_Forensics_Presentation.pptx
Electronic commerce courselecture one. Pdf
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Advanced methodologies resolving dimensionality complications for autism neur...
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Per capita expenditure prediction using model stacking based on satellite ima...

Typesafe stack - Scala, Akka and Play

  • 1. Typesafe stack Scala, Akka and Play Luka Zakrajšek @bancek December 2012
  • 2. The Typesafe Stack • development platform • easy to build scalable software applications • seamless integration with existing Java infrastructure
  • 4. The Typesafe Stack • Java Virtual Machine • Scala core • Akka middleware • Play web framework • Tools • Horizontal scalability
  • 5. Scala • general purpose programming language • object-oriented and functional • statically typed • full interoperability with Java • Twitter, Foursquare, Amazon, LinkedIn • active community
  • 6. Object-Oriented • familiar design patterns from Java • traits • mixin-based composition
  • 7. Functional • based on the functional principles of Haskell and ML • avoid shared state
  • 8. Statically Typed • expressive type system • detects and avoids many kinds of application errors at compile time • no boilerplate code
  • 9. Extensible • easy to add new language constructs • domain-specific languages (DSLs)
  • 10. Interoperable with Java • Java bytecode • existing Java libraries • extremely mature Java Virtual Machine • no difference in deployment • familiar tools • shorter, faster, more correct code
  • 11. Type inference val a = 5 val b = 4.5 val c = "foo" val error = a * c def actOn[T](x: T) = x.toString actOn(a) actOn(c)
  • 12. Type aliases, closures, first class functions and comprehensions type UnaryOp[T, R] = T => R def run[R](gen: UnaryOp[Int, R]) { for (x <- 1 to 5) println(gen(x)) } run(x => -x) run(x => Array.fill(x)("*").mkString)
  • 13. Imperative with functional-style constructs val someNumbers = List(1, 9, 2, 7, 3, 5) def onlyOdds = someNumbers.filter(_ % 2 == 1) def onlyEvens = someNumbers.filter(_ % 2 == 0) def sum = someNumbers.sum def sumAlt = someNumbers.fold(0)(_ + _)
  • 14. Traits: static mixins trait Logging { protected def log(fmt: String, args: Any*) { println(fmt.format(args:_*)) } } class SampleClass extends Logging { log("Init") val a = 1 val b = "foo" log("%d and %s", a, b) }
  • 15. Pattern matching def act: Either[Any, Exception] //... act match { case Left(message: String) => println(message) case Left(count: Int) => counter += count case Left(fallback: Any) => println("Error") case Right(e) => e.printStackTrace() }
  • 16. Akka • event-driven middleware framework • high performance and reliable distributed applications • decouples business logic from low-level mechanisms • easily configurable
  • 17. Simpler Concurrency • Threads and nonblocking IO are complex and error-prone • Actor concurrency model
  • 18. Transactions • software transactional memory (STM) • atomically modify the state of many objects at once • revert all your changes if the transaction fails
  • 19. Event-driven • platform for asynchronous event-driven architectures • non-blocking IO frameworks
  • 20. Scalability • multicore servers and multiple nodes • several million Actors on single machine
  • 22. Transparent Remoting • Remote Actors • distributed programming model • unified programming model
  • 23. Scala & Java APIs • smooth interoperability • Spring and Guice integrations • deploy in your existing Java application server or run stand-alone
  • 24. Actors • every actor has a message queue • actors accepts and choose what to do with messages • lightweight and asynchronous
  • 25. Actors • actors tend to remain bound to single thread • actors rarely block, thread can remain active for a long duration • Akka actors occupy 650 bytes
  • 26. class GreetingActor extends Actor { private var counter = 0 def receive = { case message => { counter += 1 // 1) Hello, Juliet log.info(counter + ") Hello, " + message) } } } val greetingActor = actorOf[GreetingActor].start greetingActor ! "Juliet"
  • 27. Play Framework • painless web development for Java and Scala • developer productivity • RESTful architectures • clean alternative to bloated Enterprise Java stacks
  • 28. Live reload • fix the bug and hit reload • no need to restart the server
  • 29. Stateless MVC architecture • shared-nothing architecture • use Ajax or offline storage to solve the state problems client-side • easier to render portions of the page in parallel
  • 30. Type-safe templating engine • Scala-based template engine • syntax and type errors detected by compiler • routing system is also fully type-checked
  • 31. Full-stack application framework • relational database support and object- relational mapping • integrated cache support • straightforward RESTful web services • flexible deployment options
  • 32. Controller package controllers import play.api.mvc._ object Application extends Controller { def index = Action { Ok("It works!") } }
  • 33. Router # Extract the page parameter from the path, or fix the value for / GET / controllers.Application.show(page = "home") GET /:page controllers.Application.show(page)
  • 34. Scala IDE for Eclipse • syntax highlighting, code completion, inferred type hovers... • mixed Scala/Java projects • incremental compilation • 3rd party support for IntelliJ and NetBeans
  • 35. Simple Build Tool (sbt) • compile code • run tests • package jars • manages dependencies
  • 36. When not to use it • developers familiar with Python or Ruby • already have big codebase
  • 37. Troubles • compiler is sometimes very slow • Scala developers are hard to find • Buggy tools • Play Framework 2 is still young
  • 38. Why do we use it? • Python as first choice • a lot of long-lived connections • good support for WebSockets • when it compiles, it’s fast
  • 39. Why do we use it? • most components in Scala and Play • also Python and Node.js • Thrift for communication between components • Akka for client connections and blocking operations
  • 40. Why do we use it? • RESTful API on server • JavaScript (Angular.JS) on frontend • router generates helpers for JavaScript