Chair:支付宝前端团队推出的Node.js Web框架 - 开源中国社区
Chair:支付宝前端团队推出的Node.js Web框架
小云栖 2016年01月15日

Chair:支付宝前端团队推出的Node.js Web框架

小云栖 小云栖 发布于2016年01月15日 收藏 270 评论 55

腾讯云 十分钟定制你的第一个小程序>>>  

Chair是支付宝前端团队推出的,基于Node.js的Web框架,适用于大部分的Web应用。

本文简要介绍Chair的设计思想、功能架构和开发状况。

chair_logo_small

一、Chair的由来和设计思想

历史上,支付宝前端项目都是直接基于Java后端开发的。这种架构下,前端工程师做出网页模板(基于velocity模板引擎的vm文件),交给后端的Java引擎渲染。支付宝采用的Java引擎是名为Sofa的MVC框架。

java_flow_small

对于前端工程师来说,这种架构有很多不方便的地方。首先,需要了解后端的实现,并且依赖开发环境中的dev服务器进行调试开发;其次,开发细节需要与后端的 Java工程师沟通,交流成本相当大;最后,难以发起技术创新,因为只要涉及后端的调整,推动起来非常困难。在前端技术日新月异的今天,这已经越来越成为 前端工程师心中的痛。

Chair框架就是在这种背景下诞生的,我们希望通过加入一个Node层,加速前端开发,提升研发效率,提高网站整体性能和系统的可维护性。

作为Sofa的替代,Chair直接与底层的Java服务通信,而客户端浏览器则与Chair通信,这样就不使用Sofa了。前端工程师因此可以完全不碰Java,使用熟悉的JavaScript语言,同时在浏览器和服务器两端进行快速迭代。

chair_flow_small

事实上,Chair这个名字就是来自跟Sofa的对比,因为两者都能坐人,但是椅子(Chair)比沙发(Sofa)轻多了。支付宝已经有了沙发,我们想再为它添一把椅子。

Chair为前端开发,带来了很多便利。

  • 提高了研发效率,前端工程师直接可以改动服务器,避免了与Java后端不必要的沟通成本。

  • 更清晰的职责划分,前端针对表现层(View)开发,后端针对业务和数据(Controller和Model)开发。

  • 更好的⼯程化,前端自己就能完成单元测试、集成测试和自动发布。

  • 节省人工,同样的组件(比如模板和路由)只需要写一次,不用再为浏览器和服务器各写一遍了。

  • 预期的性能提升,Node作为服务器端时,有很强的HTTP请求处理能力。

目前,Chair已经投入了生产环境,与Sofa各自支持着不同的支付宝Web应用。预计不远的将来,会出现更多基于Chair的Web应用。

二、Chair的结构

Chair的基础代码,是基于Koa框架的再开发,使用的语言是下一代JavaScript——ECMAScript 6,模板引擎是Nunjucks,但也可选用其他引擎。同时兼容Velocity模板,现有绝⼤部分模板⽂件⽆需修改也能正常渲染。

chair_structure_small

整个框架从浏览器到服务器,一共分成五层:

  1. 路由层(routers):适配不同路径的HTTP请求

  2. 中间件层(middlewares):加工HTTP请求

  3. 控制器层(controllers):部署业务逻辑

  4. 服务层(services):提供内部的统一API,供不同业务调用

  5. 代理层(proxy):负责与Java服务通信,提供统一格式的数据

除了模板引擎以外,Chair还部署了一些功能组件,比如mock(数据模拟)和logger(日志器)。

Chair根据业务实际需求和现有架构高度定制。虽然从结构上看,Chair可以提供完整的后端功能,但目前主要用于模板渲染和路由。真正的业务逻辑和数据处理,还是要交给后端的Java服务。

 

三、性能提升

Node的加入,为很多功能提供了很大的性能改进。根据压测的结果,使用Chair(下图的web)比使用原来的方案(下图的portal),响应时间和系统负载能力至少提高一倍以上。

performence_compare_small

chair_performance_table_small

四、Chair的开发进度

12月上旬,Chair发布了0.5版。除了修正Bug,这一版主要添加了以下功能。

  • 支持 cookie session, 不依赖 tair

  • 支持连接 MySQL数据库

  • 支持mvc stat 和 rpc stat 日志统计

  • 支持统一导航 uninav 模板

  • 页面数据模拟 pagemock

目前,Chair正处于密集开发之中,预计明年上半年发布1.0.0版。

该文章来自阿里巴巴技术协会(ATA)精选集,作者:兔哥。

文章链接——云栖社区http://yq.aliyun.com/articles/2921

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:Chair:支付宝前端团队推出的Node.js Web框架
分享
评论(55)
最新评论
0

引用来自“Jack_Q”的评论

ie7,8,9兼容吗?

引用来自“若水尘埃”的评论

兼容个屁啊,这是后端框架。

引用来自“中奖啦”的评论

。。。。
呼呼哈哈
0
好期待
0
0
[吐舌][呲牙]
0

引用来自“小肥侠”的评论

看了阮一峰的微博,说这个不会开源,因为和阿里的业务绑定太深。
嗯嗯
0
看了阮一峰的微博,说这个不会开源,因为和阿里的业务绑定太深。
0
我裤子都脱了,你还不开源!
0

引用来自“Jack_Q”的评论

ie7,8,9兼容吗?

引用来自“独孤青冥”的评论

你咋不提ie6呢,多么古老的玩意啊

引用来自“隔壁家老王”的评论

IE5-能兼容不?

引用来自“Chriesh”的评论

