Rails on the BEAM:在Erlang虚拟机上运行Ruby架构分析
核心发现
Juntos项目实现了在Erlang VM (BEAM) 上运行Ruby on Rails应用,无需修改任何代码。这是一个突破性的架构创新,为Rails→Phoenix迁移提供了增量路径。
技术细节
QuickBEAM运行时
- QuickBEAM:在Erlang VM中嵌入QuickJS运行时(JavaScript引擎)
- 轻量级运行时:5MB vs Node.js的45MB
- 子毫秒级启动
- 借助OTP实现电信级容错
架构分层
- Browser: Turbo, Stimulus, Action Cable客户端
- Bandit: Elixir HTTP服务器
- QuickBEAM: JavaScript运行时池
- Elixir: :pg分布式pub/sub、SQLite NIF、OTP监督
对比Node.js
| 特性 | Node.js | BEAM |
|---|---|---|
| 崩溃恢复 | 进程重启 | OTP监督自动重启 |
| 分布式pub/sub | 需Redis | :pg原生支持 |
| 并行 | 单线程+cluster | OS线程池 |
| 热升级 | 需pm2 | OTP releases原生 |
创新价值
- 零代码修改:同一Ruby代码可运行在Browser/Node.js/BEAM三种环境
- 增量迁移:从Rails逐步迁移到Phoenix,无需重写
- 容错增强:一个运行时崩溃不影响其他连接
- 分布式原生:添加节点自动扩展pub/sub
为什么重要
这是目前唯一的Rails→Phoenix增量迁移路径。传统方式意味着从头开始。Juntos on BEAM第一天就能运行,并根据需要逐步迁移。