阅读323 返回首页    go 搜狐


阿里巴巴内部“亿级交易平台”解密大公开?

阿里巴巴为了要监控Node.js系统的效能,自行开发一套效能监控工具Alinode,可以追踪CPU用量和内存泄漏问题。

淘宝网在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系统的效能,自行开发一套效能监控工具Alinode

袁锋曾经以为Node.js是万能的,慢慢地接触到更多后端技术后,才发觉,应该要想清楚每个开发框架的优势,善用它的优势提升研发效率,他表示,现在他花更多时间在思考如何提升开发效率,若有更好的方案,未来可能也不排除换成别种语言。

最后更新:2017-09-05 03:05:32

  上一篇:go 阿里巴巴落伍了,这种模式让百万销售集体失业!
  下一篇:go iDST院长金榕IJCAI演讲:阿里巴巴的深度学习应用