阅读更多

4顶
0踩

企业架构
记得在2012年10月份的时候,鉴于性能和可扩展性方面的原因,LinkedIn将其移动设施的后台Ruby on Rails替换成了Node.js。那么为什么要做出这样的决策,Node.js又比Ruby强在哪里呢?下面一起来为你解答。

Node.js——基于JavaScript的服务器端软件平台,它的作用主要是用于构建可伸缩的网络应用程序,在过去的几年里它已经风靡于全球众多开发商。Node.js使用一个事件驱动的、非阻塞I/O模型,这使得它的体积更小、效果更佳,适合运行在分布式设备里实时数据密集型的应用程序上。正是由于这些强大的优势,才吸引了大量的网站迁移到Node.js平台。其中就包括LinkedIn。



LinkedIn最初是建立在Ruby平台上,包括6万行代码,但是在2011年下半年的时候,LinkedIn开始利用Node.js来重建他们的核心移动服务,旨在提高它的服务性能。与此同时,重建过程也是一项简化过程,最终将代码缩减到2千行。你可能会问:为什么LinkedIn选择Node.js?主持这项任务的项目负责人Kiran Prasad给出了一些原因。Node.js之所以最后被选中,是因为它提供了一些好处:

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

代码减少的最大原因是我们当前代码库实质上是framework-free,这意味着原来的代码里有很多是冗余的,应该被去掉。

第二个原因主要是和LinkedIn现在正在采用的函数式编程有关,这跟面向对象的实现途径截然不同,不过后来证明函数式编程对于LinkedIn来说是一个重要的转变。在Ruby平台中,最常见的方式是创建一个可以封装每一个通信和类型的对象。Ruby实际上是一种函数式语言,但是它有一个比JavaScript更强大的类和对象的概念。所以在早期的代码库里,开发者有很多抽象层和对象层,而这些抽象层和对象层是在更大的组件化、可分解化和可重用性的前提下创建的。不过现在回想起来,那时候的这些动作都是多余的。

另一个减少代码的重要原因是MVC(model- view-controller)模型背后的动力,至少MVC模型可以在移动设备和Web基础系统之间能够做出更好的选择。在此之前,LinkedIn有很多服务器端呈现,现在随着模板和视图不断地向客户端转移,因此导致大量的呈现代码是多余的,缩减代码是必不可少的。之后出现的情况就是人们对后端技术的信任和依赖程度不断的加重,许多先进的东西也慢慢的出现了。这就意味着没必要像之前那样使用巨大的代码块了。

中国现在是一个拥有庞大网民数量的网络市场,LinkedIn在中国无疑会获得巨大的利润。但是LinkedIn紧随其后的问题是如何应对当前技术架构上的挑战。不过,LinkedIn迁移到Node.js将会一直保持之前的良好表现,并且在扩大市场的前提下将会更加的从容。

英文原文:Pixelstech
  • 大小: 8.9 KB
来自: Pixelstech
4
0
评论 共 17 条 请登录后发表评论
17 楼 caizi12 2014-05-05 11:14
cxh116 写道
yunzhu 写道
LinkedIn真的只有2千行代码???



js的压缩工具都很强的.压缩压缩再压缩,然后就只有一行了


那就别说多少行了,说占多少字节吧。
16 楼 wchaowu 2014-03-30 20:14
欢迎关注node.js微博,http://weibo.com/wchaowu
15 楼 hantsy 2014-03-28 23:50
从 2006 年以上一些 Java 相关会议就可以了解, LinkedIN 的核心技术都是基于 Java的(也在不但的演变),目前 NodeJS 只是用来作为消息推送,移动等一些小部分功能。
14 楼 nhyjq 2014-03-27 22:55
难道大家都没注意到吗?

6万行ruby是整个linkedin的代码

2千行node.js是linkedin的移动服务(原文是mobile service)

根本不可比较


原文本来就是标题党
13 楼 jxqdxm 2014-03-27 16:53
yunzhu 写道
LinkedIn真的只有2千行代码???


这应该当功于后台的node.js服务器,它本身做了很多工作,可以使代码大规模减少.我想你们应该多了解一下node.js服务器的情况,就知道为什么可以减少这么多.
12 楼 white_crucifix 2014-03-26 11:43
remyzane 写道
white_crucifix 写道

能不要秀下限吗?
原本6万行的ruby,如果再用ruby重构一次,也能至少降到千这个级别上
要么你真的不知道这种常年的大量代码的系统,到底是多么像一块海绵,只要你想压就能压的很小


