/// <summary>
        /// Initializes a new default implementation of Raft-based cluster.
        /// </summary>
        /// <param name="configuration">The configuration of the cluster.</param>
        public RaftCluster(NodeConfiguration configuration)
            : base(configuration, out var members)
        {
            Metrics        = configuration.Metrics;
            publicEndPoint = configuration.PublicEndPoint;
            metadata       = ImmutableDictionary.CreateRange(StringComparer.Ordinal, configuration.Metadata);
            clientFactory  = configuration.CreateMemberClient;
            serverFactory  = configuration.CreateServer;

            // create members without starting clients
            foreach (var member in configuration.Members)
            {
                members.Add(configuration.CreateMemberClient(this, member, configuration.Metrics as IClientMetricsCollector));
            }
        }