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

actors-rs

轻松构建快速、高度并发和容错的应用程序。Rust 语言的 Actor 框架。

3 个版本

0.1.4 2020 年 4 月 21 日
0.1.1 2020 年 4 月 16 日
0.1.0 2020 年 4 月 16 日

#1022 in 并发

MIT 许可证

3MB
4.5K SLoC

Rust 3.5K SLoC // 0.1% comments JavaScript 753 SLoC // 0.0% comments

Riker

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

注意

这个分支目前是 WIP。一些更改可能已经与文档不同步。希望我将在几周内稳定 API。

概述

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

Riker 提供

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

网站 | API 文档

示例

Cargo.toml:

[dependencies]
actors-rs = "0.1"

main.rs:

use std::time::Duration;
use actors_rs::*;

#[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

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

Rust 使开发者能够控制内存管理,无需垃圾收集和运行时开销,同时提供现代语义和表达式丰富的语法,如特质系统。结果是,一种可以解决 Web 和物联网问题的语言。

瑞克通过提供熟悉的演员模型 API 来增强这一点,从而使并发、健壮的系统编程变得简单。

Rust 版本

瑞克目前使用的是 稳定版

贡献

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

有多种方式可以做出贡献

  • 提问。加入对话是做出贡献的好方法。在 Gitter 上找到我们。
  • 文档。我们的目标是让并发、健壮的系统编程对每个人开放,而这从优秀的文档开始。
  • 为瑞克代码库添加内容。无论大小,您的拉取请求都可能产生影响。
  • 模式、数据存储和其他支持包。我们很高兴链接到并提供对外部项目的全部信用,这些项目为瑞克的事件存储模型提供数据库支持或实现常见的演员模式。

pre-commit

该项目使用 pre-commit git 钩来验证提交的代码 确保您已安装 pre-commit

文档

actors-rs 由 2 部分组成

为了测试这两部分,您需要首先运行 yarn 安装所需软件包,然后

$ yarn start
yarn run v1.19.0
$ lerna run --parallel start --stream
lerna notice cli v3.20.2
lerna info versioning independent
lerna info Executing command in 2 packages: "yarn run start"
actors-rs-mkdocs: $ nopenv mkdocs serve -a localhost:8001
actors-rs-frontpage: $ echo 'visit https://127.0.0.1:8000/ to test frontpage' && gatsby develop --no-color
actors-rs-frontpage: visit https://127.0.0.1:8000/ to test frontpage
actors-rs-mkdocs: INFO    -  Building documentation...
actors-rs-mkdocs: WARNING -  Config value: 'pages'. Warning: The 'pages' configuration option has been deprecated and will be removed in a future release of MkDocs. Use 'nav' instead.
actors-rs-mkdocs: INFO    -  Cleaning site directory
actors-rs-mkdocs: INFO    -  The following pages exist in the docs directory, but are not included in the "nav" configuration:
actors-rs-mkdocs:   - cluster.md
actors-rs-mkdocs:   - io.md
actors-rs-mkdocs:   - persistence.md
actors-rs-mkdocs: WARNING -  A relative path to '../' is included in the 'nav' configuration, which is not found in the documentation files
actors-rs-mkdocs: INFO    -  Documentation built in 0.44 seconds
actors-rs-mkdocs: [I 200413 10:38:05 server:283] Serving on https://127.0.0.1:8001
...
a

依赖关系

~8–11MB
~191K SLoC