Martin Thompson edited this page Feb 22, 2017 · 54 revisions

Change Log

How do I use Aeron?

  1. Java Programming Guide
  2. C++11 Programming Guide
  3. Best Practices Guide
  4. Monitoring and Debugging
  5. Configuration Options
  6. Channel Specific Configuration
  7. Client Concurrency Model
  8. Message Delivery Assurances

How does Aeron work?

  1. Protocol Specification
  2. Design Overview
  3. Design Principles
  4. Flow and Congestion Control
  5. Media Driver Operation

How do I hack on Aeron?

  1. Hacking on Aeron
  2. Performance Testing


  1. Q: What does the name, Aeron, mean?

    A: In Celtic mythology, Aeron is the god of battle or slaughter. It can be given as a name to a girl or a boy and means “battle ending”. It's the name of this project... and the name of a chair.

  2. Q: Why? Isn't TCP enough for anyone?

    A: There is a need for low latency transport protocols for capital markets use cases. TCP is not suitable for low latency due to the tradeoff between bandwidth usage after loss and responsiveness. In addition, modifying TCP congestion control to make a different tradeoff is fraught with peril. The API provided by TCP in the form of BSD sockets is not suited well to applications that require message boundaries to be preserved as is most non-file transfer use cases, which is, well, pretty much everything in a low latency environment. Also, TCP does not support reliable multicast communication. All these combine to make TCP a very very poor choice as a transport protocol for low latency applications.

  3. Q: Isn't this a brokered architecture? Isn't that bad for latency?

    A: Yes, it is a brokered architecture. However, it is unlike traditional brokered architectures in a number of ways. First, the driver only communicates via shared memory with clients. Secondly, the driver uses dedicated threads on lock-free & wait-free data structures for sending and receiving. Third, the use case primarily is one of those threads being pinned to dedicated CPUs to avoid cache polution and scheduling jitter. And Fourth, the driver can be embedded into an application if desired. Fundamentally, the difference is that whether isolated by threads or processes, the application is separated from the protocol driver logic via core-to-core communication over lock-free & wait-free data structures.

  4. Q: The protocol specification says that Little Endian is used for byte order of fields. Network order is always Big Endian. Why doesn't Aeron use Big Endian?

    A: The primary latency sensitive systems in use today are Little Endian. Adding unnecessary byte reversal would be wasteful. Adding conditional checks for byte ordering to frames would be wasteful. If the need arises in the future, highly doubtful, to be conditionally Big Endian, then the Version field would be used to hold a Big Endian field bit flag.

  5. Q: Why aren't streams identified with Strings instead of numbers?

    A: This is pure efficiency. Handling of strings in some languages is prohibitively expensive. Aeron tries to be as efficient as possible and provide the basic functionality that more complex systems can be composed with. If desired, the application, or a library, could provide String to Stream ID lookup.

  6. Q: When using the built in fragmentation support, is there a maximum limit to the message length?

    A: Messages need to be contiguous when stored in the log/term buffers. Therefore message length must be less than the term length. We have chosen a limit of 1/8th the term buffer length for maximum message length. This is a compromise to limit fragmentation under concurrent publication. Messages larger than this should be chunked before publication to Aeron.

  7. Q: Why only support for Java 8?

    A: Some of the core algorithms for the log and broadcast buffers require access to the Fences API and the new Unsafe intrinsics for getAndAdd() that are implemented at LOCK XADD on x86.

  8. Q: How does release numbering work?

    A: Aeron will follow a <Major>.<Minor>.<Point> release numbering scheme, starting at 1.0.0.
    Major Release: Major API change that can possibly be breaking.
    Minor Release: Significant new features that are API extending and preserving.
    Point Release: Bugfixes and feature refinement.