2 个版本
0.1.9 | 2021年12月5日 |
---|---|
0.1.8 | 2021年8月4日 |
0.1.5 |
|
0.1.0 |
|
#361 在 构建工具
每月 41 次下载
55KB
999 行
涡轮提升
涡轮提升是 rust 的一个原型式分发接口。它旨在通过从更大的 rust 应用程序中提取和分发特定的函数及其依赖项,使分发更容易、更易于维护。涡轮提升随后充当这些提取的迷你应用程序和主应用程序之间的粘合剂。
请查看 示例 目录,以获取具有工作语法示例的完整项目。维护了一个 外部示例,可作为模板仓库使用。
注意
- 涡轮提升作为一个概念验证,但尚未优化以缩短编译时间/需求。
- 在涡轮提升中,分发功能被作为可选功能,以促进开发和条件性分发。此功能称为“分布式”。
- 涡轮提升使用
reqwest
和actix-web
通过 http 实现(目前没有计划重构以使用更底层的网络协议)。 - 涡轮提升假定网络是安全的 - 函数参数以明文形式发送到微服务。
- 在构建时,项目目录中的任何内容或在项目清单中声明的本地依赖项都可能被打包并通过网络发送到工作进程。
更多信息请访问 项目主页。
当前限制
- 由于依赖于不稳定的 proc_macro::Span 功能,所有使用涡轮提升的程序都需要使用不稳定的夜间编译器标志构建(例如
RUSTFLAGS='--cfg procmacro2_semver_exempt' cargo build
) (跟踪问题)。 - 假定函数是纯函数(不产生副作用,例如写入文件系统或修改全局变量)。
- 要分发函数,其输入和输出必须使用 Serde 可序列化和反序列化。
- 分布式函数不能嵌套在其他函数中。
- 分布式函数不能是方法。
- 分布式函数不能使用名为
main
的其他函数。 - 不在
main.rs
中的分布式函数不能使用在main.rs
中声明的函数。 - 分布式函数不能有
-> impl Trait
类型的类型。 - 即使最终链接器会删除编译完成的二进制文件和分发代码,标记了
on
宏的未使用函数仍然会被编译以进行分发。 - 项目可以在 cargo 清单中列出相对本地依赖,但这些依赖本身不应有易于破坏的相对本地依赖。
- 如果你的程序在初始化时产生副作用,例如全局常量初始化时,这些副作用可能会在每次函数调用时被触发。
- turbolift 在不可复制的 Linux 构建上运行函数,它不会例如固定环境或匹配当前环境的操作系统。
当前项目目标
- 支持 Kubernetes(《[pr](https://github.com/DominicBurkart/turbolift/pull/2)》)。
- 实现 pods 的启动、活力和就绪探测。
- 在设置新服务时,通过就绪检查等待 pod 活跃,而不是仅仅睡眠(《[代码位置](https://github.com/DominicBurkart/turbolift/blob/6a63d09afcd6e7234e62bcb797d31730cf49aacf/turbolift_internals/src/kubernetes.rs#L257)》)。
- 支持其他目标的路标。
- 只有在标记的情况下才使用分布式配置(例如,在
cargo build --features "distributed"
)。否则,只需将标记的函数转换为异步函数(以提供相同的 API),但不要构建任何微服务或修改任何代码。 - 将跨架构编译测试构建到 CI 中。
依赖项
约 88MB
约 1.5M SLoC