写点什么

在 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:126697

评论

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

透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS视频原生应用开发平台

阿里云CloudImagine

云计算 阿里云 音视频 低代买

首届LoongArch生态创新大会成功召开,筑巢引凤共建信息产业命运共同体

OpenAnolis小助手

开源 芯片 白皮书

边缘网络 eBPF 超能力:eBPF map 原理与性能解析

火山引擎边缘云

低代码实现探索(十六)业务勾连复杂验证器

零道云-混合式低代码平台

圆桌对话:云时代下,企业运维面临的挑战与机遇

阿里云弹性计算

运维峰会 圆桌对话

在线常用crontab表达式大全验证解析

入门小站

工具

数云运维总监陈延宗:基于阿里云计算巢,数云CRM一键云上交付

阿里云弹性计算

弹性计算 年度峰会 计算巢

2021年12月券商App行情刷新及交易体验评测报告

博睿数据

知识库建设的5个步骤

爱吃小舅的鱼

呼叫医生云! Amazon HealthLake 现已正式上线

亚马逊云科技 (Amazon Web Services)

AI ML

Mycat 作为代理服务端的小知识点

CRMEB

模块9作业

Asha

只需5步!在轻量应用服务器部署Hexo博客

阿里云弹性计算

Hexo 轻量征文 用户投稿

转换匹配患者记录,看Amazon Lake Formation FindMatches显神通!

亚马逊云科技 (Amazon Web Services)

analytics

失去了SDK,云计算将会怎样?

亚马逊云科技 (Amazon Web Services)

计算

腾讯云 AI 视觉产品基于流计算 Oceanus(Flink)的计费数据去重尝试

腾讯云大数据

AI flink window

百度APP浏览内核资源加载优化实践 -- ResourceScheduler 调优机制

百度开发者中心

百度app

VuePress 博客优化之开启 Gzip 压缩

冴羽

nginx 前端 后端 博客 vuepress

聊聊Netty那些事儿之Reactor在Netty中的实现(创建篇)

bin的技术小屋

网络编程 socket nio netty java 编程

恒源云(GPUSHARE)_语音识别与语义处理领域之低资源机器翻译综述

恒源云

机器翻译 语音识别

专注于最有价值的事情!——亚马逊云科技首席科学家工作心得分享

亚马逊云科技 (Amazon Web Services)

Date

吐槽一下网站

你?

如何使团队的git log更优雅

阿呆

#GitLab

Flink 实践教程-进阶(6):CEP 复杂事件处理

腾讯云大数据

流计算 Oceanus

工业生产中的“主动刹车”,是怎么实现的?

脑极体

【网络安全】手把手给大家演练红队渗透项目

H

网络安全 渗透测试·

Linux之df命令

入门小站

Linux

阿里云手机正式公测,定义手机全新接入方式

阿里云弹性计算

阿里云 弹性云手机

腾讯云原生实时数仓建设实践

腾讯云大数据

flink window 流计算 Oceanus

物联网场景中灵活实施对设备的控制管理

亚马逊云科技 (Amazon Web Services)

代码审计思路之PHP代码审计

网络安全学海

网络安全 信息安全 渗透测试 安全漏洞 代码审计

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