Last week I gave a talk at the JAX 2012 conference on Java. The topic of the talk was the LMAX architecture using disruptors. The team at the LMAX exchange found out that their problems were not adequately solved by RDBMS systems or SEDA architectures based on queues. The same went for their playing with Actor concurrency. The main trouble comes from not hardware aligned execution and that a lot of CPU power is spent on managing locks and concurrency with queues.
SEDA architectures are a special kind of concurrency problem. A work unit (web request, trade, …) moves through a system of stages and workers do their work on each stage. Reducing the problem space of concurrency, the idea was to do away with the queues and introduce a new data structure: the ring buffer.
I was first introduced to the LMAX architecture in an excellent blog post from Martin Fowler. My talk was heavily influenced by that blog post, but I’ve added a different perspective in it and make it smoother to digest.
The source code for my talk was written by Lars Grindt and can be found on github.