
io.aeron.cluster.package-info Maven / Gradle / Ivy
Show all versions of aeron-all Show documentation
/*
* Copyright 2014-2024 Real Logic Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Aeron Cluster provides support for fault-tolerant services as replicated state machines based on the
* Raft consensus algorithm.
*
* The purpose of Aeron Cluster is to aggregate and sequence streams from cluster clients into a single log. A number of
* nodes will replicate and archive the log to achieve fault tolerance.
* {@link io.aeron.cluster.service.ClusteredService}s deterministically process the log and respond to cluster clients.
*
* Aeron Cluster works on the concept of a strong leader using an adaptation of the
* Raft algorithm. The leader sequences the log and is
* responsible for replicating it to other cluster members known as followers.
*
* A number of components make up Aeron Cluster. Central is the {@link io.aeron.cluster.ConsensusModule} which sequences
* the log and coordinates consensus for the recording of the sequenced log to persistent storage, and the services
* consuming the log across cluster members. Aeron {@link io.aeron.archive.Archive} records the log to durable storage.
* Services consume the log once a majority of the cluster members have safely recorded the log to durable storage.
*
* To enable fast recovery, the services and consensus module can take a snapshot of their state as of a given log
* position thus enabling recovery by loading the most recent snapshot and replaying logs from that point forward.
* Snapshots are recorded as streams in the {@link io.aeron.archive.Archive} for local and remote replay so that a
* distributed file system is not required.
*
Usage
* The cluster can run in various configurations:
*
* -
* Single Node: For development, debugging, or when a sequenced and archived log on a single node is
* sufficient.
*
* -
* Appointed Leader: A leader of the cluster can be appointed via configuration without requiring an
* election. In the event of a leader failure then a follower will have to be manually appointed the new leader.
* This is not the recommended way to use Cluster. Automatic elections are more reliable.
*
* -
* Automatic Elections: Automatic elections (default) can be enabled to have a leader elected at random
* from the members with the most up to date log.
*
*
*
* The majority of cluster members determine consensus. Clusters should typically be 3 or 5 in population size.
* However, 2 node clusters are supported whereby both members must agree the log and in the event of failure the
* remaining member must be manually reconfigured as a single node cluster to progress.
*
Protocol
* Messages are specified using SBE
* in this schema
* aeron-cluster-codecs.xml
*/
package io.aeron.cluster;