今天,我们发布了 MeiliES,我们的事件存储,完全用 Rust 实现。

事件溯源是一种方法,用 Martin Fowler 的描述 来说,"将应用程序状态的所有更改捕获为一系列事件"。该服务器的第一个目的是将流的事件发布到已订阅的客户端。客户端也可以指定它想要从哪个事件编号开始读取,因此,可以通过仅使用新事件重新构建状态来从崩溃中恢复。

由于 消息队列不适合事件溯源,因此事件溯源的可用应用程序很少:主要选项是 EventStore,一个用 C# 编写的事件溯源数据库。
因此,我们开始使用 EventStore 来满足我们的事件溯源需求,并遇到了了一些问题

  • 可移植性:EventStore 是用 C# 构建的,并使用 mono,这使得它在 UNIX 上安装和运行非常困难
  • 支持:我们询问了有关 EventStore 商业支持的信息,但没有得到任何回应
  • 稳定性:Rust 客户端尚未准备好投入生产,尽管我们提出了一些合并请求,但仍有很多工作要做,而许多可用功能对我们来说并没有用。

因此,我们决定实现自己的事件存储来解决这些问题。

MeiliES 是一个事件溯源数据库,它使用RESP(REdis 序列化协议)进行通信。我们使用 Redis 协议来简化客户端的实现。可移植性问题通过使用完整的 Rust 实现(我们使用 Sled 作为内部存储)得到了解决。

安装非常简单,只需执行 cargo build --release。如果你不想克隆存储库,你可以 从 Azure 管道下载二进制文件 或使用 docker 运行它 docker run -p 6480:6480 --rm getmeili/meilies:latest

如果你对 MeiliES 有任何疑问,你可以发送推文 @meilisearch 或在 GitHub 上创建问题 🎉