65
Above the Clouds: Introducing Akka Jonas Bonér CTO Typesafe Twitter: @jboner presented by Martin Odersky

Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Above the Clouds:Introducing Akka

Jonas BonérCTO Typesafe

Twitter : @jboner

presented by Martin Odersky

Page 2: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

The problem

It is way too hard to build:1. correct highly concurrent systems

2. truly scalable systems

3. fault-tolerant systems that self-heals

...using “state-of-the-art” tools

Page 3: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

akkaIntroducing

Page 4: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Vision

Simpler

Concurrency

Scalability

Fault-tolerance

Page 5: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Vision

...with a single unified

Programming model

Runtime service

Page 6: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Manage system overload

Page 7: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Scale up & Scale out

Page 8: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Replicate and distribute for fault-tolerance

Page 9: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Transparent load balancing

Page 10: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

CORE SERVICES

ARCHITECTURE

Page 11: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

ADD-ON MODULES

ARCHITECTURE

Page 12: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

ARCHITECTURE

CLOUDY AKKA

Page 13: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

FINANCE

• Stock trend Analysis & Simulation

• Event-driven messaging systems

BETTING & GAMING

• Massive multiplayer online gaming

• High throughput and transactional betting

TELECOM

• Streaming media network gateways

SIMULATION

• 3D simulation engines

E-COMMERCE

• Social media community sites

SOME EXAMPLES:

WHERE IS AKKA USED?

Page 14: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

What is an Actor?

Page 15: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Event-drivenThread

Event-drivenThread

Behavior

State

Actor

Page 16: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Akka Actorsone tool in the toolbox

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 17: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

case object Tick

class Counter extends Actor { var counter = 0

def receive = { case Tick => counter += 1 println(counter) }}

Actors

Page 18: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val counter = actorOf[Counter]

Create Actors

counter is an ActorRef

Page 19: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val counter = actorOf[Counter].start

Start actors

Page 20: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val counter = actorOf[Counter].startcounter.stop

Stop actors

Page 21: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

counter ! Tick

Send: !

fire-forget

Page 22: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

// returns a futureval future = actor !!! Messagefuture.awaitval result = future.result

Send: !!!

returns the Future directly

Page 23: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Futureval future1, future2, future3 = Future.empty[String]

future1.awaitfuture2.onComplete(f => ...)

future1.completeWithResult(...) future2.completeWithException(...)future3.completeWith(future2)

Page 24: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val f1 = Futures.future(callable)

val f2 = Futures.firstCompletedOf(futures)val f3 = Futures.reduce(futures)((x, y) => ..)val f4 = Futures.fold(zero)(futures)((x, y) => ...)

Future

Page 25: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Future

