Akka.Coordination.Azure 1.0.0-beta1

Prefix Reserved
This is a prerelease version of Akka.Coordination.Azure.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Akka.Coordination.Azure --version 1.0.0-beta1                
NuGet\Install-Package Akka.Coordination.Azure -Version 1.0.0-beta1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Akka.Coordination.Azure" Version="1.0.0-beta1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Akka.Coordination.Azure --version 1.0.0-beta1                
#r "nuget: Akka.Coordination.Azure, 1.0.0-beta1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Akka.Coordination.Azure as a Cake Addin
#addin nuget:?package=Akka.Coordination.Azure&version=1.0.0-beta1&prerelease

// Install Akka.Coordination.Azure as a Cake Tool
#tool nuget:?package=Akka.Coordination.Azure&version=1.0.0-beta1&prerelease                

Azure Blob Storage Lease

This module is an implementation of an Akka Coordination Lease backed by Azure Blob Storage in Azure. Resources in Azure can offer concurrency control and consistency that have been used to build a distributed lease/lock.

A lease can be used for:

  • Split Brain Resolver. An additional safety measure so that only one SBR instance can make the decision to remain up.
  • Cluster Singleton. A singleton manager can be configured to acquire a lease before creating the singleton.
  • Cluster Sharding. Each Shard can be configured to acquire a lease before creating entity actors.

In all cases the use of the lease increases the consistency of the feature. However, as the Azure Blob Storage server can also be subject to failure and network issues any use of this lease can reduce availability.

Lease Instances

  • With Split Brain Resolver there will be one lease per Akka Cluster
  • With multiple Akka Clusters using SBRs in the same namespace, you must ensure different ActorSystem names because they all need a separate lease.
  • With Cluster Sharding and Cluster Singleton there will be more leases
    • For Cluster Singleton there will be one per singleton.
    • For Cluster Sharding, there will be one per shard per type.

Configuring

Enable In SBR Using Akka.Cluster.Hosting

To enable Azure lease inside SBR, you need to pass a LeaseMajorityOption instance into the second parameter of the WithClustering() extension method and specify that you're using the Azure lease implementation.

using var host = new HostBuilder()
    .ConfigureServices((context, services) =>
    {
        services.AddAkka("azureLeaseDemo", (builder, provider) =>
        {
            builder
                .WithRemoting("<akka-node-host-name-or-ip>", 4053)
                .WithClustering(sbrOption: new LeaseMajorityOption
                {
                    LeaseImplementation = AzureLeaseOption.Instance,
                    LeaseName = "myActorSystem-akka-sbr"
                })
                .WithAzureLease("<your-Azure-Blob-Storage-connection-string>");
        });
    }).Build();

await host.RunAsync();

Enable In SBR Using HOCON Configuration

To enable the lease for use within SBR:

akka.cluster {
    downing-provider-class = "Akka.Cluster.SBR.SplitBrainResolverProvider, Akka.Cluster"
    split-brain-resolver {
        active-strategy = lease-majority
        lease-majority {
            lease-implementation = "akka.coordination.lease.azure"
        }
    }
}

Full configuration options

