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 异步
3,029 每月下载量
用于 20 个 crate(9 个直接使用)
260KB
6K SLoC
MadSim
分布式系统的神奇确定性模拟器。
确定性模拟测试
MadSim 是一个类似于 tokio 的 Rust 异步运行时,但具有一个名为 确定性模拟 的关键功能。
其核心思想借鉴了 FoundationDB 和 sled 模拟指南。您的代码应该在模拟器上能够进行确定性执行。模拟器将放大随机性,创造混乱并向您的系统注入故障。许多隐藏的缺陷可能会被揭示,然后您可以确定性地重现它们,直到它们被修复。如果您的系统能够在这种混乱中生存,您将更有信心将您的系统部署到现实世界中。
然而,实现确定性模拟是困难的。在模拟期间,所有与 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