NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Phusion Passenger 应用服务器支持 Node.js

  • 2013-11-08
  • 本文字数:2261 字

    阅读完需:约 7 分钟

Phusion Passenger 是一个流行的 Web 应用服务器,它最初是针对 Ruby 的,现在也支持 Node.js 应用。在今年的早些时候该功能被引入了 Passenger 的企业版中,但是现在已经开源并随着最近的 4.0.21 免费版发布。

Passenger 能与 Apache 或者 Nginx Web 服务器集成,旨在成为一个服务、监控和扩展 Web 应用程序的完整解决方案。Phusion 公司的总部位于荷兰,他们宣称在Passenger 中运行 Node.js 应用的好处包括:

  • 多租户——通过最小的配置运行一些应用的能力
  • 监控——自动启动 Node.js 进程、如果进程崩溃了则重启它们
  • 扩展——根据要处理的请求的数量增加或者减少进程的数量
  • 统计——帮助显示运行中进程的状态的工具

Passenger 的作者还指出,与Apache/Nginx 集成还带来了其他的好处,例如:加速了静态文件服务,阻止了很多常见的攻击和慢客户端。

该公告标志着Phusion 向自己宣称的让Passenger 最终成为一个多语言应用服务器的目标更进了一步。去年,Passenger 对 Python 的支持到达了 beta 状态,并于最近完成。紧跟着发布了支持 Node.js 的公告,Phusion 还推出 Meteor (一个基于 Node 的应用框架)支持。

Passenger 本身是用 C++ 编写的,它没有和 Ruby 或者任何其他的语言紧耦合。版本 4 中的一些架构发生了一些变化。Passenger 内部的 I/O 处理器现在是事件驱动的,和 Node.js 的工作原理相似,同时企业版支持混合多进程和多线程执行,这是为了在支持通过 WebSockets 进行流媒体直播这样的功能时最大化资源利用率。

Passenger 还为 Ruby 应用提供了“带外(out of band)”执行这样的功能,用户能够利用它们做其他的事情,例如:将垃圾收集延迟到请求期间,与 Phusion 的 Union Station 产品(一个订阅式应用监控和分析服务)集成。

在流行的 Ruby 应用服务器中,Puma 和 Passenger 相似,它们都喜欢使用线程而不是 Thin 和 Unicom 这样的服务器所使用的事件架构。Phusion 团队最近发布了一篇文章比较了Passenger 和Puma ,而Puma 的作者Evan Phoenix 则在HackerNews 上对此做出了回应

InfoQ 和 Phusion 的 CTO Hongli Lai 进行了一次谈话以讨论 Passenger 最近的更新:

PassengerRuby用户提供了不寻常的特性,例如带外执行,它和语言运行时紧密集成。那么对于Node.jsPython**** 用户而言有相似的功能么?

大部分功能所有支持的语言都可以使用,包括 Node.js 和 Python。从第一天开始,我们就一直在尽量减少对 Ruby 的依赖。虽然我们并没有积极的推广,但是事实是在第一个版本发布几个月之后我们就已经支持 Python。 我们现在还计划在下一次发布时支持 Meteor

Node.js 和 Python 不能使用的功能只有很少几个,或者是因为它们对这些语言没有意义,或者是因为它们需要简单的语言特定的支持代码,而这些代码还没有被编写。Node 和 Python 的垃圾收集器通常并不会忍受像 Ruby 那样的长时间的 GC 暂停,所以我们期望 Node.js 和 Python 用户不需要带外工作。

你认为现在的Node.js支持有多稳定?

我们认为它非常稳定。所有的应用程序测试都通过了,所有测试人员的应用程序都工作良好且没有已知的问题。

Passenger最初的目标是让Ruby部署和PHP部署一样简单,仅需要用户将他们的应用丢放到正确的目录即可。你认为Passenger**** 现在已经完成这一目标了么?

部署一个应用涉及到很多事情,从操作系统和语言运行时的配置到类库依赖的管理和应用程序进程的监控。PHP 的部署之所以容易的原因之一是,Web 服务器能够通过 mod_php 模块自动地处理运行的 PHP 应用程序。
在最初开发 Passenger 的时候,我们的主要计划是运行、监控和管理 Ruby 应用程序。你必须运行多个应用程序服务器进程,让它们监听一个本地 socket,设置 Web 服务器反向代理这簇 sockets,并且设置进程监控工具重启崩溃的进程。而在 Passenger 中,我们开发了一个类似于 mod_php 的机制解决了这些问题。因此在版本 1.0 中我们已经实现了自己的目标:通过将一个 Ruby 应用程序丢放到正确的目录运行它。
PHP 生态系统依然被认为更容易部署的原因是,许多流行的 PHP 应用程序能自动地处理除了应用程序运行之外的其他事情。例如, Wordpress 没有依赖,不需要用户编辑配置文件或者通过漂亮的图形用户界面征求数据库凭证。但是如果你编写自己的 PHP 应用,那么你将会遇到和 Ruby、Node 或者 Python 应用开发人员相同的问题。

