2 个版本
0.0.2 | 2024年4月26日 |
---|---|
0.0.1 | 2023年12月18日 |
#681 in 并发
每月 33 次下载
40KB
615 代码行
steelmill
这个库使得在单个 Rust 进程中管理多个长时间运行的服务(称为 Daemon
)变得容易。它针对异步、多线程运行时,并且是无锁的。
Daemons
由一系列 Factory
对象管理。当合适时,工厂使用其父级的 Daemon
实例,从而允许它们共享状态。创建子工厂的主要有两个原因:
- 在测试分布式系统时,您可以使用父工厂来实现回环网络,并提供创建系统所需的任何集群配置状态。然后,每个子
Factory
管理Daemons
,尽管整个设置都在单个操作系统进程中运行,但它们在逻辑上运行在不同的机器上。 - 在处理进程中的复杂生命周期时,您可以使用子工厂的寿命与特定于应用程序的概念相匹配。例如,子工厂对象可以对应于租约,在租约获得/丢失时实例化/拆除,或者您可以使用子工厂来管理可以动态安装或从程序中删除的插件。
除了基本库之外,此包还包含单元测试的辅助工具和一个示例应用程序,该应用程序允许您通过传递命令行参数来选择要实例化的 Daemons
。
异步 Rust 代码的无成本模拟测试比我们希望的更具挑战性。一方面,我们希望能够模拟性能关键的数据路径 API,这意味着它们应通过某种类型的接口调用。另一方面,截至本文撰写时,Rust 不支持异步特质,而工作区(如 async_trait
包)为每个异步函数调用添加了内存分配!
作为替代方案,我们目前建议应用程序使用 cargo 功能标志来编译应用程序以供运行时使用,或用于模拟测试。使用条件编译来提供互斥功能违反了 cargo 的设计,因此我们必须做一些奇怪的事情来使其按预期工作。示例应用程序显示了如何操作,但我们希望异步特质稳定后切换到不同的方法。
依赖项
~7–18MB
~224K SLoC