20 个版本
0.4.5 | 2022 年 1 月 7 日 |
---|---|
0.4.4 | 2021 年 2 月 1 日 |
0.4.3 | 2020 年 9 月 24 日 |
0.4.1-alpha.1 | 2020 年 7 月 30 日 |
0.1.4-alpha.1 | 2019 年 7 月 27 日 |
在 并发 中排名第 305
每月 131 次下载
用于 7 个 Crates(直接使用 4 个)
620KB
10K SLoC
最新版本 | 许可协议 | ||
文档 [堡垒] | 下载次数 | ||
文档 [堡垒执行器] | Discord | ||
文档 [LightProc] | 构建状态 |
高可用分布式容错运行时
堡垒是一个高可用、容错的运行时系统,具有动态、以调度为导向的轻量级进程模型。它通过轻量级进程实现提供了类似actor模型的并发,并利用所有系统资源,确保最多一次的消息传递。
使用方法
堡垒附带默认的一对一策略根监督器。您可以使用此监督器自动启动受监督的任务。
入门
使用以下方法将 bastion 包含到您的项目中
bastion = "0.4"
文档
官方文档托管在 docs.rs。
示例
查看 入门示例,位于 bastion/examples
示例 覆盖了该包的可能用例。
特性
- 基于消息的通信使该项目成为一个精简的actor系统网络。
- 无需Web服务器、奇怪的恶作剧、强制实现的trait和静态调度。
- 运行时容错使其成为分布式系统的良好候选。
- 如果您想要Erlang的气味和Rust的强大特性,那就对了!
- 完全异步运行时,具有NUMA感知和缓存友好的SMP执行器。
- 尽可能利用硬件局部性。它是为服务器设计的。
- 监督系统使管理生命周期变得容易。
- 在特定条件下终止应用程序或重启子进程。
- 自动成员发现、集群形成以及在集群成员之间的自定义消息传递。
- 使用或不使用zeroconf,从任何地方使用单个actor块启动您的堡垒集群。
- 一种主动IO系统,它除了依赖于
futures
之外不依赖任何其他东西。- Bastion的主动IO具有scatter/gather操作,
io_uring
支持等等...
- Bastion的主动IO具有scatter/gather操作,
保证
- 所有消息最多交付一次。
- 完全异步的系统设计。
- 使用fort的异步程序边界。
- 动态监督监督者(在执行过程中添加子树)
- 在
futures
和lightproc层上管理生命周期。 - 更快的中间件开发。
- 最重要的是容错性。
为什么选择Bastion?
如果您对以下任何问题的回答是肯定的,那么Bastion正是您所需要的
- 我想要主动IO吗?
- 我的项目中需要容错性吗?
- 我讨厌实现奇特的Actor特征吗?
- 我不需要web服务器来运行actor系统,对吧?
- 我想让我的现有代码变得坚不可摧吗?
- 我对编排系统有一些信任问题吗?
- 我想实现自己的应用程序生命周期吗?
Bastion生态系统
Bastion生态系统旨在为您提供自定义的方式。如果您不需要,或者如果您是新手,您可以在不了解底层工作原理的情况下安装并使用Bastion。我们希望很快在这里见到您。
Nuclei
Nuclei是一个可以在没有执行器限制的情况下独立使用的主动IO系统。它也是Bastion IO系统的动力来源。您可以在这里了解更多关于Nuclei的信息,查看Nuclei的仓库以获取更复杂的使用案例。
LightProc
LightProc是Rust的轻量级进程抽象。
它使用带生命周期回调的未来来实现像Erlang一样的进程,并包含基本的pid来识别进程。所有未来中的panic都会传播到上层。
Bastion Executor
Bastion Executor是一个NUMA感知的基于SMP的容错执行器,具有高可用性和面向异步通信。
它与框架实现无关。它使用lightproc来封装并提供对基于未来的工作负载的容错性。您可以使用lightproc与未来一起在Bastion Executor上运行工作负载,而无需拥有框架。
Agnostik
Agnostik是在您的应用程序和异步执行器之间的一层。它允许您在不更改应用程序代码的情况下平滑且容易地切换执行器。有效功能包括runtime_bastion
(默认),runtime_tokio
,runtime_asyncstd
和runtime_nostd
(即将推出)。
运行时架构
运行时由用户构建。只有根监督以电池包含的方式提供。工作代码、工作组冗余、监督者及其监督策略由用户定义。
监督策略定义了如何处理子actor失败,子actor可以失败多久,以及重新创建子actor之前需要等待多长时间。正如其名所示,一对一策略意味着监督策略仅应用于失败的子actor。全一对一策略意味着监督策略也应用于所有actor兄弟。一对一监督用于根监督者,而子组可能具有不同的策略,如rest-for-one或one-for-all。
社区
寻求帮助
请访问我们的Discord或使用StackOverflow
讨论和开发
我们使用Discord进行开发讨论。也请随时在GitHub上提交问题,请求功能,报告bug,评论设计等!更多的互动和想法越好!
为Bastion做出贡献
欢迎所有贡献,包括bug报告、bug修复、文档改进、增强功能和想法。
许可协议
许可证选择以下之一:
- Apache License,版本2.0(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
依赖关系
~7-22MB
~338K SLoC