Dear hakkers,
We are proud to announce the release of Akka 2.4.11, which includes the new experimental Akka Remoting, codenamed Artery.
Some noteworthy changes in the 2.4.11 release are:
- New remoting, see below
- Progress of Akka Typed, see below
- Fixed an issue where in some cases cancel or failure events was dropped in Streams leading to potential deadlock #21446
New Remoting
Artery is a reimplementation of the old remoting module aimed at improving performance and stability. It is mostly source compatible with the old implementation and it is a drop-in replacement in many cases. Main features of Artery compared to the previous implementation:
- Based on Aeron (UDP) instead of TCP
- Focused on high-throughput, low-latency communication, mostly allocation-free operation
- Isolation of internal control messages from user messages improving stability and reducing false failure detection in case of heavy traffic by using a dedicated subchannel.
- Support for a separate subchannel for large messages to avoid interference with smaller messages
- Compression of actor paths on the wire to reduce overhead for smaller messages
- Support for faster serialization/deserialization using ByteBuffers directly
- Built-in Flight-Recorder to help debugging implementation issues without polluting users logs with implementation specific events
- Providing protocol stability across major Akka versions to support rolling updates of large-scale systems
The new remoting is enabled with configuration:
akka.remote.artery {
enabled = on
# The hostname or ip clients should connect to.
canonical.hostname = localhost
# use 0 if you want a random available port
canonical.port = 25520
}
The protocol part of the actor system address is now simply akka, so you need to change previous akka.tcp to akka in for example configuration of cluster seed-nodes.
Please read the documentation for Scala or Java for more details.
The full list of changes since the last milestone is available under the 2.4.11-ARTERY milestone on github for your reference.
Akka Typed
This release brings some significant changes to the Akka Typed module:
- a completely new implementation that has 20–30% less message-passing overhead even though it has not yet been fully optimized—the goal is to allow zero-allocation messaging once we have all the pieces in place
- a few semantic simplifications, most of which have little to no impact on what can be expressed by user code but which tremendously simplify the internal implementation, see the discussion on akka-meta, the summary of the differences in the Actor lifecycle, and the notes on co-existence of typed and untyped Actors
- the removal of Props which now do not serve enough purpose anymore to warrant all those extra allocations
All these changes are contributed by Actyx, the company Roland Kuhn co-founded recently. Actyx is interested in pushing Akka Typed forward as an open-source base technology for the implementation of cloud services for the manufacturing industry.
Credits
A total 46 issues were closed since 2.4.10 (New remoting not counted).
The complete list of closed issues can be found on the 2.4.11 and 2.4.11-ARTERY milestones on github.
For this release we had the help of 19 committers – thank you!
A special thanks to Łukasz Dubiel who contributed to Artery and Roland Kuhn who contributed to Akka Typed.
Credits:
commits added removed
142 22445 6850 Patrik Nordwall
23 2573 1111 Johan Andrén
20 11067 807 Endre Sándor Varga
11 4978 1651 Konrad Malawski
6 828 202 Johan Andrén
5 6740 90 Johannes Rudolph
4 1441 361 Martynas Mickevičius
3 1139 4 Richard Imaoka
3 5090 1174 Roland Kuhn
2 341 276 Łukasz Dubiel
2 96 15 gosubpl
1 12 4 drewhk
1 37 13 monkey-mas
1 22 22 Michał Płachta
1 10 7 Richard S. Imaoka
1 12 4 Jeroen Gordijn
1 1 1 KAWACHI Takashi
1 9 1 Matthias Lüneberg
1 151 8 Nafer Sanabria
1 28 5 Ortigali
Happy hakking!
– The Akka Team