8 个版本 (5 个重大更新)

0.13.2 2023 年 5 月 3 日
0.12.0 2022 年 11 月 15 日
0.10.0 2022 年 8 月 3 日
0.9.2 2022 年 8 月 3 日
0.3.3 2021 年 4 月 8 日

WebAssembly 中排名第 353

每月下载 21

Apache-2.0/MIT

465KB
9K SLoC

lunatic logo

 

Lunatic 是一个用于构建快速、健壮和可扩展的服务器端应用的通用运行时。它受到 Erlang 的启发,并可以用于任何编译为 WebAssembly 的语言。你可以在 这里 了解更多关于 Lunatic 的动机。

我们目前为以下语言提供了利用 Lunatic 功能的库

如果您想看到支持其他语言或只是关注 Lunatic 的讨论,请 加入我们的 Discord 服务器

支持的功能

  • 创建、取消并等待进程
  • 细粒度进程权限
  • 进程监督
  • 基于通道的消息传递
  • TCP 网络连接
  • 文件系统访问
  • 分布式节点
  • 热重载

安装

如果您已安装 rust (cargo),您可以使用以下命令构建和安装 lunatic 运行时

cargo install lunatic-runtime

macOS 上,您也可以使用 Homebrew

brew tap lunatic-solutions/lunatic
brew install lunatic

我们还在 发布页面 上提供了针对 WindowsLinuxmacOS 的预构建二进制文件,您可以将它们添加到您的 PATH 中。


始终如一,您也可以克隆此存储库并在本地构建它。唯一的依赖项是 Rust 编译器

# Clone the repository
git clone https://github.com/lunatic-solutions/lunatic.git
# Jump into the cloned folder
cd lunatic
# Build and install lunatic
cargo install --path .

用法

安装后,您可以使用 lunatic 二进制文件运行 WASM 模块。

要了解如何构建模块,请查看语言特定的绑定

架构

Lunatic 的设计主要集中在生成超轻量级进程,在其他运行时中也称为绿色线程或 go-routines。Lunatic 的进程创建速度快,内存占用小,调度开销低。它们是为 大量 并发设计的。在您的应用程序中同时运行数以万计的此类进程并不罕见。

进程的一些常见用例包括

  • HTTP 请求处理
  • 长运行请求,如 WebSocket 连接
  • 长运行的后台任务,如发送电子邮件
  • 在沙盒环境中调用不受信任的库

隔离

使得最后一个用例成为可能的是 WebAssembly 的沙盒功能。WebAssembly最初是为了在浏览器中运行而开发的,并在多个层面上提供了非常强大的沙盒功能。Lunatic 的进程继承了这些属性。

每个进程都有自己的堆栈、堆甚至系统调用。如果一个进程失败,它不会影响系统的其他部分。这允许你创建非常强大和容错性高的抽象。

这也适用于一些其他运行时,但Lunatic更进一步,使得直接在你的应用程序中使用C绑定成为可能,而不必担心任何风险。如果C代码中存在任何安全漏洞或崩溃,这些问题只会影响当前执行代码的进程。唯一的要求是C代码可以编译成WebAssembly。

可以给每个进程提供对资源(文件系统、内存、网络连接等)的细粒度访问。这在系统调用级别得到强制执行。

调度

在Lunatic上运行的 所有进程都由一个工作窃取异步执行器抢占性地调度和执行。这让你可以编写简单的阻塞代码,但运行时将确保它实际上永远不会在等待I/O时阻塞线程。

即使你的代码中某处有一个无限循环,调度也始终是公平的,不会永久性地阻塞执行线程。最好的部分是,你不需要做任何特别的事情来实现这一点,运行时将为你处理,无论你使用哪种编程语言。

兼容性

我们打算最终使Lunatic完全兼容WASI。理想情况下,你可以将现有代码编译成WebAssembly,然后在Lunatic上运行,从而创造最佳的开发者体验。我们还没有完全达到这个目标。

许可证

许可如下之一

任选其一。

依赖项

~45–66MB
~1M SLoC