-
Notifications
You must be signed in to change notification settings - Fork 891
Design Overview
Currently out of date and needs rewritten
So how does Aeron implement its Protocol? This diagram shows a the communication for a channel with a single producer and a single consumer. Channels support multicast through multiple consumers.
-
Aeron operates over an underlying unreliable media transport, which could be anything, eg: UDP or Infiniband. The Transport Protocol Specification details this communication.
-
Aeron has a Media Driver which implements support for these protocols. It can operate within the same process as the client code or outside. Media drivers can be implemented using Java, C or even FPGAs and sit within either user or kernel space.
-
Communication between the Client API/Stack and the Media Driver for control is implemented as a messaging protocol on a series of ring buffers. Each channel requires two ring buffers, one for sending messages and one for receiving messages. This also includes a control channel for administrative/internal communication. These use memory mapped file based shared memory. The Media Driver can be embedded in the client process if required.
-
The Client API/Stack sits in process. After configuration, the client stack is abstract of the Media Driver. This presents an API to the client code to send or receive messages.
-
Multiple client threads can be reading from, or write to, the channel at any given moment in time.
-
The Log Buffers are the per stream storage for messages published by the client and sent by the driver to the media for replication. These Log Buffers are received by another media driver and rebuilt before being consumed by the client subscribers. A connection is made when publications and subscriptions are paired to replicate a stream of messages. The log buffers are used in a circular fashion keeping a window for replay and divided into terms for management.