akka.coordination.lease.azure {

lease-class = "Akka.Coordination.Azure.AzureLease, Akka.Coordination.Azure"

connection-string = ""

# Container to create the lock in.
container-name = "akka-coordination-lease"

# How often to write time into CRD so that if the holder crashes
# another node can take the lease after a given timeout. If left blank then the default is
# max(5s, heartbeat-timeout / 10) which will be 12s with the default heartbeat-timeout
heartbeat-interval = ""

# How long a lease must not be updated before another node can assume the holder has crashed.
# If the lease holder hasn't crashed its next heart beat will fail due to the version
# having been updated
heartbeat-timeout = 120s

# The individual timeout for each HTTP request. Defaults to 2/5 of the lease-operation-timeout
# Can't be greater than then lease-operation-timeout
api-service-request-timeout = ""

}

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.5.31 161 11/11/2024
1.5.30 1,229 10/3/2024
1.5.29 110 10/1/2024
1.5.27 401 7/30/2024
1.5.26.1 1,491 7/16/2024
1.5.26 120 7/15/2024
1.5.26-beta3 71 7/2/2024
1.5.26-beta2 96 6/28/2024
1.5.26-beta1 89 6/27/2024
1.5.25.1 625 6/25/2024
1.5.25 129 6/17/2024
1.5.24 221 6/11/2024
1.5.19 1,140 4/17/2024
1.5.18-beta2 67 3/27/2024
1.5.18-beta1 85 3/20/2024
1.5.17.1 707 3/4/2024
1.5.15 2,334 1/12/2024
1.5.7 2,741 5/23/2023
1.5.5 163 5/8/2023
1.5.0 969 3/2/2023
1.5.0-beta6 148 3/1/2023
1.5.0-alpha4 138 2/17/2023
1.0.3 423 2/13/2023
1.0.2 286 2/8/2023
1.0.1 304 1/31/2023
1.0.0 307 1/18/2023
1.0.0-beta2 172 1/7/2023
1.0.0-beta1 175 1/6/2023
0.3.0-beta4 157 12/2/2022
0.3.0-beta3 225 11/7/2022
0.3.0-beta2 211 10/20/2022
0.3.0-beta1 161 10/6/2022

Update to [Akka.NET v1.4.48](https://github.com/akkadotnet/akka.net/releases/tag/1.4.48)
[Replace original JVM web routing port with Ceen routing](https://github.com/akkadotnet/Akka.Management/pull/1152)
[Delete health check endpoint and merge cluster bootstrap endpoint to akka.management](https://github.com/akkadotnet/Akka.Management/pull/1053)
[[Coordination.Kubernetes] Hosting extension now accepts options class and not setup](https://github.com/akkadotnet/Akka.Management/pull/1172)
[[Coordination.Azure] Hosting extension now accepts options class and not setup](https://github.com/akkadotnet/Akka.Management/pull/1181)
Update dependency NuGet package versions
[Bump Petabridge.Cmd from 1.2.0 to 1.2.1](https://github.com/akkadotnet/Akka.Management/pull/1071)
[Bump Akka.Hosting from 0.5.2-beta1 to 1.0.0](https://github.com/akkadotnet/Akka.Management/pull/1154)
[Bump AWSSDK.S3 from 3.7.101.30 to 3.7.101.33](https://github.com/akkadotnet/Akka.Management/pull/1076)
[Bump AWSSDK.ECS from 3.7.102.8 to 3.7.102.11](https://github.com/akkadotnet/Akka.Management/pull/1077)
[Bump AWSSDK.CloudFormation from 3.7.102.9 to 3.7.102.11](https://github.com/akkadotnet/Akka.Management/pull/1074)
[Bump AWSSDK.EC2 from 3.7.111.1 to 3.7.113](https://github.com/akkadotnet/Akka.Management/pull/1067)
[Bump Google.Protobuf from 3.21.11 to 3.21.12](https://github.com/akkadotnet/Akka.Management/pull/1073)
API breaking change**
To make the API consistent with other `Akka.Hosting` plugin ecosystem, `Akka.Coordination.Kubernetes` `WithKubernetesLease()` now takes `KubernetesLeaseOption` as its argument, not `KubernetesLeaseSetup`.
To make the API consistent with other `Akka.Hosting` plugin ecosystem, `Akka.Coordination.Azure` `WithAzureLease()` now takes `AzureLeaseOption` as its argument, not `AzureLeaseSetup`.
Health check functions are consolidated into `Akka.HealthCheck`, the default health check endpoint are removed from `Akka.Management`
`Akka.Management.Cluster.Bootstrap` endpoint is merged into `Akka.Management` and became the default endpoint.