Skip to content
Alexander Dean edited this page Jul 26, 2015 · 7 revisions

LibEMP has been a long time in the making, both due to incremental designing as well as pure development time. However, this does not mean it is perfect; far from it. While we are busy experimenting and building up from theory, we may have missed practical modifications or additions which lead to a much better system. We urge you to show us our mistakes and we would be overjoyed if you help us fix them! Anything from spotty documentation to blatant errors in the source code.

That being said, welcome to the libemp wiki!

What is LibEMP?

Building distributed systems is hard, it's worse without knowing all the trade offs you are implicitly making ahead of time. LibEMP targets a set of distributed systems for handling event processing, and attempts to both ease their creation as well as making these design decisions apparent and easier to make. LibEMP is a dynamic orchestration library and plug-in framework for event generation, routing, and processing. It handles the fault-tolerance, scaling, and abstractions involved for building your own event generators, routers, and processors.

To learn more start with our High Level Design, or the README.md. For more in-depth, see the many "Notes on" or "Research on" pages to the right-hand side. These will give more explanation into our thought processes and current implementation goals.

Current Use Cases

EMP-D stands for the Extensible Monitoring Platform Daemon, and it builds on top of LibEMP to provide a dynamic subscription language, a clean user interfacing mechanism, and an Interface and Plug-in repository (for different event sources). Its goals are to be a personalizable monitoring platform that can scale from a single laptop, to a cloud spare machines spread over the globe.

LibEMP however does not share these goals exclusively. It attempts to stay out of the way for the parent application to make these goals. For example, a high speed and high throughput message router can benefit from LibEMP abstractions to become distributed. Wrapping multiple instances as LibEMP 'Sinks' not only allows for easier producer routing, but also provides fault-tolerance and faster scaling possibilities.

On the other hand, in the "internet-of-things" world, an easy to wrap interface for all APIs (the LibEMP 'Monitor') can lower the work involved in monitoring and responding to events from things as unique as your toaster or the autonomous drone that patrols your yard's airspace.