写点什么

在 LinkedIn 的 Ruby on Rails 和 Node.js 对决

  • 2012-10-10
  • 本文字数:1197 字

    阅读完需:约 4 分钟

鉴于性能和可扩展性方面的原因,LinkedIn 前段时间将其移动设施的后台从 Ruby on Rails 替换成了 Node.js。LinkedIn 团队的一位前成员根据其自身的认识, 对此做出了回应并解释了问题的原委。

LinkedIn 移动工程部门的总监 Kiran Prasad 对 ArsTechnica 说,他们必须重新考虑为LinkedIn 客户移动设备提供服务的后台设施,原因在于尽管只有7-8% 的用户使用他们提供的移动应用程序,但Ruby on Rails 的后台就已经陷入可扩展性问题了。

LinkedIn 评估了三种可行的解决方案:Rails/Event Machine,Python/Twisted 以及 Node.js。按照 Prasad 的说法,Node.js 之所以最后被选中,是因为它提供了一些好处:

  • 更高的性能,在特定场景下 Node.js 能比 Rails 快 20 倍
  • 使用 3 个服务器而不是 30 个就能应对 10 倍的流量增长
  • 前端工程师能够进行后端代码的开发,两个团队实际上合二为一了。

LinkedIn 因为可扩展性舍弃 Rails 的事情在网络上引起了一些反响。LinkedIn 移动团队的一位成员 Ikai Lan 分享了在技术选择方面以及所面临的问题上的一些个人经历

我们选择的是 Ruby on Rails 1.2 版本而部署技术是 Mongrel 。别忘了,这是 2008 年。Mongrel 是 Ruby 的前沿技术。 Phusion Passenger 还没有发布(在此很久才发布的)而 Mongrel 比 FastCGI 早了很多很多年。Mongrel 的问题是什么?它是单线程的。它认为传输速度比 CPU 的效率更重要,这一点我认同。…我们使用 Capistrano 部署,并且是较早使用 nginx 的。…

(后来)我们升级到了 Rails 2.x+ … 并且使用 OAuth 来对 iPhone 客户端进行认证。基于 3-Legged OAuth,我们将 Rails 服务器转化成了 OAuth provider。为什么使用 3-legged OAuth?很简单:我们并不知道自己在做什么。我必须承认这一点。

为移动设备提供服务的服务器托管在 Joyent 上。所以按照 Lan 的说法,当移动应用需要信息时,请求要先发到 Joyent 上,然后再连接提供主 API 服务的 LinkedIn 数据中心:

伙计们,这是一个跨数据中心的请求。运行在单线程的 Rails 的服务器上(每个请求都会阻塞主程序),运行 Mongrel,内存泄露得像筛子(这主要是 gettext 的问题)。Rails 也做过一些事情,像翻译、将 XML 转换成 JSON,我们还在它上面测试了一些针对于移动设备的特性,但除此以外,它并没有做太多的事情。它仅仅比代理强一点。这个代理的最大并发数取决于我们运行了多少了单线程的 Mongrel 服务器。每个 Mongrel 经常要膨胀到 300Mb 的 RAM,所以我们不能大量运行它。

在指出了一系列问题后,Lan 最终承认“v8 确实相当快”但是他还说:“不要认为在构建下一项技术方案的时候必须用 node.js。在移动应用的服务器端,它确实是比 Ruby on Rails 更适合,但是它并不是性能的灵丹妙药。你正在比较的是一种较低级别的服务器和一种一站式的 web 框架。”

关于这个使用 Node.js 取代 Rails 的决定,Hacker News 上有很长的反响讨论

查看英文原文: Ruby on Rails vs. Node.js at LinkedIn

2012-10-10 21:127134

评论

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

基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台

Apache RocketMQ

阿里云 RocketMQ 云原生 MQ 消息队列

全球社交媒体监控未来趋势:从监测走向预测与引导

沃观Wovision

淘宝首位程序员离职,竟投身AI新公司做这事!

王磊

海外红人营销中最常见的五个误区

Wolink

海外推广 达人营销

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

Apache RocketMQ

阿里云 云原生 MQ 消息队列

博时基金基于 RocketMQ 的互联网开放平台 Matrix 架构实践

Apache RocketMQ

阿里云 云原生 MQ 消息队列 Matrix

快手发布Klear-Reasoner:90.5%准确率登顶8B模型榜首,GPPO算法破解RL训练裁剪难题

快手技术

TRAE cue 迎来月度最大更新,模型能力以及时延大幅优化

火山引擎开发者社区

Trae

第一!百度智能云领跑视觉大模型赛道

百度Geek说

移动端即时通讯源码/IM聊天源码RainbowChat,纯原生体验丝滑、全源码易二开

JackJiang

网络编程 IM 即时通信

IoT 小程序:如何破解设备互联的碎片化困局?

Byte_Me

小程序 App IOT Platform IoT

EDA 事件驱动架构与 EventBridge 二三事

Apache RocketMQ

阿里云 Serverless 云原生 消息队列 事件总线

使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息

Apache RocketMQ

阿里的 RocketMQ 如何让双十一峰值之下 0 故障?

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】

申公豹

人工智能

数据、情绪与传播链条:全球社交媒体监控的三重任务

沃观Wovision

CST如何理解和设置频域F-solver频点

思茂信息

cst CST软件 CST Studio Suite

KaiwuDB 邀你共赴 DTCC2025 数据库盛会

KaiwuDB

数据库 DTCC

云原生消息队列RocketMQ:为什么我们选择 RocketMQ

Apache RocketMQ

阿里云 云原生 MQ 消息队列

Vibe Coding火了,人人都是程序员?

禅道项目管理

人工智能 软件开发 AI编程 禅道项目管理软件 vibe coding

向量索引的混合查询方法,你选对了吗?

老纪的技术唠嗑局

索引 OceanBase 社区版 向量化

TRAE cue 背后的挑战与思考

火山引擎开发者社区

火山引擎 大数据 火山引擎 云服务 Trae

行业热点丨一分钟出结果!让创新设计飞起来

Altair RapidMiner

AI 仿真 CAE 网格划分 SimSolid

华金证券携手非凸科技,共话AI赋能交易新未来

非凸科技

基于 RocketMQ 的基金数字化陪伴体系的架构实践

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列 金融行业

RocketMQ在搜狐的创新实践

Apache RocketMQ

kafka RocketMQ 云原生 消息队列

开口就行!TRAE 2.0 语音输入功能

火山引擎开发者社区

AI 火山引擎 Trae

AD域组策略管理

运维有小邓

AD域 AD域管理

阿里云消息队列 RocketMQ 5.0 全新升级:消息、事件、流融合处理平台

Apache RocketMQ

阿里云 RocketMQ 云原生 消息队列

在LinkedIn的Ruby on Rails和Node.js对决_Ruby_Abel Avram_InfoQ精选文章