用MoonBit重写PM2,bm2成为Node.js/Bun新部署选择
针对传统进程管理器 PM2 的局限性,开发者 Chenbimo 使用 MoonBit 语言开发了全新工具 bm2。该工具以轻量化、高性能和对 Bun 的原生支持为特色,提供比 PM2 更快的命令响应速...
在 JavaScript 生态系统中,PM2 长期以来是管理 Node.js 应用程序的首选工具。然而,随着技术演进和新需求的出现,这款诞生于十年前的工具逐渐显现出其局限性。特别是在 Bun 这一新兴运行时环境中,PM2 的支持显得力不从心,这促使开发者开始寻找替代方案。
近日,一个名为 bm2 的项目正式发布 0.6.0 版本,成为 Node.js 和 Bun 应用部署的新选择。该项目由开发者 Chenbimo 基于 MoonBit 语言开发,旨在解决现有进程管理工具的痛点。与传统的 PM2 不同,bm2 是一个完全编译后的静态二进制程序,体积小巧且无需依赖外部运行时环境。
作为对比,图中的 pm2 官方页面显示其版本为 7.0.4,需要 23MB 的安装包和 3036 个文件,运行时依赖 Node.js,并且命令响应延迟在 200-400ms 之间。而 bm2 在多个关键指标上展现出显著优势:安装体积仅 5.5MB(包含两个二进制文件),运行时零依赖,命令响应延迟低至 1ms,空闲守护进程内存占用约 2.6MB。
bm2 的核心特性包括对 Bun 和 Node.js 应用的原生支持,提供 fork 模式和 cluster 模式两种部署方式。在 cluster 模式下,bm2 利用 Linux 的 SO_REUSEPORT 特性实现高效的负载均衡,避免了传统模式中 master 进程挂掉导致服务中断的问题。此外,bm2 还具备崩溃自动重启、内存超限自动重启、掉电安全的状态持久化等企业级功能,并内置了跨平台的通知系统,可支持飞书、钉钉、Slack 等多种通知渠道。
开发者在介绍中特别强调,bm2 的设计哲学是"管理器不应该是一个运行时"。与 PM2 需要维护一个独立的 Node.js 进程不同,bm2 编译后就是两个原生二进制文件,升级时只需一条命令即可完成,整个过程对应用无感知。这种设计理念不仅降低了资源占用,也简化了系统的复杂性。
对于开发者而言,bm2 的配置采用 TOML 格式,具有严格的校验机制,有效防止无效配置。通过简单的配置文件,用户可以轻松定义应用程序的名称、工作目录、脚本路径、运行时类型、实例数量、端口设置、内存限制和自愈策略等参数。
当前,bm2 已经在 GitHub 上开源,地址为 https://github.com/chenbimo/moonbit-x。开发者表示,这个仓库将作为 MoonBit 生态项目的集合,未来会继续开发更多实用的开源软件进行分享。
总的来说,bm2 的出现为 Node.js 和 Bun 应用的生产环境部署提供了一个全新的选择。它不仅解决了现有工具的诸多痛点,还通过技术创新提升了系统的稳定性和效率。随着 Bun 生态的不断发展,bm2 有望成为这一领域的重要工具之一。
