Akka.NET v1.4.25
1.4.25 September 08 2021
Maintenance Release for Akka.NET 1.4
Akka.NET v1.4.25 includes some significant performance improvements for Akka.Remote and a number of important bug fixes and improvements.
Bug Fixes and Improvements
- Akka.IO.Tcp: connecting to an unreachable DnsEndpoint never times out
- Akka.Actor: need to enforce
stdout-loglevel = off
all the way through ActorSystem lifecycle - Akka.Actor:
Ask
should push unhandled answers into deadletter - Akka.Routing: Make Router.Route` virtual
- Akka.Actor: Improve performance on
IActorRef.Child
API - signficantly improves performance of many Akka.NET functions, but includes a public API change onIActorRef
that is source compatible but not necessarily binary-compatible.IActorRef GetChild(System.Collections.Generic.IEnumerable<string> name)
is nowIActorRef GetChild(System.Collections.Generic.IReadOnlyList<string> name)
. This API is almost never called directly by user code (it's almost always called via the internals of theActorSystem
when resolvingActorSelection
s or remote messages) so this change should be safe. - Akka.Actor:
IsNobody
throws NRE - Akka.Cluster.Tools: singleton fix cleanup of overdue _removed members
- Akka.DistributedData: ddata exclude
Exiting
members in Read/WriteMajorityPlus
Performance Improvements
Using our standard RemotePingPong
benchmark, the difference between v1.4.24 and v1.4.25 is significant:
v1.4.24
OSVersion: Microsoft Windows NT 6.2.9200.0
ProcessorCount: 16
ClockSpeed: 0 MHZ
Actor Count: 32
Messages sent/received per client: 200000 (2e5)
Is Server GC: True
Thread count: 111
Num clients, Total [msg], Msgs/sec, Total [ms]
1, 200000, 96994, 2062.08
5, 1000000, 194818, 5133.93
10, 2000000, 198966, 10052.93
15, 3000000, 199455, 15041.56
20, 4000000, 198177, 20184.53
25, 5000000, 197613, 25302.80
30, 6000000, 197349, 30403.82
v1.4.25
OSVersion: Microsoft Windows NT 6.2.9200.0
ProcessorCount: 16
ClockSpeed: 0 MHZ
Actor Count: 32
Messages sent/received per client: 200000 (2e5)
Is Server GC: True
Thread count: 111
Num clients, Total [msg], Msgs/sec, Total [ms]
1, 200000, 130634, 1531.54
5, 1000000, 246975, 4049.20
10, 2000000, 244499, 8180.16
15, 3000000, 244978, 12246.39
20, 4000000, 245159, 16316.37
25, 5000000, 243333, 20548.09
30, 6000000, 241644, 24830.55
This represents a 24% overall throughput improvement in Akka.Remote across the board. We have additional PRs staged that should get aggregate performance improvements above 40% for Akka.Remote over v1.4.24 but they didn't make it into the Akka.NET v1.4.25 release.
You can see the full set of changes introduced in Akka.NET v1.4.25 here
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
32 | 1301 | 400 | Aaron Stannard |
4 | 358 | 184 | Andreas Dirnberger |
3 | 414 | 149 | Gregorius Soedharmo |
3 | 3 | 3 | dependabot[bot] |
2 | 43 | 10 | zbynek001 |
1 | 14 | 13 | tometchy |
1 | 139 | 3 | carlcamilleri |
Changes:
- 42061a3 Merge pull request #5275 from akkadotnet/dev
- f12e0b0 Akka.NET v1.4.25 Release Notes (#5274)
- 024c684 obsolete Akka.Actor.Failure and use and improve Akka.Actor.Status (#5226)
- 8279ed4 Make sure stdout-loglevel setting is honored through the whole actor system lifecycle (#5251)
- 8f168fc experimenting with RemoteActorRefProvider address resolution performance (#5228)
- 8a42eda Fix Dns.Resolve issue by using ContinueWith and AggregateException.Flatten (#5260)
- 48a704c Ask should push unhandled answers into deadletter 2 (#5259)
- 1f779fe disable Actor_PipeTo_should_not_be_delayed_by_async_receive (#5271)
- 8d5de94 harden SqliteCurrentAllEventsSpec (#5270)
- 2a3390c harden
ClusterShardingLeavingSpec
(#5164)
See More
- b1c9643 harden UnfoldFlowSpec (#5269)
- 6c46252 harden Bugfix4360 (#5268)
- 0481fc8 harden GraphStageTimersSpec (#5267)
- e692f5f added
IActorRef
benchmarks (#5266) - c232441 harden ManyRecoveriesSpec (#5264)
- 1b2f4c7 hardened more UnflowFlowSpec (#5263)
- a0398a8 hardened UnfoldFlowSpec (#5262)
- eb11339 skip racy substream spec (#5258)
- f6e2ab9 Bump FsCheckVersion from 2.16.0 to 2.16.3 (#5255)
- 850bdb1 disabled Akka.Persistence.TCK.Query.ReadJournal_should_deallocate_AllPersistenceIds_publisher_when_the_last_subscriber_left (#5257)
- b39bce3 harden Bugfix4360Spec (#5256)
- be057ab Revert "Ask should push unhandled answers into deadletter (#5221)" (#5254)
- f09a227 pumped up the LruCache benchmark invocation count to get more accurate numbers (#5250)
- e4c729f added .NET 5 support to microbenchmarks (#5249)
- cac54cb Ask should push unhandled answers into deadletter (#5221)
- 1e889f3 added
LruBoundedCache
benchmarks (#5248) - c3b6880 added LRU cache support to inbound Akka.Remote IActorRef resolution (#5240)
- d25db5d Improve performance on
IActorRef.Child
API (#5242) - 4c494fe improveme child lookup performance (#5241)
- f0c0ebf added benchmark for
VirtualPathContainer
resolution (#5244) - 77ed55d fixed baseline benchmark (#5243)
- 682ca13 adding
GetChild
benchmark (#5239) - 426111f Make
Router.Route
virtual (#5238) - 8c800cf Refactor AdaptiveLoadBalancingRoutingLogic to use IClusterMetricsRoutingLogic instead (#5237)
- 1c183fa Take Akka.Persistence.Sql.Common out of beta (#5236)
- 243d257 Benchmark to test SingleRequestResponseToRemoteEntity with a local proxy (#5232)
- 3df4b90 singleton fix cleanup of overdue _removed members (#5229)
- 0abb1f3 Fix example configuration (#5233)
- a23ebf0 Exclude exiting members in Read/Write MajorityPlus (migrated from akka/akka#30328) (#5227)
- bd695c1 Bump FsCheckVersion from 2.15.3 to 2.16.0 (#5198)
- e96833b fix IsNobody for actorref-mock and add unit test for it. (#5220)
- e38295b cached ShardIds generated by HashCodeMessageExtractor (#5216)
- 6a3c04a added hashcode message extractor benchmarks (#5215)
- bbbfd0d Bump Microsoft.NET.Test.Sdk from 16.10.0 to 16.11.0 (#5200)
- bc004ae Akka.Cluster.Sharding performance benchmarks (#5209)
- 8093f41 Update RELEASE_NOTES.md
- a00b43e Added v1.4.25 placeholder
This list of changes was auto generated.