#分布式系统 #确定性 #异步

madsim

分布式系统的确定性模拟器

42 个版本

0.2.30 2024 年 6 月 6 日
0.2.27 2024 年 4 月 7 日
0.2.26 2024 年 3 月 18 日
0.2.23 2023 年 10 月 27 日
0.1.3 2021 年 11 月 30 日

#52 in 异步

Download history 3081/week @ 2024-04-26 3401/week @ 2024-05-03 3455/week @ 2024-05-10 3423/week @ 2024-05-17 1957/week @ 2024-05-24 1907/week @ 2024-05-31 1320/week @ 2024-06-07 1668/week @ 2024-06-14 1131/week @ 2024-06-21 993/week @ 2024-06-28 810/week @ 2024-07-05 903/week @ 2024-07-12 615/week @ 2024-07-19 852/week @ 2024-07-26 669/week @ 2024-08-02 775/week @ 2024-08-09

3,029 每月下载量
用于 20 个 crate(9 个直接使用)

Apache-2.0

260KB
6K SLoC

MadSim

Crate Docs CI

分布式系统的神奇确定性模拟器。

确定性模拟测试

MadSim 是一个类似于 tokio 的 Rust 异步运行时,但具有一个名为 确定性模拟 的关键功能。

其核心思想借鉴了 FoundationDBsled 模拟指南。您的代码应该在模拟器上能够进行确定性执行。模拟器将放大随机性,创造混乱并向您的系统注入故障。许多隐藏的缺陷可能会被揭示,然后您可以确定性地重现它们,直到它们被修复。如果您的系统能够在这种混乱中生存,您将更有信心将您的系统部署到现实世界中。

然而,实现确定性模拟是困难的。在模拟期间,所有与 I/O 相关的接口都必须被模拟,并且所有不确定性都应该被消除。该项目就是为了使这一过程变得容易而创建的。

这个 crate 的部分实现受到了 tokio-rs/simulation 的启发。

请参阅博客文章以获取详细说明

用法

将以下行添加到您的 Cargo.toml 中

[dependencies]
madsim = "0.2"

如果您的项目依赖于以下 crate,请用我们的模拟器替换它们

[dependencies]
tokio = { version = "0.2", package = "madsim-tokio" }
tonic = { version = "0.4", package = "madsim-tonic" }
etcd-client = { version = "0.4", package = "madsim-etcd-client" }
rdkafka = { version = "0.3", package = "madsim-rdkafka" }
aws-sdk-s3 = { version = "0.5", package = "madsim-aws-sdk-s3" }

[dev-dependencies]
tonic-build = { version = "0.4", package = "madsim-tonic-build" }

如果您的依赖关系图包含以下 crate,请用我们的补丁版本替换它们

[patch.crates-io]
quanta = { git = "https://github.com/madsim-rs/quanta.git", rev = "948bdc3" }
getrandom = { git = "https://github.com/madsim-rs/getrandom.git", rev = "8daf97e" }
tokio-retry = { git = "https://github.com/madsim-rs/rust-tokio-retry.git", rev = "95e2fd3" }
tokio-postgres = { git = "https://github.com/madsim-rs/rust-postgres.git", rev = "4538cd6" }
tokio-stream = { git = "https://github.com/madsim-rs/tokio.git", rev = "ab251ad" }

在正常构建时,这些 crate 与原始版本相同。

要在模拟器上运行您的代码,请启用配置 madsim

RUSTFLAGS="--cfg madsim" cargo test

现在您已经摆脱了 tokio/tonic,您已经进入了模拟的世界!

我们提供了一套API来控制模拟器。您可以使用它们来终止进程、断开网络、注入故障等。请查阅文档并搜索madsim特性以了解更多用法。

项目

  • MadRaft:由MIT 6.824和PingCAP Talent Plan派生的Raft一致性算法的实验室。
  • RisingWave:一个使用MadSim进行确定性测试的分布式SQL数据库,用于流处理。

许可证

Apache License 2.0

依赖项

~5–16MB
~198K SLoC