Skip to content

Design Principles

mjpt777 edited this page Nov 2, 2014 · 20 revisions

To achieve low-latency with minimal variance, while achieving high throughput, it is important to define a set of design principles that guide the development. When a trade off is required then the design principles help guide the decision in choosing between competing alternatives.

Many design principles come to bear on any implementation. Not all design principles require trade-offs but many do. The following set of design principles are key to the design of Aeron and the likely to drive most trade-offs.

  1. Apply Smart Batching in the message path
  2. Strict Separation of Concerns
  3. Garbage free in steady state running
  4. Wait-free algorithms in the message path
  5. Avoid unnecessary data copies
  6. Respect the Single Writer Principle
  7. Prefer unshared state
  8. No exceptional cases in the message path
  9. Non-blocking IO in the message path

Apply Smart Batching in the message path

Stuff

Strict Separation of Concerns

Stuff

Garbage free in steady state running

Stuff

Wait-free algorithms in the message path

Stuff

Avoid unnecessary data copies

Stuff

Respect the Single Writer Principle

Stuff

Prefer unshared state

Stuff

No exceptional cases in the message path

Stuff

Non-blocking IO in the message path

Stuff