有没有托管公司真正地提供开箱即用的Passenger支持?

提供开箱即用的 Passenger 支持的知名托管公司有 Amazon Elastic Beanstalk 和Red Hat OpenShift 。许多其他的提供商(例如 Heroku )对应用程序服务器的选择往往不可知,但是它们依然允许用户很容易地使用Passenger。还有很多较小的托管公司默认使用Passenger,例如 BrightBox SpeedyRails

Ruby应用程序服务器领域有一些强有力的竞争者(ThinUnicornPuma)。那么你认为目前Passenger在这个生态系统中处于什么位置?

其他的 Ruby 应用程序服务器比 Passenger 有更多的范围限制。它们需要用户启动一个或者多个进程,将它们设置为监听 sockets,配置反向代理规则等。对于想要严格控制整个系统的专家而言这并不一定是错误的方法,但是却不同于我们的哲学。我们希望软件易于安装、使用和管理,同时依然可以保持稳定性和灵活性。
但是话说回来,我们都互相学习了很多内容。例如,Passenger 的“智能产卵(smart spawning)”功能在日期上要早于 Unicorn,但是 Passenger 的带外工作功能借鉴了 Unicorn 的,尽管我们对该功能做了改进。每一种服务器都有它自己的优势和劣势。

查看英文原文 Phusion Passenger App Server Gains Node.js Support

2013-11-08 07:412137
用户头像

发布了 321 篇内容, 共 116.1 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

Android 黑科技保活实现原理揭秘,精心整理

android 程序员 移动开发

Android-开发必看---Flutter之全埋点思考与实现,你了解过移动端适配吗

android 程序员 移动开发

Android-茫茫9个月求职路,终于拿满意offer,最新大厂程序员进阶宝典

android 程序员 移动开发

Android-Service-ANR-的监控机制,flutter文档

android 程序员 移动开发

Android-Studio-教程:入门开发第一个程序,2021年最新Android面试点梳理

android 程序员 移动开发

Android-怎么就不卡了呢之Choreographer,android开发实例大全

android 程序员 移动开发

Android-春招-面试经历-2019年,已收藏

android 程序员 移动开发

Android-源码分析-Dalvik-虚拟机创建过程,android棋牌游戏开发

android 程序员 移动开发

Android-Apng动画的播放,大牛手把手动态教学,你都不愿意看吗

android 程序员 移动开发

Android-Binder机制及AIDL使用,字节跳动安卓开发面试题

android 程序员 移动开发

Android-Q来了!谷歌将在数小时内发布测试版,腾讯+华为+阿里面试真题分享

android 程序员 移动开发

Android-系统开发_四大组件篇----探讨-Activity-的生命周期

android 程序员 移动开发

Android-APK瘦身实践:二次瘦身如何再减少大小?,ffmpeg音视频开发实战5

android 程序员 移动开发

Android-_巧_仿蚂蚁森林水滴动效,androidstudiojni开发

android 程序员 移动开发

Android-冷门知识点汇总:你知道哪些Android中的冷门知识?

android 程序员 移动开发

Android---用力过猛!为了组件化改造学习十几家大厂的技术博客

android 程序员 移动开发

Android-ContentProvider实例详解,2021年您应该知道的技术之一

android 程序员 移动开发

Android-Q来了!谷歌将在数小时内发布测试版(1),阿里大牛整理

android 程序员 移动开发

Android-目前最稳定和高效的UI适配方案,flutterandroid版本

android 程序员 移动开发

Android-记一次解决问题的过程:从源码中分析永远是解决问题的最有效方法

android 程序员 移动开发

Android-Q-对-startActivity()-做了限制,怎么适配?,安卓开发自学教程

android 程序员 移动开发

Android-系统开发_四大组件篇----探讨-Activity-的生命周期(1)

android 程序员 移动开发

Android-10分区存储介绍及百度APP适配实践,三年经验月薪50k我是怎么做到的

android 程序员 移动开发

Android-11-正式发布---开发者们的舞台已就绪,flutterpush消息

android 程序员 移动开发

Android-app自动更新总结(已适配9-0),一个回答引发热烈讨论

android 程序员 移动开发

Android&Java面试题大全—金九银十面试必备【上,大厂Android面试真题精选

android 程序员 移动开发

Android-性能优化-ANR-的原因和解决方案,【一步教学,一步到位

android 程序员 移动开发

Android-多渠道打包配置;你了解吗?,移动互联网app开发入门

android 程序员 移动开发

Android---Fragment-的过去、现状与未来,android网络层框架设计实战

android 程序员 移动开发

Android-GC原理探究(深度好文),PDF超过6000页,

android 程序员 移动开发

Android-Studio-4-0-最新进展,这几个新体验太牛逼了!

android 程序员 移动开发

Phusion Passenger应用服务器支持Node.js_Ruby_Felix Holmgren_InfoQ精选文章