API Reference Beethoven v0.3.7
Modules
A Decentralized failover and peer-to-peer node finder for Elixir. Allows Elixir nodes to find each other automatically. Once connected, they can coordinate to delegate roles and tasks between the nodes in the cluster. Written using only the Elixir and Erlang standard library.
Allocator is a stack of processes that facilitate the aggregation of telemetry signals
to determine how busy a given Beethoven
node is.
Behaviour to define signals via the signal()
macro.
Crunches signal data and generates an allocation (or busy-score) score for the current node.
Signal data is pulled from the Beethoven.Allocator.Ingress.Cache
ets table.
The aggregated score is stored in the Beethoven.Allocator.Tracker
Mnesia table.
This PID will refresh the score anytime Beethoven.Allocator.Ingress
pushes an update and sends a cast to this PID.
GenServer to handle ingress of signal data.
Data sent to this Server is pushed into :ets
for use by Beethoven.Allocator.Cruncher
.
Azure Platform awareness for the node.
If the app is not in Azure, genserver will response :no_azure
to all calls.
Beacon Server is used to help other Beethoven node find the cluster.
This is the TCP Listener the Beethoven.Locator
server will check for.
Core Service for Beethoven. Watches other nodes within the cluster and cascade updates across the beethoven PIDs as needed.
A modified version of the built-in GenServer
.
Specialized for Beethoven's No-Master design; this GenServer will initialize a Mnesia table on creation.
These tables act as the primary state for the distributed process.
Supports most GenServer logic and callbacks.
Supervisor for the HwMon stack of PIDs.
These PIDs log historical hardware consumption and signal changes to Beethoven.Allocator.Ingress
.
Tracks historical CPU and RAM usage as sampled by HwMon.Server
.
DistrServer to monitor hardware resources and sends signals to Beethoven.Allocator
plus the integrated Mnesia table.
Module to handle scanning IPV4 addresses within a network.
GenServer to handle searching for other Beethoven nodes or clusters.
This Locator server's goal is to find a BeaconServer on another node.
Once connected, they will communicate with each other via the Beethoven.SeekChat
module.
Generic Library to simplify certain Mnesia tasks.
Simple PID to track when Beethoven has fully initialized. Usually just called from RoleServer when it has ran out of work.
Server PID that manages role assignment across the cluster.
Leveraging the Mnesia integration with DistrServer
,
these processes will be ephemeral and keep all state within Mnesia.
Module to simplify the interface between nodes during the locator Seeking flow.
Beethoven Allocator signals for the Beethoven service itself.
Supervisor for core services. These are the services that need to start once Locator has determined the cluster state.
Test role to test RoleServer operations.
Example role that leverages DistrServer instead of GenServer.
Module for generic utilities.