4个版本 (2个破坏性更新)
0.3.0 | 2020年10月28日 |
---|---|
0.2.0 | 2020年9月28日 |
0.1.1 | 2020年9月9日 |
0.1.0 | 2020年9月7日 |
#4 in #gwasm
用于 gfaas
17KB
339 行
此crate允许您将重负载函数分布式到Golem网络(或未来添加对其支持时的任何其他兼容后端)。
快速开始
使用方法非常直接。在您的Cargo.toml
中,将gfaas
作为依赖项添加
# Cargo.toml
[dependencies]
gfaas = "0.3"
现在,您可以注释一些重负载函数,使其在Golem网络上分发,如下所示
use gfaas::remote_fn;
#[remote_fn]
fn hello(input: String) -> String {
// let's make the input all-caps
input.to_uppercase().to_string()
}
#[actix_rt::main]
async fn main() {
let input = "hey there gfaas";
let output = hello("hey there gfaas".to_string()).await.unwrap();
assert_eq!(input.to_uppercase(), output)
}
为了编译您的代码,您需要在cargo
上使用我们的自定义包装器gfaas
。您可以使用cargo-install
安装此工具,如下所示
cargo install gfaas-cli
然后,您可以使用gfaas
就像使用cargo
一样。因此,要在Golem网络上构建和运行,您将执行
gfaas run
关于gfaas::remote_fn
的说明
当您使用gfaas::remote_fn
属性注释一个函数时,它会被扩展为一个完整的异步函数,该函数可能失败。例如,以下函数
use gfaas::remote_fn;
#[remote_fn]
fn hello(input: String) -> String;
扩展为
async fn hello(input: String) -> Result<String, gfaas::Error>;
因此,重要的是要记住,您需要在异步块中运行该函数,并且为了获取您函数的结果,您需要从外层的Result
类型中解包它。
异步性和Result
存在是由于在节点网络上运行任何分布式计算的固有性质:它可能由于与您的应用程序无关的原因而失败,例如网络中断等。
此外,您的函数的输入和输出参数必须是可序列化的,因此它们应派生自serde::Serialize
和serde::Deserialize
特性。
指定Golem的配置参数
您目前可以通过 gfaas::remote_fn
属性直接设置以下配置参数
- NGNT 中的(最大)预算(默认为 100)
#[remote_fn(budget = 100)]
fn hello(input: String) -> String;
- 秒数超时(默认为 10 分钟)
#[remote_fn(timeout = 600)]
fn hello(input: String) -> String;
- 子网标签(默认为 "devnet-alpha.2")
#[remote_fn(subnet = "devnet-alpha.2")]
fn hello(input: String) -> String;
当然,没有人阻止您一次设置任意数量的参数
#[remote_fn(budget = 10, subnet = "my_subnet")]
fn hello(input: String) -> String;
关于 gfaas
构建工具以及为您的函数添加依赖的说明
需要自定义包装 cargo
的原因是因为带有 gfaas::remote_fn
注解的函数实际上在底层被自动交叉编译成一个 WASI 二进制文件。
此外,由于函数被交叉编译到 WASI,您需要在您的 Rust 工具链中安装 wasm32-wasi
目标。另外,由于相同的原因,并非所有 crate 都与 WASI 兼容,但您可以通过在您的 Cargo.toml
中添加 [gfaas_dependencies]
部分来手动指定您希望函数依赖的 crate。
# Cargo.toml
[package]
author = "Jakub Konka"
[dependecies]
actix = "1"
[gfaas_dependencies]
log = "0.4"
关于在本地运行您的应用程序(用于测试)的说明
众所周知,在将我们的应用程序部署到某些分布式节点网络之前,首先在本地测试应用程序以寻找错误和错误是很方便的。使用 gfaas
也是这样。为了强制您的应用程序在本地运行,只需将 run_local=true
作为参数传递给 gfaas::remote_fn
属性即可
#[remote_fn(run_local = true)]
fn hello(input: String) -> String;
这将在您的机器上为您的所有注解函数启动单独的线程,因此您可以在启动 Golem 网络上的任务之前验证一切是否按预期工作。
示例
有关如何使用此 crate 的几个示例可以在 examples/
目录中找到。所有示例都需要构建 gfaas
构建工具。
依赖关系
~1.5MB
~35K SLoC