23
@ Jeremy Pierre Yet Another Developer j14159 The Basics of Sane Concurrency Akka: The Smash and Grab Intro twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Akka smash-and-grab

Embed Size (px)

Citation preview

Page 1: Akka smash-and-grab

@

Jeremy PierreYet Another Developer

j14159

The Basics of Sane Concurrency

Akka:The Smash and Grab Intro

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Page 2: Akka smash-and-grab

Don’t call it a framework

Akka What?

So...?

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

A toolkit for sane concurrency.• Not just about actors• Blocking is bad, event-based is good• Crashing is not the end of the world

Page 3: Akka smash-and-grab

The Overview

• Actors and ActorSystems• Supervision(in passing)• Futures and Promises• Some interesting stuff with execution contexts, event buses and schedulers

What I’ll Cover:

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Page 4: Akka smash-and-grab

The Overview

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

What I’ll Cover:

• Actors and ActorSystems• Supervision(in passing)• Futures and Promises• Some interesting stuff with execution contexts, event buses and schedulers

What I’m Not Covering

• Remoting• FSM• Routing/Dispatchers• IO

Page 5: Akka smash-and-grab

We use the Librarian Problem:

To help it all make sense...

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

• A Library has one Librarian but many Interns.

• Interns do not know where to find specific books.

• The Librarian can’t go find books for customers because they can then only help one

at a time.

• If the Librarian tells the Interns where to find stuff, many book requests can be

handled at the same time.

Page 6: Akka smash-and-grab

The logical extreme of OOP and Information Hiding

Akka Actors

• There’s only one method to make it do stuff(tell / !)• They’re purely event-based• They live in ActorSystems

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Page 7: Akka smash-and-grab

ActorSystem

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

• They make ActorRefs• They’re the root of a hierarchy(think file system)

Page 8: Akka smash-and-grab

ActorSystem

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

• They make ActorRefs• They’re the root of a hierarchy(think file system)

Page 9: Akka smash-and-grab

ActorSystem

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

• They make ActorRefs• They’re the root of a hierarchy(think file system)

Page 10: Akka smash-and-grab

...let us do asynchronous stuff without an Actor

Futures...

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

But where’s the result?

Page 11: Akka smash-and-grab

...let us do asynchronous stuff without an Actor

Futures...

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

But where’s the result?

Page 12: Akka smash-and-grab

Promises

The “write” side of Futures

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

But that looks kind of boring...

Page 13: Akka smash-and-grab

Promises

The “write” side of Futures

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

But that looks kind of boring...

Page 14: Akka smash-and-grab

One more Promise

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Page 15: Akka smash-and-grab

Using the results of Future/Promise

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

As you’d expect, this gives you another Future:

This callback is for side-effecting:

Page 16: Akka smash-and-grab

Event Bus and Scheduler

EventBus is (very) simple pub-sub for Actors:

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Page 17: Akka smash-and-grab

Event Bus and Scheduler

EventBus is (very) simple pub-sub for Actors:

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Scheduler?

"Thread.sleep is never fine. It's like drowning a kitten." - @viktorklang

Page 18: Akka smash-and-grab

Event Bus and Scheduler

EventBus is (very) simple pub-sub for Actors:

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Scheduler makes stuff happen when you want it to:

Page 19: Akka smash-and-grab

Asking and Piping

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

import akka.pattern.ask

Page 20: Akka smash-and-grab

Asking and Piping

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

import akka.pattern.ask

import akka.pattern.pipe

Page 21: Akka smash-and-grab

Futures and Promises need it

ExecutionContext

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

• It basically hides a java.util.concurrent.Executor• Your ActorSystem’s dispatcher is one• You can create them via configuration or programmatically

Page 22: Akka smash-and-grab

Mix Them!

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Never block your ActorSystem’s threads for DB calls!

Page 23: Akka smash-and-grab

@

Thank You!

twitter.com/hootsuite facebook.com/hootsuite slideshare.com/hootsuite blog.hootsuite.com

Jeremy PierreYet Another Developer j14159