qcon beijing-2013-04-27-tianyongqiang
TRANSCRIPT
企业级Node.js开发阿⾥里巴巴数据产品中的Node.js实践
by @⽥田永强
113年4月22⽇日星期⼀一
⾃自我介绍
• ⽥田永强/@朴灵
• 阿⾥里巴巴/数据平台/数据产品部/⼯工程师
• CNode社区成员
213年4月22⽇日星期⼀一
演讲议程
• 数据产品• 协作开发• 质量保证• 异构共存
313年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
数据产品
413年4月22⽇日星期⼀一
513年4月22⽇日星期⼀一
513年4月22⽇日星期⼀一
513年4月22⽇日星期⼀一
513年4月22⽇日星期⼀一
513年4月22⽇日星期⼀一
业务特点
613年4月22⽇日星期⼀一
业务特点
• 数据源(类型)多
613年4月22⽇日星期⼀一
业务特点
• 数据源(类型)多• 数据量⼤大
613年4月22⽇日星期⼀一
业务特点
• 数据源(类型)多• 数据量⼤大• 分布式
613年4月22⽇日星期⼀一
Why Node?
713年4月22⽇日星期⼀一
Why Node?
IO开销 花费CPU时钟周期CPU Cache L1 3
CPU Cache L2 14
RAM 250
Disk 41000000
Net 240000000
713年4月22⽇日星期⼀一
Why Node?
713年4月22⽇日星期⼀一
Why Node?
0
75000000.00
150000000.00
225000000.00
300000000.00
区域 1
数据访问耗时图
l1 l2 ramdisk net
713年4月22⽇日星期⼀一
Coding style
• 团队JavaScript⽔水平参差不⻬齐
813年4月22⽇日星期⼀一
Coding style
813年4月22⽇日星期⼀一
Coding style
JSHint
813年4月22⽇日星期⼀一
Coding style
JSHintCodereview
813年4月22⽇日星期⼀一
Coding style
JSHintCodereview
merge
813年4月22⽇日星期⼀一
代码复⽤用
913年4月22⽇日星期⼀一
代码复⽤用
Copy & Parse
913年4月22⽇日星期⼀一
代码复⽤用
Copy & Parse
913年4月22⽇日星期⼀一
代码复⽤用
Copy & Parse
913年4月22⽇日星期⼀一
代码复⽤用
913年4月22⽇日星期⼀一
代码复⽤用
913年4月22⽇日星期⼀一
代码复⽤用
项⺫⽬目1
913年4月22⽇日星期⼀一
代码复⽤用
项⺫⽬目1 项⺫⽬目2
913年4月22⽇日星期⼀一
代码复⽤用
项⺫⽬目1 项⺫⽬目2 项⺫⽬目3
913年4月22⽇日星期⼀一
包管理
1013年4月22⽇日星期⼀一
包管理{ "name": "wechat", "version": "0.4.1", "description": "微信公共平台⾃自动回复接⼝口服务", "main": "index.js", "scripts": { "test": "make test" }, "dependencies": { "xml2js": "0.2.6", "ejs": ">=0.8.3", "bufferhelper": ">=0.2.0" }, "devDependencies": { "supertest": "*", "mocha": "*", "should": "*", "connect": "*", "jscover": "*" }, "author": "Jackson Tian", "license": "MIT"}
1013年4月22⽇日星期⼀一
包管理
1013年4月22⽇日星期⼀一
包管理
1013年4月22⽇日星期⼀一
社区模块问题
• 私有模块⽆无法应⽤用• 模块质量良莠不⻬齐• 版本控制存在⻛风险• 模块安装速度⽆无法保障
1113年4月22⽇日星期⼀一
企业NPM
1213年4月22⽇日星期⼀一
企业NPM
1213年4月22⽇日星期⼀一
企业NPM
1213年4月22⽇日星期⼀一
企业NPM
1213年4月22⽇日星期⼀一
享受开源
1313年4月22⽇日星期⼀一
享受开源
1313年4月22⽇日星期⼀一
享受开源单向同步
1313年4月22⽇日星期⼀一
享受开源
本地NPM单向同步
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
私有模块
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
私有模块
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
私有模块
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
私有模块 公有模块
1313年4月22⽇日星期⼀一
享受开源
本地NPM
项⺫⽬目
单向同步
私有模块 公有模块
1313年4月22⽇日星期⼀一
1413年4月22⽇日星期⼀一
1413年4月22⽇日星期⼀一
1413年4月22⽇日星期⼀一
私有NPM
1413年4月22⽇日星期⼀一
项⺫⽬目1
私有NPM
1413年4月22⽇日星期⼀一
项⺫⽬目1 项⺫⽬目2
私有NPM
1413年4月22⽇日星期⼀一
项⺫⽬目1 项⺫⽬目2 项⺫⽬目3
私有NPM
1413年4月22⽇日星期⼀一
项⺫⽬目1 项⺫⽬目2 项⺫⽬目3
私有NPM
1413年4月22⽇日星期⼀一
质量保证
1513年4月22⽇日星期⼀一
质量保证
• 严格的单元测试
1513年4月22⽇日星期⼀一
质量保证
• 严格的单元测试
1513年4月22⽇日星期⼀一
质量保证
• 严格的单元测试
1513年4月22⽇日星期⼀一
质量保证
• 严格的单元测试• 只挑选有单元测试的三⽅方模块
1513年4月22⽇日星期⼀一
质量保证
• 严格的单元测试• 只挑选有单元测试的三⽅方模块• 持续集成平台(Toast/Travis/jenkins)
1513年4月22⽇日星期⼀一
发布流程
1613年4月22⽇日星期⼀一
发布流程
merge
1613年4月22⽇日星期⼀一
发布流程
testmerge
1613年4月22⽇日星期⼀一
发布流程
testmerge deploy
1613年4月22⽇日星期⼀一
异常处理
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHintCodereview
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHintCodereview
exception
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHintCodereview
exceptiontest case
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHintCodereview
exceptiontest case
1713年4月22⽇日星期⼀一
异构共存
1813年4月22⽇日星期⼀一
异构共存
Tair
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
1813年4月22⽇日星期⼀一
异构共存
Tair HSF OTS
1813年4月22⽇日星期⼀一
异构共存
Tair HSF OTS TFS
1813年4月22⽇日星期⼀一
异构共存
Tair HSF OTS TFS CDN
1813年4月22⽇日星期⼀一
异构共存
Tair HSF OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
HTTP RESTful
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
HTTP RESTful RPC
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
HTTP RESTful RPC MySQL协议
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
HTTP RESTful RPC MySQL协议 etc.
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
异构共存
Tair HSF
Node
HTTP RESTful RPC MySQL协议 etc.
OTS TFS CDN etc.
1813年4月22⽇日星期⼀一
总结
1913年4月22⽇日星期⼀一
总结• 严格⾃自律,让犯错变得困难
1913年4月22⽇日星期⼀一
总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量
1913年4月22⽇日星期⼀一
总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量
• 编码规范和代码审查,提升团队平均⽔水平
1913年4月22⽇日星期⼀一
总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量
• 编码规范和代码审查,提升团队平均⽔水平• 私有NPM去粗取精,拥抱开源社区,回馈开源社区
1913年4月22⽇日星期⼀一
总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量
• 编码规范和代码审查,提升团队平均⽔水平• 私有NPM去粗取精,拥抱开源社区,回馈开源社区
• 拥抱社区⽣生态,打造企业内开发⽣生态环境
1913年4月22⽇日星期⼀一
Q&A
2013年4月22⽇日星期⼀一
资料链接• https://npmjs.org/
• http://wiki.commonjs.org/wiki/CommonJS
• http://visionmedia.github.io/mocha/
• https://github.com/visionmedia/should.js
• https://travis-ci.org/
• https://david-dm.org/
• https://github.com/isaacs/npmjs.org
• http://couchdb.apache.org/
• http://www.erlang.org/
• http://blog.nodejs.org/2013/03/11/node-v0-10-0-stable/
2113年4月22⽇日星期⼀一