老王,你又来捣乱了,隔壁的不孕不育夫妇你帮他们搞定了吗?
早就生了,还有隔壁小冯,五一才认识他现在的老婆,这2天也快生了,,,,,,老王,殖得拥有
0
如果后台不用 java 了,直接用 node.js 不就结了吗?这样架构越堆越厚越复杂,永远无轻松之日。
0

引用来自“Jack_Q”的评论

ie7,8,9兼容吗?

引用来自“独孤青冥”的评论

你咋不提ie6呢,多么古老的玩意啊

引用来自“隔壁家老王”的评论

IE5-能兼容不?
老王,你又来捣乱了,隔壁的不孕不育夫妇你帮他们搞定了吗?
0
把简单的东西搞复杂了
0
Hello World
0
问题是 很多公司奇缺web前端,更别说玩得转node的了
0
期待
0
@FlappyBird
淘宝李晓拴:淘宝网PHP电子商务应用
http://www.donews.com/net/201105/464084.shtm
淘宝搜索是一个典型PHP架构。一淘,是淘宝面向站外用户推出的电子商务搜索引擎,
和淘宝搜索其他产品一样,也是标准的LAMP架构。
用户访问搜索域名,会根据用户IP定位到不同机房,
比如有电信机房,网通机房,和教育网,每个机房大概都有几十台机器。
淘宝搜索每天流量在几亿,我们每个机房部署几十台机器来控制流量。
这些机器主要用来处理PHP请求,页面还有很多资源文件,
像CSS,还有图片,这些则部署在我们的CDN上。
0
@FlappyBird 如果说PHP性能差,那Python和Ruby岂不是都是性能中的垃圾了呢?还有PHP是C支撑下的语言,其调用的底层库函数全部都是用C实现,可以保证其性能的稳定性.别以为Java有JIT就比PHP快,JIT快的前提是能够触发即时编译,Java Tomcat性能甚至不如PHP用于开发测试内置的HTTP服务器:
http://my.oschina.net/eechen/blog/316854
还有典型的就是Facebook用C++开发的HHVM,也有JIT,但是在针对WordPress这些真实应用的ab并发100的测试中,性能跟没有JIT的PHP7也就一个档次,而在单个请求中,PHP7还能比没法触发JIT的HHVM快32%:
http://static.oschina.net/uploads/space/2015/0802/154304_lP6z_561214.png
其中PHP7和HHVM均进行了热身,PHP7缓存有opcode,HHVM缓存有bytecode(hhbc即hiphop bytecode).

PHP7(ZendOpcache)驱动的WordPress的速度接近静态页的速度(0.028s):
http://static.oschina.net/uploads/space/2015/0729/011656_TwPy_561214.png

ab -c100 -n1000 http://www.example.com/app/wordpress/
100并发完成1000个请求,PHP7(开启opcache,5个PHP-FPM工作进程)每秒处理117个请求,HHVM则是每秒126个,性能差距很小.值得一提的是,HHVM没有热身时(第一次压测),每秒只能处理56个请求,而PHP7仍能处理117个请求.
0

引用来自“eechen”的评论

支付宝基于PHP开发就没有这些杂七杂八的前后端烦恼了.Node从09年吹到16年,五六年都过去了,也没见能火起来.

引用来自“coolcao”的评论

我擦,php,这个世界上最好的语言,淘宝估计降不住啊

引用来自“eechen”的评论

https://www.taobao.com/index.php
https://www.tmall.com/index.php
https://list.tmall.com/search_product.htm?q=xiaomi
https://list.tmall.com/search_product.php?q=xiaomi
https://www.taobao.com/market/sport/citiao/paobuxie.php
首页,搜索页,活动页都是PHP驱动,PHP怎么会扛不住呢?而且不是还有鸟哥的PHP7么?性能杠杠的.
我一下喷你一脸老血,PHP后缀的就是开发的?我能说可以随便改吗?你是不是认为 .java或者.jsp才是java开发的,我是PHP程序猿,我感觉PHP开发效率快,但是性能,呵呵,自己去查!
0

引用来自“libinqq”的评论

中途岛?

引用来自“中奖啦”的评论

中途岛是淘宝在搞吧

引用来自“grath”的评论

感觉就是中途岛哇

引用来自“中奖啦”的评论

前年的 D2 大会上,这两个东西都出现了,一个是淘宝的赫门分享的中途岛,另一个就是支付宝的苏千分享的 Chair。
不知道那个大会 多谢指点
0

引用来自“libinqq”的评论

中途岛?

引用来自“中奖啦”的评论

中途岛是淘宝在搞吧

引用来自“grath”的评论

感觉就是中途岛哇
前年的 D2 大会上,这两个东西都出现了,一个是淘宝的赫门分享的中途岛,另一个就是支付宝的苏千分享的 Chair。
0

引用来自“eechen”的评论

支付宝基于PHP开发就没有这些杂七杂八的前后端烦恼了.Node从09年吹到16年,五六年都过去了,也没见能火起来.

引用来自“coolcao”的评论

我擦,php,这个世界上最好的语言,淘宝估计降不住啊
https://www.taobao.com/index.php
https://www.tmall.com/index.php
https://list.tmall.com/search_product.htm?q=xiaomi
https://list.tmall.com/search_product.php?q=xiaomi
https://www.taobao.com/market/sport/citiao/paobuxie.php
首页,搜索页,活动页都是PHP驱动,PHP怎么会扛不住呢?而且不是还有鸟哥的PHP7么?性能杠杠的.
顶部