您当前的位置是:  首页 > 新闻 > 文章精选 >
 首页 > 新闻 > 文章精选 >

阿里巴巴Node.js技术专家袁锋揭露后端效能关键

--亿级交易平台效能关键大公开

2017-09-04 14:09:08   作者:   来源:CTI论坛   评论:0  点击:


  看中网站开发框架Node.js简单的特性,阿里巴巴在2011年导入Node.js,成功支撑了淘宝网2012年举行的双十二活动产生的庞大流量
  淘宝网在2012年拥有4.5亿用户、600万个卖家,当年12月12日举行的双十二活动,就有超过200万名卖家参与,淘宝还推出专属个人的消费历程「淘宝时光机」,呈现过去10年的个人化专属购买历程,为了快速地从10年间的庞大消费记录中,分析出个人的消费历程,Node.js技术专家袁锋袁锋指出,当天此应用流量创下历史新高,远远超过其他分析数据类型的产品。
  所幸,早在前一年,阿里巴巴後端就改用Node.js开发,才能撑住这次暴增的流量,也因为淘宝经常举行一次性的特别活动,像是双11和双12等促销活动,需要更高效能的架构,来因应流量暴增的问题。
  阿里巴巴在2011年开始导入网站开发框架Node.js,「测试完发现Node.js比PHP快至少5倍以上,就开始用了!」袁锋表示,当时的技术负责人发觉Node.js技术,看中了简单的特性,只有测试性地建了一个分析数据类型的产品,当时实测後发现後端采用Node.js的效能比PHP快,就开启了阿里巴巴与Node.js的旅程。
  袁锋在蚂蚁金服负责所有用Node.js技术开发的专案,他同时也是中文Node.js技术社群CNode.org的核心成员,由於他所属的部门都是从事开发分析数据类型的产品,「数据产品属於高I/O流量!」他表示,原本用PHP撰写而成的架构,因为I/O流量持续增加,让原本的架构不堪负荷。
  阿里巴巴在2011年应用开发端导入网站开发框架Node.js,看准Node.js快速开发的特性,用Node.js开发应用展示层所需要的功能。
  Node.js最适合创造I/O密集型的应用
  由於分析数据类型的产品属於I/O密集型应用,为了要解决流量暴增的问题,非同步(Asynchronous)I/O就变成应用开发端重要的课题之一,系统必须可以同时处理多个 I/O 要求,来分散流量,但是,以往用PHP开发应用,很难达到这样的目标。
  他表示,从PHP改用Node.js的转折,团队当时尝试建立一个分析数据类型的产品,效能提升许多,开发人员的接受度也很高,在正式发布第一个对外的公开产品前,阿里巴巴内部经过许多较小规模的试验,最後,确定没问题之後,才正式推出「淘宝指数」,之後又陆续推出数据魔方等数据型产品。
  采用Node.js开发可从全新的创新应用着手
  淘宝指数是全新的应用,袁锋表示,一开始用Node.js来开发适合从全新的应用开始着手,「新手很容易就可以用Node.js写出一个应用!」他一语点出Node.js的优点,由於Node.js拥有许多套件,开发功能的过程,可以省去不少时间,让开发人员快速地从0到1打造出全新的应用,因此,Node.js适合配合创新,快速开发新应用。
  一开始导入Node.js时,开发应用的IT团队对Node.js都还不了解,过去只有用Python、Java和PHP建置应用服务的经验,在团队IT人员初步研究过後,都觉得Node.js简单易上手。
  Node.js快速开发的优势,不只有利於前端的应用,对於内部开发人员的开发效率也有帮助,「Node.js对阿里巴巴而言,刚好是填补前端团队人力不足的问题,」袁锋解释,以往,开发人员在开发应用的过程中,会用Java、Python等不同的语法,建立自己的开发工具,改用Node.js之後,开发人员在写工具的效率上,大幅地提升,他认为,Node.js让IT团队有一个更好的合作模式,创造开发工具。
  不过,他也坦言,当初天真地认为导入Node.js会是个简单的工作,开始摸索之後,才发现困难重重,首先面临的问题就是,Node.js如何融入阿里巴巴的原有Java生态系,袁锋表示,当初为了要写Node.js,却整天都在研究Java的程式码,他采用hessian.js和java.io两项序列化协议,来串接Node.js和Java,跨语言的开发他则建议使用序列化资料结构方法Protocol Buffers。
  技术瓶颈解决之後,还有另外一个问题,就是缺乏Node.js的工程师,「2011年时,Node.js还太新了!」他表示,当时就连资深的人事都没有听过Node.js,要招聘工程师更是难上加难,这也是袁锋当初在CNode.org极力推动Node.js的原因,他认为要主动创造一个环境,让更多人可以投入这个生态圈。
  阿里巴巴Node.js技术专家袁锋表示,Node.js非常适合用於开发I/O密集型的应用场景,不适合复杂且大型的应用。
  Node.js的局限是复杂且大型的应用
  袁锋表示,Node.js适合快速打造出全新的应用,相反地,Node.js的瓶颈点就是在产品发展的阶段很适用,但并不是产品持续发展的优先选项,依照他的观察,创新业务里面,要从0到1用Node.js非常适合,但是要从1到100,就很难全用Node.js,他解释,当应用慢慢壮大之後,必须切分成许多层,且业务逻辑会变得越来越复杂,而Node.js就不适合打造业务服务层。
  举例来说,用Java就可以很容易处理分散式交易,但是Node.js就很难实现,因此,他建议,企业应该想清楚系统架构每一层工程师的分工和擅长的工具,找到适当的场景,用对工具才是最重要的。
  袁锋举例,阿里巴巴在尝试用Node.js打造全新的应用後,也将目光转向既有的应用数据魔方,当时该应用流量持续上升,他预计原本的架构将会无法招架,因此开始将原有的PHP架构转成Node.js,但是,他就将系统架构分的很清楚,Node.js只负责应用展示层所需要的功能。
  阿里巴巴打造自家的Node.js效能监测工具
  由於阿里巴巴有许多流量大的应用,在几年前阿里巴巴预期将来会有许多用Node.js打造的应用,可能会遇到和Java应用一样的问题,於是,从原本的数据单位拆出一个团队负责开发效能监测工具Alinode。
  他举例,过去没有效能监测工具,发布新的程式码时,CPU用量增加和记忆体的泄露问题,都无法准确追踪是哪一行程式码导致的问题,同一个应用发布两个版本,CPU用量从15%增加到30%,开发人员只能找出可能有问题的程式码来修改,再重新发布,若是CPU用量降下来,开发人员才可以确定是这行程式码有问题。
  袁锋表示Google的开源JavaScript引擎V8所提供的监测工具也无法百分之百准确追踪程式码的问题,但是阿里巴巴开发的Alinode则是可以掌握8成以上的效能问题,可以自动提示某个函数使用的记忆体资源过多,也能直接显示哪一个行数的程式码需要修改。
  袁锋过去在CNode.org社群积极推动Node.js,刚开始只是为了创造Node.js生态圈,以利招募Node.js工程师,不过经过许多年头後,他还继续坚持经营社群,「有了这些交流,让我们可以提前预防别的公司遇到的问题,」他表示,这是他认为最大的意外收获,因为大家会在社群中分享实际用Node.js遇到的问题,让其他人可以在遇到问题之前事先预防,形成良性循环。
  袁锋曾经以为Node.js是万能的,慢慢地接触到更多後端技术後,才发觉,应该要想清楚每个开发框架的优势,善用它的优势提升研发效率,他表示,现在他花更多时间在思考如何提升开发效率,若有更好的方案,未来可能也不排除换成别种语言。
  阿里巴巴为了要监控Node.js系统的效能,自行开发一套效能监控工具Alinode,可以追踪CPU用量和记忆体泄漏问题。
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题