阅读更多

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千行代码???

发表评论

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

相关推荐

  • php 前途 ruby on railsnodejs,LinkedIn缘何抛弃Ruby,转投NodeJS怀抱?

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

  • 优秀的计算机编程类博客 和 文章 转

    研发周报:LinkedIn缘何抛弃Ruby,转投NodeJS怀抱 ANDROID 微博登录“SSO PACKAGE OR SIGN ERROR” 错误解决方案 swifttype 0代码、不编程—交互式网页设计工具VXPLO 社区 颜色工具 简书 最后 ...

  • [转]优秀的计算机编程类博客 和 文章

    介绍 优秀的计算机编程类博客是一些关于计算机方面的优秀博客。 欢迎大家将经常看的优秀博客或博客文章共享出来,您可以: 使用 Issues 以及 Pull Request ...Ruby Go 读书笔记及...

  • 优秀的计算机编程类博客 和 文章

    七天学会NodeJS 告别node-forever,拥抱PM2 叩首问路,码梦为生——QCon北京2013 Node.js专题出品人朴灵专访 当IoC遇见了Node.js 美团酒店Node全栈开发实践 ...

  • 优秀的计算机编程类博客和文章整理(github转载)

    介绍优秀的计算机编程类博客是一些关于计算机方面的优秀博客。欢迎大家将经常看的优秀博客或博客文章共享出来,您可以: ...Ruby Go 读书笔记及其它 优秀博客 综合 杨文博(供职于百度公司,任复合搜索

  • 优秀it博客和文章

    研发周报:LinkedIn缘何抛弃Ruby,转投NodeJS怀抱 ANDROID 微博登录“SSO PACKAGE OR SIGN ERROR” 错误解决方案 tomcat结合nginx使用小结 swifttype 0代码、不编程—交互式网页设计工具VXPLO 社区 颜色工具 简书 ...

  • iOS开发牛人博客收集

    研发周报:LinkedIn缘何抛弃Ruby,转投NodeJS怀抱 ANDROID 微博登录“SSO PACKAGE OR SIGN ERROR” 错误解决方案 objc.io A periodical about best practices and advanced techniques in Objective-C. ...

  • AVR单片机项目-ADC键盘(源码+仿真+效果图).zip

    使用adc功能来判断不同电压,那必定是通过电压的不同来区分的,这就需要按键与电阻进行组合,我设计打算使用正比关系的按键阻值,这样会比较好在程序判断,最后就如仿真图那样设计,按键按下让某部分电路短路,剩下的电路得到不同的电压值,而不同按键按下,对应的电阻值是10k的倍数,很好区分。而基地的电阻设为10k,按键靠近gnd的电压值最小,远离则慢慢增大,可大概计算出来的,分压的电压为5v。按键不按时为0v,有按键按的电压范围为2.5v~0.238v。然后用以前编写好的数码管驱动拿过来用,也就是用动态扫描的方式进行显示的。然后编写adc代码,根据atmega16的数据手册就可以慢慢写出来了,即配置好ADMUX、ADCSRA寄存器,使用单次触发的方式,写好对应的函数,在初始化之后,使用定时器1中断进行adc的读取和数码管的刷新显示。而adc对应按键的判断也使用了for循环对1024分成1~21份,对其附近符合的值即可判断为按键i-1,可直接显示出来,而误差值可以多次测量后进行调整。 使用adc功能来判断不同电压,那必定是通过电压的不同来区分的,这就需要按键与电阻进行组合,我设计打算使用正比关系的按

  • java毕设项目之基于SpringBoot的失物招领平台的设计与实现(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

  • java毕设项目之基于springboot的智能家居系统(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

  • 【SCI一区】海洋捕食者算法MPA-CNN-LSTM-Attention风电功率预测【Matlab仿真 5558期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

  • 111人工智能代码.zip

    111人工智能代码.zip

  • 基于因果关系知识库的因果事件图谱实验项目,本项目罗列了因果显式表达的几种模式,基于这种模式和大规模语料,再经过融源码+文档+全部资料.zip

    【资源说明】 基于因果关系知识库的因果事件图谱实验项目,本项目罗列了因果显式表达的几种模式,基于这种模式和大规模语料,再经过融源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • java毕设项目之基于Spring Boot的疗养院管理系统的设计与实现(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

  • java毕设项目之基于JAVA语言的在线考试与学习交流网页平台(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

  • elasticsearch-analysis-dynamic-synonym-8.16.2

    解压之后在elasticsearch的jdk\conf\security\java.policy文件下新增这段,然后重启es就可以使用了 permission java.net.SocketPermission "*", "connect,resolve"; permission java.lang.RuntimePermission "setContextClassLoader"; permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "createClassLoader"; permission java.security.SecurityPermission "putProviderProperty.MySQLScramSha1Sasl"; permission java.security.SecurityPermission "insertProvider";

  • 【SCI一区】基于matlab飞蛾扑火算法MFO-CNN-BiLSTM-Mutilhead-Attention多变量时序预测【Matlab仿真 5610期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

  • 基于知识图谱的豆瓣书籍推荐问答系统源码+文档+全部资料.zip

    【资源说明】 基于知识图谱的豆瓣书籍推荐问答系统源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

  • 数字逻辑logisim74XX电路

    数字逻辑logisim74XX电路

  • 基于知识图谱的智能教学系统源码+文档+全部资料.zip

    【资源说明】 基于知识图谱的智能教学系统源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

Global site tag (gtag.js) - Google Analytics