阅读更多

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. ...

  • 级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均

    级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,级联H桥SVG无功补偿系统在不平衡电网中的三层控制策略:电压电流双闭环PI控制、相间与相内电压均衡管理,不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略。 (1)第一层采用电压电流双闭环pi控制,电压电流正负序分离,电压外环通过产生基波正序有功电流三相所有H桥模块直流侧平均电压恒定,电流内环采用前馈解耦控制; (2)第二层相间电压均衡控制,注入零序电压,控制通过注入零序电压维持相间电压平衡; (3)第三层相内电压均衡控制,使其所有子模块吸收的有功功率与其损耗补,从而保证所有H桥子模块直流侧电压值等于给定值。 有参考资料。 639,核心关键词: 1. 不平衡电网下的SVG无功补偿 2. 级联H桥SVG无功补偿STATCOM 3. 三层控制策略 4. 电压电流双闭环PI控制 5. 电压电流正负序分离 6. 直流侧平均电压恒定 7. 前馈解耦控制 8. 相间电压均衡控制 9. 零序电压注入 10. 相内电压均衡控制 以上十个关键词用分号分隔的格式为:不

  • GTX 1080 PCB图纸

    GTX 1080 PCB图纸,内含图纸查看软件

  • 深度优化与应用:提升DeepSeek润色指令的有效性和灵活性指南

    内容概要:本文档详细介绍了利用 DeepSeek 进行文本润色和问答交互时提高效果的方法和技巧,涵盖了从明确需求、提供适当上下文到尝试开放式问题以及多轮对话的十个要点。每一部分内容都提供了具体的示范案例,如指定回答格式、分步骤提问等具体实例,旨在指导用户更好地理解和运用 DeepSeek 提升工作效率和交流质量。同时文中还强调了根据不同应用场景调整提示词语气和风格的重要性和方法。 适用人群:适用于希望通过优化提问技巧以获得高质量反馈的企业员工、科研人员以及一般公众。 使用场景及目标:本文针对所有期望提高 DeepSeek 使用效率的人群,帮助他们在日常工作中快速获取精准的答案或信息,特别是在撰写报告、研究材料准备和技术咨询等方面。此外还鼓励用户通过不断尝试不同形式的问题表述来进行有效沟通。 其他说明:该文档不仅关注实际操作指引,同样重视用户思维模式转变——由简单索取答案向引导 AI 辅助创造性解决问题的方向发展。

  • 基于FPGA与W5500实现的TCP网络通信测试平台开发-Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivad

    基于FPGA与W5500实现的TCP网络通信测试平台开发——Zynq扩展口Verilog编程实践,基于FPGA与W5500芯片的TCP网络通信测试及多路Socket实现基于zynq开发平台和Vivado 2019软件的扩展开发,基于FPGA和W5500的TCP网络通信 测试平台 zynq扩展口开发 软件平台 vivado2019.2,纯Verilog可移植 测试环境 压力测试 cmd命令下ping电脑ip,同时采用上位机进行10ms发包回环测试,不丢包(内部数据回环,需要时间处理) 目前实现单socket功能,多路可支持 ,基于FPGA; W5500; TCP网络通信; Zynq扩展口开发; 纯Verilog可移植; 测试平台; 压力测试; 10ms发包回环测试; 单socket功能; 多路支持。,基于FPGA与W5500的Zynq扩展口TCP通信测试:可移植Verilog实现的高效网络通信

  • Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警及记录、自动实验、数据处理与查询存储,报表生成与打印一体化解决方案 ,Labview液压比例阀

    Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警及记录、自动实验、数据处理与查询存储,报表生成与打印一体化解决方案。,Labview液压比例阀伺服阀试验台多功能程序:PLC通讯、液压动画模拟、手动控制与调试、传感器标定、报警管理及实验自动化,labview液压比例阀伺服阀试验台程序:功能包括,同PLC通讯程序,液压动画,手动控制及调试,传感器标定,报警设置及报警记录,自动实验,数据处理曲线处理,数据库存储及查询,报表自动生成及打印,扫码枪扫码及信号录入等~ ,核心关键词:PLC通讯; 液压动画; 手动控制及调试; 传感器标定; 报警设置及记录; 自动实验; 数据处理及曲线处理; 数据库存储及查询; 报表生成及打印; 扫码枪扫码。,Labview驱动的智能液压阀测试系统:多功能控制与数据处理

  • 华为、腾讯、万科员工职业发展体系建设与实践.pptx

    华为、腾讯、万科员工职业发展体系建设与实践.pptx

  • 基于遗传算法的柔性车间调度优化 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 电网不对称故障下VSG峰值电流限制的柔性控制策略:实现电流平衡与功率容量的优化利用,电网不对称故障下VSG峰值电流限制的柔性控制策略:兼顾平衡电流与功率控制切换的动态管理,电网不对称故障下VSG峰值电

    电网不对称故障下VSG峰值电流限制的柔性控制策略:实现电流平衡与功率容量的优化利用,电网不对称故障下VSG峰值电流限制的柔性控制策略:兼顾平衡电流与功率控制切换的动态管理,电网不对称故障下VSG峰值电流限制的柔性不平衡控制(文章完全复现)。 提出一种在不平衡运行条件下具有峰值电流限制的可变不平衡电流控制方法,可灵活地满足不同操作需求,包括电流平衡、有功或无功恒定运行(即电流控制、有功控制或无功控制之间的相互切),注入电流保持在安全值内,以更好的利用VSG功率容量。 关键词:VSG、平衡电流控制、有功功率控制、无功功率控制。 ,VSG; 峰值电流限制; 柔性不平衡控制; 电流平衡控制; 有功功率控制; 无功功率控制。,VSG柔性控制:在电网不对称故障下的峰值电流限制与平衡管理

  • libpinyin-tools-0.9.93-4.el7.x64-86.rpm.tar.gz

    1、文件内容:libpinyin-tools-0.9.93-4.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libpinyin-tools-0.9.93-4.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

  • 机器学习(预测模型):动漫《龙珠》相关的数据集

    数据集是一个以经典动漫《龙珠》为主题的多维度数据集,广泛应用于数据分析、机器学习和图像识别等领域。该数据集由多个来源整合而成,涵盖了角色信息、战斗力、剧情片段、台词以及角色图像等多个方面。数据集的核心内容包括: 角色信息:包含《龙珠》系列中的主要角色及其属性,如名称、种族、所属系列(如《龙珠》《龙珠Z》《龙珠超》等)、战斗力等级等。 图像数据:提供角色的图像资源,可用于图像分类和角色识别任务。这些图像来自动画剧集、漫画和相关衍生作品。 剧情与台词:部分数据集还包含角色在不同故事中的台词和剧情片段,可用于文本分析和自然语言处理任务。 战斗数据:记录角色在不同剧情中的战斗力变化和战斗历史,为研究角色成长和剧情发展提供支持。 数据集特点 多样性:数据集整合了角色、图像、文本等多种类型的数据,适用于多种研究场景。 深度:不仅包含角色的基本信息,还涵盖了角色的成长历程、技能描述和与其他角色的互动关系。 实用性:支持多种编程语言(如Python、R)的数据处理和分析,提供了详细的文档和示例代码。

  • 基于protues仿真的多功公交站播报系统设计(仿真图、源代码)

    基于protues仿真的多功公交站播报系统设计(仿真图、源代码) 该设计为基于protues仿真的多功公交站播报系统,实现温度显示、时间显示、和系统公交站播报功能; 具体功能如下: 1、系统使用51单片机为核心设计; 2、时钟芯片进行时间和日期显示; 3、温度传感器进行温度读取; 4、LCD12864液晶屏进行相关显示; 5、按键设置调节时间; 6、按键设置报站; 7、仿真图、源代码; 操作说明: 1、下行控制报站:首先按下(下行设置按键),(下行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 2、上行控制报站:首先按上(上行设置按键),(上行指示灯)亮,然后按下(手动播报)按键控制播报下一站; 3、按下关闭播报按键,则关闭播报功能和清除显示

  • 基于微信小程序的琴房管理系统的设计与实现.zip

    采用Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、琴房信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、琴房信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,琴房信息管理、琴房预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。

  • 界面GUI设计MATLAB教室人数统计.zip

    MATLAB可以用于开发人脸识别考勤系统。下面是一个简单的示例流程: 1. 数据采集:首先收集员工的人脸图像作为训练数据集。可以要求员工提供多张照片以获得更好的训练效果。 2. 图像预处理:使用MATLAB的图像处理工具对采集到的人脸图像进行预处理,例如灰度化、裁剪、缩放等操作。 3. 特征提取:利用MATLAB的人脸识别工具包,如Face Recognition Toolbox,对处理后的图像提取人脸特征,常用的方法包括主成分分析(PCA)和线性判别分析(LDA)等。 4. 训练模型:使用已提取的人脸特征数据集训练人脸识别模型,可以选择支持向量机(SVM)、卷积神经网络(CNN)等算法。 5. 考勤系统:在员工打卡时,将摄像头捕获的人脸图像输入到训练好的模型中进行识别,匹配员工信息并记录考勤数据。 6. 结果反馈:根据识别结果,可以自动生成考勤报表或者实时显示员工打卡情况。 以上只是一个简单的步骤,实际开发过程中需根据具体需求和系统规模进行定制和优化。MATLAB提供了丰富的图像处理和机器学习工具,是开发人脸识别考勤系统的一个很好选择。

Global site tag (gtag.js) - Google Analytics