Terminology

As with most modern complex systems Choria has its own verbiage, this page attempts to define the terminology we use when discussing or writing about Choria.

Action

Agents expose tasks, we call these tasks actions. Each agent like an exim queue management agent might expose many tasks like mailq, rm, retry etc. These are all actions provided by an agent.

Agent

Code that captures a specific API a server wish to expose to Choria Clients. Example agents are package, service, puppet and ones you write your own. Agents expose Actions to clients.

They can be written in Ruby via the MCollective Compatibility Framework or in Golang and soon other options will be made.

Auditing

A log kept by the RPC framework of all actions performed on a server

Autonomous Agent

Autonomous Agent are Finite State Machines that are hosted by Choria on your managed nodes, they run continuously and can react to changes on your fleet or manage external devices such as HVAC, Lights or more.

Authentication

The process of securely identifying a user using PKI

Authorization

Sometimes known as RBAC, a list of rules that are used to decide if a request should be authorized. Builds on Authentication to apply the right rules to the right user.

Broker

A piece of software that facilitates communication between disconnected entities. The Choria Broker incorporates the Choria Network Broker, Choria Federation Broker, Choria Data Adapter

See also Middleware

Choria Data Adapters

A micro-services framework hosted within the Choria Broker process that receives data from subsystems like Registration and republishes it into other frameworks like Stream Processing systems.

Delivered as part of the choria single binary.

Choria Governor

Governor is a system that can control network wide Concurrency for Cron Jobs, Choria internal processes and more.

Choria Federation Broker

A Choria protocol aware router and intelligent gateway that connect several independent Collectives together into 1. Also performs co-processing for Clients significantly reducing the work they have to do.

Delivered as part of the choria single binary.

Choria Key-Value Store

Key-Value Store is a highly available, distributed Key-Value store built into the Choria Broker and integrated with Choria Autonomous Agents and more.

Choria Message Submit

Submit allows local processes like Cron Jobs to submit data to Choria Streams reliably and without maintaining network connections.

Choria Network Broker

A managed instance of the NATS.io Server, capable of serving 50 000 or more connections on a single compute node.

Delivered as part of the choria single binary.

Choria Scout

Scout is a project currently in R&D that will deliver a full feature, secure and highly scalable monitoring system using Choria technologies.

Choria Server

A Server written in Golang. It can run standalone and replace mcollectived but can also be embedded into other Golang projects at compile time.

Delivered as part of the choria single binary.

Choria Service Registry

Resolves, Serves and Transforms DDL files - Choria internal schema documents for accessing remote Agents, Services and more - against a highly available network based service.

Choria Streams

A managed instance of NATS JetStream used to persist metadata, events and other messages. Also used for key-value store, concurrency Governor and more

Client

Software that produces commands for servers to process, typically this would be a computer with the client package installed and someone using the commands like mco package to interact with Agents.

Connector

A plugin of the type MCollective::Connector that handles the communication with the Choria Broker.

Collective

A combination of Servers, Nodes and Middleware all operating in the same Namespace.

Multiple collectives can be built sharing the same Middleware but kept separate.

Data Provider

A plugin that provides data to the discovery subsystem allowing discovery of nodes based on their real time state.

Facts

Discreet bits of information about your nodes. Examples could be the domain name, country, role, operating system release etc. These are often gathered and exposed by Configuration Management systems like Puppet.

Federation

Federation in distributed systems is typically software that combines isolated systems into one larger system. Choria supports Federation allowing you to build a combined Federated Collective that have as its members many isolated Collectives.

See Federations of Collectives

Marionette Collective / MCollective

An Orchestration System written by the author of Choria and sold to Puppet Inc. This system was included in Puppet since 2009 and sunset in late 2018.

Choria builds on many of the ideas, modernizes a lot of the concepts and provide a compatibility framework for MCollective agents while looking towards the future.

Middleware

A publish subscribe based broker used to communicate between Clients and Servers.

See also Broker

Node

The Computer or Operating System that the Server runs on. A compute node or physical machine.

Plugin

Code that lives inside the server and takes on roles like security, connection handling, agents and so forth. See Wikipedia

Registration

A process where the Choria Server publishes on a regular basis data from a node, this could be metadata or in an IoT setting data like temperature, humidity and pressure.

Service Agent

A Choria Agent hosted in a way where only 1 Service will respond to requests, this is foundational for creating configuration services, inventory, AAA signers and more that are reachable over the Middleware while being highly available and scalable.

Server

The mcollectived or choria server daemon, an app server for hosting Agents and managing the connection to your Middleware.

Deployed to every node you wish to manage.

Simple RPC

A Remote Procedure Call system built on top of MCollective. Choria provides a compatibility layer for this so that Agents and CLI Applications users wrote in the past will continue to function.

Subcollective

A server can belong to many Collectives. A Subcollective is a Collective that only a subset of a full collective’s nodes belong to.

Subcolllectives are used to partition networks and to control broadcast domains in high traffic networks.