Architecture

A controller that decides, nodes that execute.

The controller carries no pictures. It holds the inventory, prepares the hosts, places the containers and watches. Real-time work lives on the nodes, as close to the network card as it can get.

01

Overview

Three network planes, one shared clock, one bus per node.

ControllerOrchestration, database, monitoringFlask · SQLite · :5000Standby controllerWarm-standby replication, manual promotionCONTROL PLANENode ANode agent :9100 · Docker2110_iomultiviewIsolated cores · hugepages · PTPNode BNode agent :9100 · DockermultiviewstreamerNVIDIA GPU · macvlanNode CNode agent :9100 · DockerpyramiddelayStorage · mediaRDMARDMAST 2110 MEDIA PLANEPTP grandmasterIEEE 1588 · SMPTE ST 2059Media switchIGMP multicast · one group per flowThird-party equipmentCameras, switchers, 2110 gateways
The control plane carries orchestration. The media plane carries ST 2110. Between nodes, the memory bus replicates over RDMA.
02

Controller

A central web application with no production container on board.

Controller
RoleControl plane only: inventory, deployment, wiring, monitoring, broadcast protocols.
StackPython 3.13, Flask, SQLite, a fixed-period monitoring thread.
InterfaceA single web application, translated into French and English and open to further languages, three themes, per-user permissions.
ExtensionContainer types and integrations are separate modules, versioned independently.
SecurityNo site-specific value in versioned code, a token per node, a token per container injected at start-up, an audit trail of actions.
03

Nodes

Enrolled Debian servers, driven by their agent.

Node
AgentA local HTTP service with its own token, responsible for the Docker lifecycle and host operations.
PreparationHugepages, network-card profile, queues, binding ports to the DPDK driver, core isolation: all of it is laid down by the controller.
CapabilitiesA node declares what it can do: 2110 engine, compute, media, GPU. Placement takes that into account.
AutonomyIf the controller goes away, the agent watches over the deployed scripts and restarts them.
InstallationDedicated installer, UEFI HTTP network boot or USB media, remote hands via the management controller.
Container networkA macvlan segment, one address per container, gateway derived from the node’s default route.
04

Memory bus and replication

Inside a node, essences do not go back onto the network.

Video, audio and ancillary flows live in shared memory, in a domain common to every container on the node. A producer writes its grains; consumers read them with no network copy and no intermediate encode. A consumer that loses its producer reattaches on its own when the producer comes back.

RDMA page: an active replication link between two nodes and the state of the cards
Between nodes, replication runs over RDMA. Every link carries its flow, its physical path, its format, its measured throughput and its expected rate.
MXL bus
OriginThe bus is the Media eXchange Layer, the exchange layer called for by the EBU Dynamic Media Facility Reference Architecture. Bobi.Studio builds on its SDK, published under Apache 2.0, rather than inventing a proprietary transport.
DomainNode-local shared memory, with grain indexing derived from time.
EssencesPlanar video, multichannel audio, ancillary data.
InteroperabilityThe bus is an open format: other implementations read and write the same flows.
Inter-nodeRDMA replication, multi-port distribution, link reconciliation.
05

The three network planes

Separate because they share neither their constraints nor their failure modes.

Planes
ST 2110 mediaDedicated card, kernel-bypass driver, multicast, PTP. No management traffic crosses it.
ContainersA macvlan segment, one address per container, reachable directly by the controller.
ControlThe node’s fixed address, set at install time, carrying the agent and administration.

Multicast is allocated centrally, one group per flow, with atomic reservation: a group belongs to a single flow, and IGMP membership is applied on the interface carrying it.

Only the media plane is specific to ST 2110. An installation that comes in and goes out over SRT or RTMP uses just the container segment and the control plane: no dedicated card, no PTP, no multicast.

06

Clock

Without a shared clock there is no chain, only flows.

Every node disciplines its clock to the site grandmaster over PTP. The controller samples the offset, keeps the history and alerts on a loss of lock. Session descriptions carry the clock reference of the chain.

PTP
ProtocolIEEE 1588 with the SMPTE ST 2059 broadcast profile.
Per nodeSynchronisation daemons driven by the controller, with state and offset reported continuously.
2110 engineOn kernel-bypass nodes, the card’s clock is held by the engine itself.
TrackingOffset history, lock-loss episodes, contextualised alerting.
07

Resources

We measure. We do not guess.

Node health: per-core occupancy, per-container consumption, memory, RDMA, disks, temperatures
The per-core graph separates the 2110 engine’s lcores, pinned containers, the free pool and what is left to the system. The table says who consumes what, with the starvation and the pinning each container actually obtained.

Every container type carries a consumption profile, established under real production load. The allocator reserves cores inside the node’s isolated band with memory topology in mind, then a second mechanism checks the placement actually obtained: band respected, affinity applied, threads distributed. What the calculation predicts and what the machine does are two different things, and both are shown.

Node memory bandwidth is measured separately. On servers where it is the limiting factor, it explains ceilings that the core count alone cannot.

08

High availability

The standby says it is alone. It does not promote itself.

Two controllers can run as a pair, the active one replicating its state to the standby. The standby polls the active continuously; after a delay with no answer, an indicator visible on every page leads straight to promotion.

Handing over control stays a human act, deliberately: with no third witness, a controller cut off from the network cannot tell “the other one is dead” from “I am isolated”, and promoting itself in doubt would put two pilots on one production. The management address, on the other hand, moves on its own.

09

Hardware requirements

What to plan for before buying.

Requirements
ControllerA Debian 13 machine with Python 3.13, physical or virtual. No real-time constraint.
Compute nodeDebian 13 with Docker. Isolated cores and memory bandwidth matter more than raw clock speed.
2110 nodeAn Intel E810 network card for the media plane, hugepages, isolated cores, PTP access. Required only for nodes carrying 2110 ports.
GPUAn optional NVIDIA card. It offloads the CPU: NVENC hardware encoding for outputs and monitoring, accelerated composition. One node therefore sustains more containers.
RDMARoCE-capable cards for bus replication between nodes.
NetworkA media plane carrying multicast and PTP, a segment for containers, a control plane.

The infrastructure guide in the repository details CPU, memory, network card and redundancy choices, along with the points that make an installation fail.

Read the detail at the source.

The infrastructure guide, the install guide, the node-agent contract and the high-availability documentation are all versioned with the code.