返回文章
2019年3月25日
MeiliES - Rust 事件溯源

今天我们发布了 MeiliES,这是一个完全用 Rust 实现的事件存储系统。
事件溯源是一种方式,正如 Martin Fowler 所描述的,它旨在 “将应用程序状态的所有变更捕获为一系列事件”。服务器的首要目的是将事件流发布给已订阅的客户端。客户端还可以指定从哪个事件编号开始读取,因此可以通过仅使用新事件重建状态来从崩溃中恢复。
由于 消息队列不适用于事件溯源,目前可用于事件溯源的应用程序很少:主要选择是 EventStore,一个用 C# 构建的事件溯源数据库。
因此我们开始使用 EventStore 来满足我们的事件溯源需求,但也遇到了一些问题:
- 可移植性:EventStore 用 C# 构建并使用 Mono,这使得它在 UNIX 系统上安装和运行相当困难。
- 支持:我们曾咨询 EventStore 的商业支持信息,但从未收到任何回复。
- 稳定性:Rust 客户端尚未达到生产就绪状态,尽管我们提交了一些合并请求,但仍有很多工作要做,同时许多现有功能对我们而言并不实用。
因此我们决定开发自己的事件存储系统来解决这些问题。
MeiliES 是一个使用 RESP (REdis 序列化协议) 进行通信的 事件溯源数据库。我们使用 Redis 协议来简化客户端的实现。通过采用完整的 Rust 实现(我们使用 Sled 作为内部存储)解决了可移植性问题。
安装非常简单,只需运行 cargo build --release
。如果您不想克隆仓库,可以 从 Azure Pipeline 下载二进制文件,或者使用 Docker 运行:docker run -p 6480:6480 --rm getmeili/meilies:latest
。
如果您对 MeiliES 有任何疑问,可以发推文给 @meilisearch 或在 GitHub 上提交 issue 🎉