#actor-model #actor #actor-framework #cqrs #event-sourcing #async

riker

轻松构建快速、高并发且具有弹性的应用程序。Rust 的 Actor 框架。

22 个版本

0.4.2 2020 年 11 月 30 日
0.4.1 2020 年 6 月 19 日
0.4.0 2020 年 5 月 7 日
0.3.2 2019 年 8 月 25 日
0.1.1 2018 年 7 月 22 日

#488并发

Download history 92/week @ 2024-03-13 118/week @ 2024-03-20 104/week @ 2024-03-27 109/week @ 2024-04-03 56/week @ 2024-04-10 46/week @ 2024-04-17 62/week @ 2024-04-24 67/week @ 2024-05-01 69/week @ 2024-05-08 59/week @ 2024-05-15 89/week @ 2024-05-22 82/week @ 2024-05-29 55/week @ 2024-06-05 59/week @ 2024-06-12 73/week @ 2024-06-19 41/week @ 2024-06-26

234 每月下载次数
11 crates 中使用

MIT 许可证

140KB
3.5K SLoC

Riker

Build status MIT licensed Released API docs pre-commit code style: prettier

概述

Riker 是一个用于使用 Rust 语言构建现代、并发和弹性系统的框架。Riker 致力于使并发系统中的状态和行为处理尽可能简单和可扩展。选择 Actor 模型来实现这一目标,因为它提供了熟悉且固有的简单性,同时提供了容易推理的强大保证。Actor 模型还通过使用 Actor 层次和 Actor 监督为弹性系统提供了坚实的基础。

Riker 提供

  • 基于 Actor 的执行运行时
  • Actor 监督以隔离和恢复失败
  • 模块化系统
  • 基于 futures::execution::ThreadPool 的并发
  • 通过 Actor 通道进行发布/订阅消息
  • 消息调度
  • 开箱即用的、可配置的非阻塞日志记录
  • 命令查询责任分离 (CQRS)
  • 轻松运行 futures

网站 | API 文档

示例

Cargo.toml:

[dependencies]
riker = "0.4.1"

main.rs:

use std::time::Duration;
use riker::actors::*;

#[derive(Default)]
struct MyActor;

// implement the Actor trait
impl Actor for MyActor {
    type Msg = String;

    fn recv(&mut self,
                _ctx: &Context<String>,
                msg: String,
                _sender: Sender) {

        println!("Received: {}", msg);
    }
}

// start the system and create an actor
fn main() {
    let sys = ActorSystem::new().unwrap();

    let my_actor = sys.actor_of::<MyActor>("my-actor").unwrap();

    my_actor.tell("Hello my actor!".to_string(), None);

    std::thread::sleep(Duration::from_millis(500));
}

相关项目

提供额外功能的官方 Crates

路线图 & 当前开发中

项目路线图上的下一个主要主题是集群和位置透明度

  • 远程 Actor
  • 支持 TCP 和 UDP
  • 集群(使用向量时钟)
  • 分布式数据(CRDTs)

为什么选择 Riker

瑞克(Riker)是一个功能齐全的actor模型实现,能够扩展到数百或数千个微服务,并且同样能够在资源有限的硬件上运行出色,驱动无人机、物联网和机器人。Rust语言使得这一切成为可能。

Rust赋予了开发者对内存管理的控制权,不需要垃圾回收和运行时开销,同时提供现代语义和表达性语法,如特质系统。结果是,这种语言可以解决Web和物联网的问题。

瑞克在此基础上增加了熟悉的actor模型API,从而使并发、容错的系统编程变得简单。

Rust版本

瑞克目前使用的是最新的Rust Nightly。

贡献

瑞克正在寻找贡献者——加入我们的项目!您不需要是actor、并发系统或甚至Rust的专家。好主意来自每个人。

有多种方式可以做出贡献

  • 提问。参与讨论是做出贡献的好方法。在我们的Gitter上找到我们:Gitter
  • 文档。我们的目标是让并发、容错的系统编程对每个人开放,这从优秀的文档开始。
  • 向瑞克代码库添加内容。无论大小,您的Pull Request都可能产生影响。
  • 模式、数据存储和其他支持包。我们很高兴将链接和完全归功于外部项目,这些项目为瑞克的事件存储模型提供数据库支持或实现常见的actor模式。

pre-commit

在提交代码之前,pre-commit作为git钩子自动检查您的代码。请勿跳过git钩子(即使您执行了travis TravisCI构建,构建仍然会失败)。

您可以使用两种不同的方法运行pre-commit

直接方法

pre-commit run -a

使用yarn或npm

yarn
yarn lint
npm run install
npn run lint

依赖关系

~10MB
~194K SLoC