Learn more about Akka.Net in this interview with Anthony Brown, author of Reactive Applications with Akka.Net. Anthony has been developing software for several years, primarily using the .NET framework. He’s a regular speaker at conferences on tools and techniques to rapidly build systems that work.
Where did Akka come from? Why should a .NET developer be interested in something from the Scala ecosystem?
Akka began as an actor model implementation running on the JVM for languages like Java and Scala, but in recent years significant work has been put in to port the framework across to an idiomatic C# and F# solution. Akka on the JVM has helped companies around the world develop applications which are able to scale up to incredible levels. Akka concepts have a long-standing history when building distributed applications, drawing on the ideas behind the actor model, used in other languages such as Erlang (which allowed Ericsson to build a system quickly and easily while also maintaining an uptime of 99.999%).
As the applications we build need to serve more and more users in more mission critical applications, it’s important that we’re able to build systems which are available always (or at least as close to always as we can manage!) while also handling the immense number of new devices which are connecting to the internet on a daily basis
How is Akka.Net being supported/developed? Is it in sync with the Scala/JVM version?
Akka.Net is being developed entirely in the open on GitHub and is driven entirely by community contributions. Anybody is welcome to dive into the codebase and port over a feature of Akka which they need as part of their Akka.Net based applications. While Akka.Net has seen some corporate sponsorship, it’s mostly been driven by the wider .Net community. Typesafe doesn’t contribute code to the project, but they’ve been happy to help those wanting to port features to understand the core design of it. In fact, as a result of this collaboration, bug fixes have been contributed back into the JVM Akka project which were discovered as part of the porting process.
What is “reactive” programming?
The aim of reactive programming is to build applications which are more resilient and scalable thanks to loosely coupled message driven architectures to create a more responsive experience for end users. These components were combined in the reactive manifesto (reactivemanifesto.org) as a result of a number of organizations in various domains noticing common patterns and traits when developing applications which are able to withstand the requirements a modern application will impose on its design. Thanks to many of the features of Akka.Net, we’re able to build applications which follow these traits and are able to stand up to the pressure the applications of tomorrow will face.
What advantages do I get from using Akka?
Akka.Net provides lots of advantages such as easier concurrency with the added benefit of enhanced scalability. One of my favorites is the ease with which I’m able to build more resilient applications. Thanks to the built-in fault isolation and failure recovery principles provided by Akka.Net, it’s easy to build applications which are able to work non-stop with little developer interaction required. This ensures that the applications and services I build are more reliable and are able to stand up to bugs and errors even when dealing with external libraries and services.
How does Akka work? Is it similar to something I already know about in the .NET ecosystem? What does it replace?
At its core, Akka.Net is an implementation of the actor model, which is primarily designed as a tool for handling concurrency. It achieves this by creating completely isolated entities in memory which aren’t able to share data with each other. This allows us to scale out across multiple machines without the need for complex logic, we simply add more machines to do more work concurrently.
The key area where Akka.Net shines is in the background of an application, coordinating all of the data processing which goes on behind the scenes. Akka.Net sits in the gap between your web services or other communication layer which retrieves the data and the database which is used as a backup of the contents of an actor, with actors being the primary communication method. This doesn’t mean that Akka.Net is solely designed for your application services, there’s features to allow it to operate on desktop UIs and allows for co-ordinating actors so that they’re able to make changes to the UI.