好吧,我承认我真不知道,也真没见过这样的系统(不引入外部组件和实现,纯改业务能改成原来的1/30)。

这等非常之事您都能描述的如此”清楚明白“、“形象生动”,在下真是佩服的五体投地。


哈哈,我是觉得如果要用戏谑的语气表达观点,就一定得说对,不然就要承担一定的代价。其实linkedin和这篇文章都有问题,linked肯定有夸大,这和当年推销自己公司产品时的感觉是一样的;这篇文章(原文)也是标题党,全文讲的并不是nodejs的优势,而是讲的重构的力量,标题博眼球。另外,因为这是业务系统,而且有年份了,只要项目组文化没有“重构”这个概念,代码必然是越来越重复,越来越冗余,到后来即使有人想重构也不愿意担责任而继续复制黏贴。毕竟是业务系统,不需要代码大神,只要实习生就行,像我们遇到的大部分系统一样。这种情况,在中国像移动电信一类的系统就很常见了。
11 楼 remyzane 2014-03-26 10:59
white_crucifix 写道

能不要秀下限吗?
原本6万行的ruby,如果再用ruby重构一次,也能至少降到千这个级别上
要么你真的不知道这种常年的大量代码的系统,到底是多么像一块海绵,只要你想压就能压的很小


好吧,我承认我真不知道,也真没见过这样的系统(不引入外部组件和实现,纯改业务能改成原来的1/30)。

这等非常之事您都能描述的如此”清楚明白“、“形象生动”,在下真是佩服的五体投地。
10 楼 white_crucifix 2014-03-26 09:28
引用
每30行代码里面有29行冗余?


能不要秀下限吗?

只能想到两点:
1.要么这是虚假新闻
2.要么你真的不知道这种常年的大量代码的系统,到底是多么像一块海绵,只要你想压就能压的很小
9 楼 remyzane 2014-03-26 04:41
white_crucifix 写道
remyzane 写道
2千行 js  == 6万行 ruby
笑死个人

把 ruby 解释器的 c 代码行数加进去,
再把 c 编译器的 c和汇编 代码函数也加进去

2千行 js  == 600万行 ruby

js 威武,js 牛逼


能再傻逼点吗?
人家都说了
引用
代码减少的最大原因 ....... 代码里有很多是冗余的,应该被去掉。

原本6万行的ruby,如果再用ruby重构一次,也能至少降到千这个级别上


每30行代码里面有29行冗余?

8 楼 cxh116 2014-03-25 20:06
yunzhu 写道
LinkedIn真的只有2千行代码???



js的压缩工具都很强的.压缩压缩再压缩,然后就只有一行了
7 楼 dohkoos 2014-03-25 18:32
“代码减少的最大原因是我们当前代码库实质上是framework-free,这意味着原来的代码里有很多是冗余的,应该被去掉”

这个算是代码减少??写了一行代码,并且引入了一个有3w行代码的框架,然后不用框架了,把代码扩充到10行,然后就大声宣布我们把代码从3w行减少到了10行。是想制造新闻吗?
6 楼 sohuexe 2014-03-25 18:13
yunzhu 写道
LinkedIn真的只有2千行代码???

这得看多长的行,我可以说1行就能替换原来的6万行呢
5 楼 hefei1986 2014-03-25 14:57
4 楼 white_crucifix 2014-03-25 14:50
remyzane 写道
2千行 js  == 6万行 ruby
笑死个人

把 ruby 解释器的 c 代码行数加进去,
再把 c 编译器的 c和汇编 代码函数也加进去

2千行 js  == 600万行 ruby

js 威武,js 牛逼


能再傻逼点吗?
人家都说了
引用
代码减少的最大原因 ....... 代码里有很多是冗余的,应该被去掉。

原本6万行的ruby,如果再用ruby重构一次,也能至少降到千这个级别上
3 楼 remyzane 2014-03-25 14:44
2千行 js  == 6万行 ruby
笑死个人

把 ruby 解释器的 c 代码行数加进去,
再把 c 编译器的 c和汇编 代码函数也加进去

2千行 js  == 600万行 ruby

js 威武,js 牛逼
2 楼 white_crucifix 2014-03-25 14:41
yunzhu 写道
LinkedIn真的只有2千行代码???


引用
移动设施的后台
1 楼 yunzhu 2014-03-25 14:25
LinkedIn真的只有2千行代码???

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics