Skip to content

Terminology

Cluster

Cluster is a set of computer nodes working together to achieve high availability and fault tolerance, acting as a single system. The nodes in a cluster can host services, and resources that are distributed among them. Clustering is a common approach used to enhance the performance, availability, and scalability of software applications and services.

Clusters can be geographically distributed across different data centers, cloud providers, regions, or even continents. This geographic distribution helps in reducing latency, increasing redundancy, and ensuring data locality for improved application performance and user experience.

A single cluster is called a site and it is identified by site_id.

Node

Node serves as the fundamental building unit of a cluster, representing either a physical or a virtual machine (server) that runs Linux and supports containerization through Docker or Podman.

Each node within a cluster is assigned a unique identifier, node_id. This node_id not only distinguishes each node but also doubles as the hostname of the node, aiding in network communications and node management within the cluster.

The node is managed by the ASAB Governator microservice.

Tip

node_id always resolves to the IP address of the node at each location of the cluster.

Core node

Core node contributes to the shared consensus of the cluster. This consensus is crucial for maintaining the integrity, consistency, and synchronization of data and operations across the cluster.

Core nodes are instrumental in achieving consensus, a process that ensures all nodes in the cluster agree on the state of data and the sequence of transactions. This agreement is vital for Data Integrity, Transaction Order and Fault Tolerance.

Typically, the first three nodes added to the cluster are designated as core nodes. This number is chosen to balance the need for redundancy and the desire to avoid the overhead of coordinating a large number of nodes. Having three core nodes means that the system can tolerate the failure of one node while still achieving consensus.

Warning

In larger deployments, the number of core nodes MUST BE configured as an odd number, such as 5, 7, 9 and so on, to prevent split-brain scenarios and ensure a majority can be reached for consensus.

Peripheral node

Peripheral node, as opposed to a core node, does not participate in forming the shared consensus of the cluster. Its primary function is to provide data services, execute computations, host services, ot it has other supplementary roles, extending the capabilities and capacity of the cluster.

While peripheral nodes do not contribute to the consensus-building of the cluster, they maintain a symbiotic relationship with core nodes.

Service

A service is a collection of microservices that provides a cluster-wide functionality. The example is ASAB Library, Zookeeper, Apache Kafka, Elasticsearch and so on.

Each service has its unique identifier within the cluster, called service_id.

Instance

Instance represent a single container that runs a given service. Respectivelly, if a service is scheduled to run on multiple nodes of the cluster, each running entity is the instance of a given service.

Each instance has its unique identifier within the cluster, called instance_id. Each instance also has its number, called instance_no. Each instance is also tagged by respective service_id and node_id.

Tip

instance_no can be also a string!

Sherpa

Sherpa is an auxiliary container launched next to the instances of some specific services. It runs only for a brief time, till the sherpa task is completed.

Typical use case for sherpa is an initial setup of the database.

Model

Model represents a wanted layout of the cluster.

It is one or multiple YAML files stored in the Library.

ASAB Maestro manages the cluster by applying the model. All services listed in the model are run or updated by ASAB Remote Control and ASAB Governator services.

Model file name model.yaml is meant for editing. Other files are created automatically through other LogMan.io components.

Descriptor

Descriptor is a YAML file living in the Library saying how a service, more precisely an instance of the service, should be created and launched.

Application

Application is a cluster level set of descriptors and their versions.

Global Version

Each Application can have multiple global versions. Each version is specified in a version file stored in the Library which stores version for each service of the application.

Tech / Technology

Tech stands for a technology. The technology is a specific type of the service (ie NGINX, Mongo) that provides some resources to other services.