val future1 = for { a: Int <- actor !!! "Hello" // returns 5 b: String <- actor !!! a // returns "10" c: String <- actor !!! 7 // returns "14"} yield b + "-" + c

val future2 = for { a <- actor !!! Req("Hello") collect { case Res(x: Int) => x } b <- actor !!! Req(a) collect { case Res(x: String) => x } c <- actor !!! Req(7) collect { case Res(x: String) => x }} yield b + "-" + c

Page 26: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Dataflowimport Future.flow

val x, y, z = Promise[Int]()

flow { z << x() + y() println("z = " + z())}flow { x << 40 }flow { y << 2 }

Page 27: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val result = (actor !! Message).as[String]

Send: !!

uses Future under the hood and blocks until timeout or completion

Page 28: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

class SomeActor extends Actor { def receive = { case User(name) => // use reply self.reply(“Hi ” + name) }}

Reply

Page 29: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

HotSwap

self become { // new body case NewMessage => ... }

Page 30: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

HotSwap

actor ! HotSwap { // new body case NewMessage => ... }

Page 31: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

HotSwap

self.unbecome()

Page 32: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

class MyActor extends Actor { self.dispatcher = Dispatchers .newThreadBasedDispatcher(self) ...}

actor.dispatcher = dispatcher // before started

Set dispatcher

Page 33: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Remote Actors

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 34: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

// use host & port in configActor.remote.start()

Actor.remote.start("localhost", 2552)

Remote Server

Scalable implementation based on NIO (Netty) & Protobuf

Page 35: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Two types of

remote actorsClient initiated & managedServer initiated & managed

Page 36: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

import Actor._

val service = remote.actorOf[MyActor](host, port)

service ! message

Client-managedsupervision works across nodes

Page 37: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

import Actor._

remote.register(“service:id”, actorOf[MyService])

Server-managedregister and manage actor on server

client gets “dumb” proxy handle

server part

Page 38: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val service = remote.actorFor( “service:id”, “darkstar”, 9999)

service ! message

Server-managed

client part

Page 39: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

import Actor._

remote.register(actorOf[MyService])remote.registerByUuid(actorOf[MyService])remote.registerPerSession( “service:id”, actorOf[MyService])

remote.unregister(“service:id”) remote.unregister(actorRef)

Server-managed

server part

Page 40: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Remote ActorsClient-managedServer-managed

Problem Deployment (local vs remote) is a dev decision

We get a fixed and hard-coded topology Can’t change it dynamically and adaptively

Needs to be a deployment & runtime decision

Remoting in Akka 1.1

Page 41: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Clustered Actors(in development for upcoming Akka 2.0)

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 42: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

val actor = actorOf[MyActor](“my-service”)

Address

Bind the actor to a virtual address

Page 43: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

•Actor address is virtual and decoupled from how it is deployed

•If no deployment configuration exists then actor is deployed as local

•The same system can be configured as distributed without code change (even change at runtime)

•Write as local but deploy as distributed in the cloud without code change

•Allows runtime to dynamically and adaptively change topology

Deployment

Page 44: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

akka { actor { deployment { my-service { router = "least-cpu" clustered { home = "node:test-node-1" replicas = 3 stateless = on } } } }}

Deployment configuration Address Type of

load-balancing

Clusteredor Local Home node

Nr of replicas in cluster

Stateful or Stateless

Page 45: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

•Subscription-based cluster membership service•Highly available cluster registry for actors•Automatic cluster-wide deployment•Highly available centralized configuration service•Automatic replication with automatic fail-over upon

node crash•Transparent and user-configurable load-balancing•Transparent adaptive cluster rebalancing•Leader election•Durable mailboxes - guaranteed delivery

The runtime provides

Page 46: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

•Publish/Subscribe (broker and broker-less)•Compute Grid (MapReduce)•Data Grid (querying etc)•Distributed STM (Transactional Memory)•Event Sourcing

Upcoming features

Page 47: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Akka Node

val ping = actorOf[Ping](“ping”)val pong = actorOf[Pong](“pong”)

ping ! Ball(pong)

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

Ping Pong

Page 48: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

akka { actor { deployment { ping {} pong { router = "round-robin" clustered { replicas = 3 stateless = on } } } }}

ZooKeeperZooKeeperZooKeeperEnsemble

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

AkkaCluster Node

Ping PongPongPong

Page 49: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Let it crash fault-tolerance

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 50: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

The

Erlangmodel

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 51: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

9 nines

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 52: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

...let’s take a standard OO application

Page 53: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Which components have critically important state

and explicit error handling?

Page 54: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that
Page 55: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Classification of State• Scratch data• Static data• Supplied at boot time• Supplied by other components

• Dynamic data• Data possible to recompute• Input from other sources; data

that is impossible to recompute

Must be protected

by any means

Page 56: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Fault-tolerant onion-layered Error Kernel

Page 57: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

ErrorKernel

Page 58: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

ErrorKernel

Node 1 Node 2

Page 59: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

link(actor)unlink(actor)

startLink(actor)spawnLink[MyActor]

Linking

Page 60: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

AllForOneStrategy( errors, maxNrOfRetries, withinTimeRange)

OneForOneStrategy( errors, maxNrOfRetries, withinTimeRange)

Fault handlers

Page 61: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

class  Supervisor  extends  Actor  {    faultHandler  =  AllForOneStrategy(        List(classOf[IllegalStateException])          5,  5000))

   def  receive  =  {        case  Register(actor)  =>  link(actor)    }}

Supervision

Page 62: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

class FaultTolerantService extends Actor { ... override def preRestart(reason: Throwable) = { ... // clean up before restart } override def postRestart(reason: Throwable) = { ... // init after restart }}

Manage failure

Page 63: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

AMQPDataflow

Security

...and much much more

HTTP

Guice

scalaz

FSMSTM

Spring

Camel

OSGi

Microkernel

Scalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.

Page 64: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

Get it and learn morehttp://akka.io

Page 65: Above the Clouds: Introducing Akkaassets.en.oreilly.com/1/event/61/Above the Clouds...Akka Actors one tool in the toolbox Scalable: Scala stands for SCALAble language which means that

EOFScalable: Scala stands for SCALAble language which means that the language is designed to scale with the usage. Concepts and abstractions scale from small to largesComponent-Oriented: scala was initially designed as a language to do component oriented programming, with its requirements on reusability, maintainability, orthogonality and extensibility.Coherent: Scala has managed to build a coherent whole while merging the FP and OO paradigms.High level: Scala allows you to program it to very high level utilizing its powerful abstractions both in OO and FPExtensible: It is great for building Domain Specific Languages (DSLs). Since Scala has a good type inference, a very flexible syntax which gives it a dynamic feel similar to Ruby and Python.