Skip to content

Design Overview

Richard Warburton edited this page Mar 17, 2014 · 12 revisions

Design Overview

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.

![Bicycle Diagram](https://github.com/real-logic/Aeron/wiki/img/Aeron Design Diagram.png)

0 - Aeron uses an underlying unreliable media protocol, which could be anything, eg: UDP or Infiniband. 1 - 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. 2 - Communication between the Client API/Stack and the Media Driver 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. 3 - 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. 4 - Multiple client threads can be reading from or write to the channel at given moment in time.