Subsequent thoughts on fatherhood

A bit over two years ago, I wrote about my initial thoughts on fatherhood a bit after our daughter was born. Our son Théo is now 4 months old and I find it fitting to write a follow-up. Life with one kid Life with one kid is easy (in a couple). You’re two adults (well, more-or-less) against one child. Yes, … Read More

Akka anti-patterns: naming your application components after Akka concepts

So you’ve just learned Akka and are tremendously excited. It’s got dispatchers, routers, supervisors – so many shiny things to play with, and in style (I mean, come on, a dispatcher sounds a lot nicer than, say, an AbstractSingletonProxyFactoryBean). And so it happens that, perhaps even unknowingly to you (you’re busy configuring a pool router), your actors start getting names … Read More

A new adaptive accrual failure detector for Akka

Akka uses the The Φ Accrual Failure Detector for failure detection, which is to say for answering the question of whether a node is alive or not. That’s one of the harder problems of distributed systems since it is virtually impossible (from the point of view of one node) to tell the difference of a remote system being completely unavailable … Read More

Akka anti-patterns: trusting the network

One anti-pattern I’ve observed in networked Akka applications is a tendency to forget that it is, well, networked and to treat the network as a friendly place. How does that look like? Well, consider the following piece of code:

Akka’s default message sending mechanism is the fire-and-forget tell method. And that works great – until it doesn’t. See, tell … Read More

Akka anti-patterns: using remoting

Whilst I have always successfully discouraged my clients from using Akka Remoting in their application, I often get questions regarding remoting while talking about anti-patterns at conferences and user groups. Don’t get me wrong. I love Akka remoting. Especially the new Aeron-based Artery remoting version that is based on UDP rather than TCP. Whilst it maintains the same delivery guarantees, … Read More

Tour de Lagom Part 1: Lagom and microservices

Lagom is a framework for building reactive microservices in Scala or Java with an emphasis on developer productivity. I’ve had a chance to work with it for some time and would like to share my impressions about it. This is going to take a bit longer than just one post, so you’re reading part one of a 3-part series: Part … Read More

Akka anti-patterns overview

An overview of Akka anti-pattern articles. You can also watch a talk outlining some of them Basics Shared mutable state Blocking Flat actor hierarchies / Mixing businesss logic and failure handling Race conditions Performance Logging the wrong way Being out of touch with the hardware Using Java Serialization (to be written) Network / Cluster Using remoting Trusting the network Always … Read More

Akka Streams – What is NotUsed all about

Akka Streams is a powerful implementation on top of the Reactive Streams SPI for non-blocking asynchronous communication with back-pressure on the JVM. This post is not about explaining what this means, nor what Akka Streams does. The purpose of this post is to explain what on earth the NotUsed type in type signatures of Akka Streams is all about which … Read More

Akka anti-patterns: blocking

This is probably one of the most frequent (and dangerous) anti-patterns when it comes to working with Akka. Let’s look at an adequate description of the mindset you must be in in order to use it: So maybe you didn’t actually want to see the world burn. Maybe you thought that this one time it was okay to call blocking … Read More