Today we are releasing MeiliES, our event store which is fully implemented in Rust.
Event sourcing is a way to "Capture all changes to an application state as a sequence of events" as Martin Fowler describes it. The first purpose of the server is to publish events of a stream to subscribed clients. A client can also specify from which event number it wants to read, therefore it is possible to recover from a crash by rebuilding a state with new events only.
Since a message queue is not made for event-sourcing, there are few available applications for event sourcing: the main option being EventStore, an event sourcing database made in C#.
So we began using EventStore for our event sourcing needs and ran against some troubles:
- Portability: EventStore is built with C# and uses mono, making it quite difficult to install and run on UNIX
- Support: We asked for information about EventStore commercial support and never got any response
- Stability: the Rust client is not production-ready, and despite making some merge-requests there was still a lot to do while many of the available features were not useful to us.
So we decided to implement our own event store to resolve these issues.
MeiliES is an Event Sourcing database that uses the RESP (REdis Serialization Protocol) to communicate. We use the Redis protocol to simplify clients implementation. The portability problematics are resolved by using a full Rust implementation (we are using Sled as internal storage).
Installation is as simple as doing a
cargo build --release. If you do not want to clone the repository you can download the binaries from the Azure pipeline or run it using docker
docker run -p 6480:6480 --rm getmeili/meilies:latest.