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 次
465KB
9K SLoC
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
我们还在 发布页面 上提供了针对 Windows、Linux 和 macOS 的预构建二进制文件,您可以将它们添加到您的 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上运行,从而创造最佳的开发者体验。我们还没有完全达到这个目标。
许可证
许可如下之一
- Apache License,版本2.0,(LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或http://opensource.org/licenses/MIT)
任选其一。
依赖项
~45–66MB
~1M SLoC