Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHY THIS TALK?
Tools, of course, can be the subtlest of traps
— Neil Gaiman
Scala Days 2017 Copenhagen - manuel.bernhardt....
MANUEL.BERNHARDT.IO
> Helping teams to get started with
reactive systems...
> ...and to keep them running
> Lightbend trai...
MANUEL.BERNHARDT.IO
> Helping teams to get started with
reactive systems...
> ...and to keep them running
> Lightbend trai...
If you want to make enemies, try
to change something.
— Woodrow Wilson
Scala Days 2017 Copenhagen - manuel.bernhardt.io - ...
ANTI-PATTERN #1
GLOBAL MUTABLE STATE
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
> it's okay for an actor to have mutable state
> as long as it retains total control over it and is the
only one to see it...
HOW CAN IT HAPPEN?
> reference to mutable state in messages
> closing over mutable state in asynchronous calls
> passing s...
WHY IS THIS BAD?
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHAT TO DO INSTEAD
> use immutable messages for state updates (e.g.
broadcasting for configuration changes)
> use queries ...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
The two enemies of human
happiness are pain and boredom.
— Arthur Schopenhauer
Scala Days 2017 Copenhagen - manuel.bernhar...
ANTI-PATTERN #2
FLAT ACTOR HIERARCHIES
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN IT HAPPEN?
"Ceci n'est pas une hierarchie" - Magritte, 1928
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @el...
IF YOUR ACTOR SYSTEM HAS NO HIERARCHY
YOU ARE MISSING THE POINT.
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHY IS THIS BAD?
> actor systems are designed to handle failures through
hierarchy
> ergo: no hierarchy, no failure handli...
How exception catch blocks are used in Java projects 1
1
Analysis of Exception Handling Patterns in Java Projects: An Empi...
WHAT TO DO INSTEAD?
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHAT TO DO INSTEAD?
Build hierarchies.
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
The mother of excess is not joy
but joylessness.
— Friedrich Nietzsche
Scala Days 2017 Copenhagen - manuel.bernhardt.io - ...
ANTI-PATTERN #3
TOO MANY ACTOR SYSTEMS
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN IT HAPPEN?
> eagerly wanting to isolate things
> and not understanding how Akka
works
> (but the intent is good)
S...
WHY IS THIS BAD?
> each actor system has at least one dispatcher backed
by a thread pool
> multiple actor systems = multip...
WHAT TO DO INTEAD?
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHAT TO DO INSTEAD?
Bulkheading with custom dispatchers
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
contexts {
graph-db {
thread-pool-executor {
fixed-pool-size = 2
}
}
}
val graph: ActorRef = context.actorOf(
props = Prop...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
"Words, words, words."
— William Shakespeare, Hamlet
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
ANTI-PATTERN #4
LOGGING (THE WRONG WAY)
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN THIS HAPPEN?
> string concatentation
log().debug("Received message: " + msg.toString());
> non-asynchronous loggin...
WHY IS THIS BAD?
> actor sytems are meant to process millions of
messages per second
> getting logging wrong has a huge pe...
WHAT TO DO INSTEAD?
> use Akka's built-in logging facility
> carefully configure the logback appenders, use
asynchronous v...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
All that we see or seem is but a
dream within a dream.
— Edgar Allan Poe
Scala Days 2017 Copenhagen - manuel.bernhardt.io ...
ANTI-PATTERN #5BEING OUT OF TOUCH WITH THE HARDWARE
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN THIS HAPPEN?
XKCDE 2
2
http://xkcd.com/1764/
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHY IS THIS A BAD THING?
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
WHY IS THIS A BAD THING?
fork-join-executor {
# Min number of threads to cap factor-based parallelism number to
parallelis...
WHY IS THIS BAD?
> suboptimal or simply wrong configuration for the
amount of CPU cores
> costs of context switching
> con...
WHAT TO DO INSTEAD?
> know your hardware and configure accordingly
> beware of virtualization (is the hypervisor lying to
...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
"...some men aren't looking for
anything logical, like money. They
can't be bought, bullied, reasoned,
or negotiated with....
ANTI-PATTERN #6
BLOCKINGScala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN THIS HAPPEN?
> calling a synchronous API
> or calling an API that calls an API that calls an API...
that calls a s...
WHAT TO DO INSTEAD?
> if you really must (legacy API), use a dedicated
dispatcher optimized for the blocking case (and lim...
ASK AND PIPE
def receive = {
case ComputePi(precision) =>
val originalSender = sender()
implicit val timeout = Timeout(5.s...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
A man who dares to waste one
hour of time has not discovered
the value of life.
— Charles Darwin
Scala Days 2017 Copenhage...
ANTI-PATTERN #7
RE-INVENTING AKKA TOOLS
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN THIS HAPPEN?
> not reading the documentation
> not keeping up with updates
Scala Days 2017 Copenhagen - manuel.ber...
HOW CAN THIS HAPPEN?
> re-inventing at-least-once delivery (Akka Persistance
+ AtLeastOnceDelivery)
> re-inventing back-of...
WHY IS THIS BAD?
> see the introductory quote for this anti-pattern
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @el...
WHAT TO DO INSTEAD?
> read the documentation
> call me
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
This is the way the world ends
Not with a bang but a covfefe.
— T.S. Eliot
Scala Days 2017 Copenhagen - manuel.bernhardt.i...
ANTI-PATTERN #8
USING JAVA SERIALIZATION
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
HOW CAN THIS HAPPEN?
> leaving the default on
> Java serialization over the wire
> Java serialization in Akka Persistance
...
WHY IS IT BAD?
> performance penalty!
> poor candidate for protocol evolution - message
evolutions result in older compone...
WHAT TO DO INSTEAD?
> use a proper binary format
> protobuf, avro, thrift
Scala Days 2017 Copenhagen - manuel.bernhardt.io...
THANK YOU
> Questions, comments, feedback?
> Contact me at manuel@bernhardt.io / @elmanu
> Check out more anti-patterns at...
Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
Upcoming SlideShare
Loading in …5
×

of

Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 1 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 2 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 3 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 4 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 5 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 6 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 7 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 8 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 9 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 10 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 11 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 12 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 13 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 14 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 15 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 16 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 17 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 18 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 19 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 20 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 21 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 22 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 23 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 24 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 25 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 26 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 27 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 28 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 29 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 30 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 31 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 32 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 33 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 34 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 35 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 36 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 37 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 38 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 39 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 40 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 41 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 42 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 43 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 44 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 45 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 46 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 47 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 48 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 49 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 50 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 51 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 52 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 53 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 54 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 55 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 56 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 57 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 58 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 59 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 60 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 61 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 62 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 63 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 64 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 65 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 66 Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of Slide 67
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

3 Likes

Share

Download to read offline

Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of

Download to read offline

CAUTION: If you are responsible for an Akka system deployed to production, attending this talk may cause intense moments of self-doubt, stress and possibly panic.

Akka is a toolkit for building highly concurrent and distributed applications on the JVM using the actor model. Given the prevalence of frameworks over toolkits and models in the industry, it is easy to forget that the former will not prevent you from using them in any way you please – including ways that are possibly suboptimal or perhaps even harmful.

In this talk you'll learn about a few of the most common anti-patterns related to Akka usage. You'll also get to know about alternative and more appropriate solutions to use for each one of those anti-patterns. It should be noted that these suboptimal uses of Akka are not merely theoretical ponderings but real and recurring observations that the speaker made during a range of consulting projects.

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Scala Days Copenhagen - 8 Akka anti-patterns you'd better be aware of

  1. 1. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  2. 2. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  3. 3. WHY THIS TALK? Tools, of course, can be the subtlest of traps — Neil Gaiman Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  4. 4. MANUEL.BERNHARDT.IO > Helping teams to get started with reactive systems... > ...and to keep them running > Lightbend training partner (Akka, Advanced Akka, Scala) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  5. 5. MANUEL.BERNHARDT.IO > Helping teams to get started with reactive systems... > ...and to keep them running > Lightbend training partner (Akka, Advanced Akka, Scala) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  6. 6. If you want to make enemies, try to change something. — Woodrow Wilson Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  7. 7. ANTI-PATTERN #1 GLOBAL MUTABLE STATE Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  8. 8. > it's okay for an actor to have mutable state > as long as it retains total control over it and is the only one to see it Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  9. 9. HOW CAN IT HAPPEN? > reference to mutable state in messages > closing over mutable state in asynchronous calls > passing shared mutable state to an actor's constructor Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  10. 10. WHY IS THIS BAD? Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  11. 11. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  12. 12. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  13. 13. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  14. 14. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  15. 15. WHAT TO DO INSTEAD > use immutable messages for state updates (e.g. broadcasting for configuration changes) > use queries for state inquiries (e.g. using the ask pattern) > for asynchronous calls, always use the pipe pattern Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  16. 16. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  17. 17. The two enemies of human happiness are pain and boredom. — Arthur Schopenhauer Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  18. 18. ANTI-PATTERN #2 FLAT ACTOR HIERARCHIES Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  19. 19. HOW CAN IT HAPPEN? "Ceci n'est pas une hierarchie" - Magritte, 1928 Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  20. 20. IF YOUR ACTOR SYSTEM HAS NO HIERARCHY YOU ARE MISSING THE POINT. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  21. 21. WHY IS THIS BAD? > actor systems are designed to handle failures through hierarchy > ergo: no hierarchy, no failure handling > why then bother to use actors in the first place? Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  22. 22. How exception catch blocks are used in Java projects 1 1 Analysis of Exception Handling Patterns in Java Projects: An Empirical Study (S. Nakshatri, M. Hegde, S. Thandra) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  23. 23. WHAT TO DO INSTEAD? Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  24. 24. WHAT TO DO INSTEAD? Build hierarchies. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  25. 25. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  26. 26. The mother of excess is not joy but joylessness. — Friedrich Nietzsche Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  27. 27. ANTI-PATTERN #3 TOO MANY ACTOR SYSTEMS Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  28. 28. HOW CAN IT HAPPEN? > eagerly wanting to isolate things > and not understanding how Akka works > (but the intent is good) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  29. 29. WHY IS THIS BAD? > each actor system has at least one dispatcher backed by a thread pool > multiple actor systems = multiple thread pools, contending for the same resources Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  30. 30. WHAT TO DO INTEAD? Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  31. 31. WHAT TO DO INSTEAD? Bulkheading with custom dispatchers Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  32. 32. contexts { graph-db { thread-pool-executor { fixed-pool-size = 2 } } } val graph: ActorRef = context.actorOf( props = Props[Graph].withDispatcher("contexts.graph-db"), name = "graph" ) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  33. 33. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  34. 34. "Words, words, words." — William Shakespeare, Hamlet Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  35. 35. ANTI-PATTERN #4 LOGGING (THE WRONG WAY) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  36. 36. HOW CAN THIS HAPPEN? > string concatentation log().debug("Received message: " + msg.toString()); > non-asynchronous logging > not turning debug logging off in production settings > let's get real: logging to files (it is 2017) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  37. 37. WHY IS THIS BAD? > actor sytems are meant to process millions of messages per second > getting logging wrong has a huge performance impact Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  38. 38. WHAT TO DO INSTEAD? > use Akka's built-in logging facility > carefully configure the logback appenders, use asynchronous variants > use string interpolation: log().debug("Received message {}", msg); > use a logging aggregation mechanism (logstash & friends) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  39. 39. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  40. 40. All that we see or seem is but a dream within a dream. — Edgar Allan Poe Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  41. 41. ANTI-PATTERN #5BEING OUT OF TOUCH WITH THE HARDWARE Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  42. 42. HOW CAN THIS HAPPEN? XKCDE 2 2 http://xkcd.com/1764/ Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  43. 43. WHY IS THIS A BAD THING? Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  44. 44. WHY IS THIS A BAD THING? fork-join-executor { # Min number of threads to cap factor-based parallelism number to parallelism-min = 2 # Parallelism (threads) ... ceil(available processors * factor) parallelism-factor = 2.0 # Max number of threads to cap factor-based parallelism number to parallelism-max = 10 } ceil(available processors * factor) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  45. 45. WHY IS THIS BAD? > suboptimal or simply wrong configuration for the amount of CPU cores > costs of context switching > contending for network Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  46. 46. WHAT TO DO INSTEAD? > know your hardware and configure accordingly > beware of virtualization (is the hypervisor lying to you?) > run load tests on the same hardware as your target production system Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  47. 47. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  48. 48. "...some men aren't looking for anything logical, like money. They can't be bought, bullied, reasoned, or negotiated with. Some men just want to watch the world burn." — Alfred Pennyworth, Batman, The Dark Knight Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  49. 49. ANTI-PATTERN #6 BLOCKINGScala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  50. 50. HOW CAN THIS HAPPEN? > calling a synchronous API > or calling an API that calls an API that calls an API... that calls a synchronous API > explicitly waiting for the completion of a Future > using Thread.sleep (don't!) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  51. 51. WHAT TO DO INSTEAD? > if you really must (legacy API), use a dedicated dispatcher optimized for the blocking case (and limited in resources) > always use Future in combination with the pipe pattern > use the akka scheduler if you are waiting for something Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  52. 52. ASK AND PIPE def receive = { case ComputePi(precision) => val originalSender = sender() implicit val timeout = Timeout(5.seconds) val computation: Future[Pi] = piActor ? Compute(precision, originalSender) val result = computation.recover { case t: AskTimeoutException => ComputationTimeout(originalSender, precision) } result pipeTo self case Pi(value, originalSender) => originalSender ! PiResult(value) case ComputationTimeout(originalSender, precision) => originalSender ! ComputationFailed(s"Sorry, $precision was too high.") } Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  53. 53. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  54. 54. A man who dares to waste one hour of time has not discovered the value of life. — Charles Darwin Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  55. 55. ANTI-PATTERN #7 RE-INVENTING AKKA TOOLS Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  56. 56. HOW CAN THIS HAPPEN? > not reading the documentation > not keeping up with updates Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  57. 57. HOW CAN THIS HAPPEN? > re-inventing at-least-once delivery (Akka Persistance + AtLeastOnceDelivery) > re-inventing back-off supervision (BackoffSupervisor) > re-inventing message prioritization (*ControlAwareMailbox, *PriorityMailbox, *StablePriorityMailbox) Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  58. 58. WHY IS THIS BAD? > see the introductory quote for this anti-pattern Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  59. 59. WHAT TO DO INSTEAD? > read the documentation > call me Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  60. 60. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  61. 61. This is the way the world ends Not with a bang but a covfefe. — T.S. Eliot Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  62. 62. ANTI-PATTERN #8 USING JAVA SERIALIZATION Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  63. 63. HOW CAN THIS HAPPEN? > leaving the default on > Java serialization over the wire > Java serialization in Akka Persistance Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  64. 64. WHY IS IT BAD? > performance penalty! > poor candidate for protocol evolution - message evolutions result in older components not able to process them any longer > persistance - messages and snapshots can't be processed any longer after changes Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  65. 65. WHAT TO DO INSTEAD? > use a proper binary format > protobuf, avro, thrift Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  66. 66. THANK YOU > Questions, comments, feedback? > Contact me at manuel@bernhardt.io / @elmanu > Check out more anti-patterns at https:// manuel.bernhardt.io Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  67. 67. Scala Days 2017 Copenhagen - manuel.bernhardt.io - @elmanu
  • kdkanishka

    Jan. 8, 2019
  • dar151

    Jun. 2, 2017
  • forthy

    Jun. 1, 2017

CAUTION: If you are responsible for an Akka system deployed to production, attending this talk may cause intense moments of self-doubt, stress and possibly panic. Akka is a toolkit for building highly concurrent and distributed applications on the JVM using the actor model. Given the prevalence of frameworks over toolkits and models in the industry, it is easy to forget that the former will not prevent you from using them in any way you please – including ways that are possibly suboptimal or perhaps even harmful. In this talk you'll learn about a few of the most common anti-patterns related to Akka usage. You'll also get to know about alternative and more appropriate solutions to use for each one of those anti-patterns. It should be noted that these suboptimal uses of Akka are not merely theoretical ponderings but real and recurring observations that the speaker made during a range of consulting projects.

Views

Total views

3,501

On Slideshare

0

From embeds

0

Number of embeds

1,850

Actions

Downloads

10

Shares

0

Comments

0

Likes

3

×