Skip to content

Instantly share code, notes, and snippets.

@Aaronontheweb
Created February 28, 2019 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Aaronontheweb/ad0357b6dc5419f7dcef4cf2f6a4c655 to your computer and use it in GitHub Desktop.
Save Aaronontheweb/ad0357b6dc5419f7dcef4cf2f6a4c655 to your computer and use it in GitHub Desktop.
Akka.NET V1.4 Roadmaps

Akka.NET QA Proposed Changes and Updates

Goals

  1. Radically reduce the per-pull request build time

    1. Eliminate agent "spin up" time
    2. Don't waste resources executing tests for things that don't need testing, such as documentation updates and README fixes.
    3. Don't compile the entire project for each step in the build process.
    4. If possible, only execute dependent tests - not all tests (incremental testing.)
  2. Reduce unit test flakiness

    1. Harden existing unit tests that are known to be problematic.
    2. Skip or delete the ones that aren't.
  3. Reduce performance test flakiness

    1. Modernize NBench system to use dynamic ranges of accepted values. (part of a much bigger project)
    2. Parameterize tests on a hardware-specific basis.
  4. Harden MNTR specs

    1. Migrate MNTR to run as a dotnet global tool, so it's easier to use
    2. Improve output formatting so it's easier to debug - use distributed tracing tools to visualize output.

Implementation Strategies

  1. Migrate to Azure Pipelines

    1. No spin-up time.
    2. Can use build and test plans to copy output binaries from one node to another (very, very difficult to do well in TeamCity.)
    3. Can still run multiple tests types in parallel.
  2. Create incremental build tool that actually works

    1. Stand-alone tool that can compute the diff between current pull request and target branch, determine all files that have been affected.
    2. Use Roslyn Analyzer or even a simple project-dependency analysis to determine which tests are affected by which code changes.
    3. Only run the narrowly selected test suite.
  3. NBench 2.0

    1. Support for test fixtures
      1. Parameterize one performance test with many outside variables and combinations
      2. Can customize performance tolerances for specific pieces of hardware
    2. bencher.io support
      1. Ability to memorize and update performance values for specific projects, branches, and hardware configurations.
      2. Can dynamically determine whether or not something is / isn't within previously accepted tolerances.
  4. Better MNTR tooling

    1. Create a sidecar version of MNTR that uses Phobos' tracing and correlation system internally.
    2. Emit data to stand-alone Zipkin or Jaeger instance that belongs to the Akka.NET project.
    3. Correlate each ActorSystem name to the ID of the test run.

Akka.NET v1.4 Plan

Goals

  1. Move onto modern .NET stack

    1. Target .NET Standard 2.0 across the board for all libraries.
    2. Have all test projects and examples target .NET 4.7.* and .NET Core 2.2.
    3. Upgrade build system to use latest available .NET Core-friendly tooling (i.e. upgraded XUnit, etc)
    4. Distribute MNTR as a dotnet global tool
    5. Plan on adding support for .NET Standard 2.1 via dual-targeting as soon as it's available.
      • Want to take advantage of Span<T> and other APIs that have been added to the standard since without breaking compatibility.
    6. Drop support for .NET Framework 4.5 (it's been 7 years)
  2. Upgrade dependencies

    1. Newtonsoft.Json
    2. Google.Protobuf
    3. DotNetty (we do this pretty regularly anyway)
  3. Get Akka.Cluster.Sharding and Akka.Cluster.DistributedData out of beta

    1. Finalize Protobuf serialization for Akka.Cluster.DistributedData
    2. Fix remember-entities for Akka.Cluster.Sharding when running with DistributedData
    3. Fix failing / flaky multi-node tests
  4. Rewrite guts of Akka.Persistence

    1. Journal designs are extremely inefficient and, in some cases, unsafe. This is largely due to the AsyncWriteJournal design and some inconsistencies with failure handling / consistency.
    2. Rewrite using Akka.Streams for better performance, failure handling, and downstream journal design.
    3. Provide upgrade paths for existing users and plugins, including possibly a migration tool if it's necessary.
  5. Decoupling of HOCON

    1. Use the new stand-alone HOCON library instead of the Akka.Configuration namespace.
    2. Provide better first-party tooling support for .NET Core applications than what we have today, i.e. the ability to easily parse HOCON files in a single method.

Skipping for this Release

"Don't make good enough the enemy of perfect."

  1. Akka.Cluster Multi-DataCenter support
    1. Implemented in a massive PR that can't be easily reviewed or tested due to lack of availability by other team members.
    2. Not many users asking for it right now.
  2. Full Akka.Streams.StreamRefs support.
    1. Petabridge engineering resources tied up on bug / infrastructure fixes, products, and tutorials. Can't implement it ourselves at this stage.
    2. Should ship what we already have and build on it.
@Aaronontheweb
Copy link
Author

Note: StreamRefs support made it into v1.4.0 already.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment