Feature Releases for Akka.NET in 2016
It’s been a while since we’ve published an official roadmap update for Akka.NET. We are still on track to achieve the goals of the previous roadmap, but with a few minor changes that I will explain here.
Akka.NET 1.1 - Akka.Cluster Release to Market; Akka.Streams Beta
We’ve publicly committed to releasing Akka.NET 1.1 on June 14th, 2016:
This release has the following goals:
- Officially releasing Akka.Cluster to market, signifying “it is ready for full-blown production use;”
- Deploy Helios 2.0 transport to production, which is significantly faster, more memory efficient, and more reliable than the current Helios 1.4.1-based transport;
- Releasing the MultinodeTestRunner and the Akka.Remote.TestKit, used for testing distributed systems built with Akka.NET; and
- Releasing the very first beta of the new Akka.Streams module, which you can read more about here.
Akka.Cluster has been available as a beta package for nearly two years and has had thousands of users. It is currently serving production workloads both on Linux and on Windows for a variety of different types of customers. During this period we have collected lots of bug reports, feedback, and data that has been used to help improve its reliability and performance.
This will be a tremendous opportunity for Akka.NET users to build high availability systems of all shapes and sizes on any cloud they wish.
Akka.NET 1.5 - TLS, New Serializer, Faster Transports
The next major release we have planned following Akka.NET 1.1 is Akka.NET 1.5. This release will introduce some breaking changes at the dependency level.
We are making the following two important changes:
- Switching from the Helios transport to the new
NetworkStreamTransport, which can achieve end-to-end speeds of roughly 110k messages per second per connection right now. The
NetworkStreamTransportwill be built into Akka.Remote itself and will also include TLS support for Akka.Remote from day 1 of release.
- Switching our default serializer from JSON.NET to Wire.
NetworkStreamTransport will be fully backwards compatible with the previous Helios transports.
Wire, however, poses a challenge to users who have been using JSON.NET in production. For Akka.Persistence (still in beta) you may need to ETL existing data into the new format. For Akka.Remote users you may need to take your services offline to change the serializer, since it will disrupt communications between upgraded nodes and yet-to-be-upgraded nodes.
JSON.NET has served our needs well for nearly two years, but we’ve had the following historical problems with it:
- Poor support for F# types, such as discriminated unions;
- Trouble with C#6 features, such as automatic properties; and
- Most importantly, not being able to handle surrogate types - needed to serialize complex objects such as
System.Collections.Immutablecollections, which are needed for Akka.Cluster.Sharding.
Wire was developed by Roger Johansson to solve these issues with Akka.NET specifically and in addition to handling those type safety issues well it also happens to perform up to 25x faster than JSON.NET and even compresses larger message sizes more effectively on the Wire.
We will be releasing Akka.NET 1.5 after the 1.1 release has been shipped to market, in order to allow for additional QA to be performed on Wire as well as the new transport.
The Wire Serializer is already available as a NuGet package if you wish to start using it now. Follow the Wire Serializer installation instructions for Akka.NET here.
Akka.NET 1.6 - Akka.Persistence
Akka.Persistence is already in a near-complete state, and we have a large number of plugins that already support it (scroll to the bottom.)
However, we have a final bit of QA to do on Akka.Persistence for a handful of specific plugins and want to officially switch serializers before giving our users the “all clear” signal to use it en masse. That’s why it’s sequenced to go in 1.6 instead of earlier.
The API for Akka.Persistence is already frozen, so it’s safe to use.
We expect to achieve the following timeframe for these releases:
- 1.1 - June 14th, 2016
- 1.5 - July 31st, 2016
- 1.6 - September 30th, 2016
The timelines may slip, but these are our goals and we will work hard to achieve them.
Akka.Cluster.Tools, Akka.Cluster.Sharding, Akka.IO
Akka.IO has been available in the core Akka package for a while now, and will be getting a major facelift as part of our Akka.Streams development process. We haven’t begun work on this yet as the core Akka.Streams library itself is still being finalized for its beta, so no timeframe is available on this yet.
Akka.Cluster.Tools and Akka.Cluster.Sharding are already available for use as beta modules; no timeframe for full release of those is available just yet since they depend on the 1.1, 1.5, and 1.6 releases being completed first.
Questions or Comments?
If you have any questions about this timeline as relates to your projects specifically, you can ask them in the comments below or you can email us directly at [email protected]. The Akka.NET community is looking forward to shipping these soon.If you liked this post, you can share it with your followers or follow us on Twitter!