qcon beijing-2013-04-27-tianyongqiang

100
企业级Node.js开发 阿巴巴数据产品中的Node.js实践 by @永强 1 13422星期

Upload: drewz-lin

Post on 14-May-2015

612 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Qcon beijing-2013-04-27-tianyongqiang

企业级Node.js开发阿⾥里巴巴数据产品中的Node.js实践

by @⽥田永强

113年4月22⽇日星期⼀一

Page 2: Qcon beijing-2013-04-27-tianyongqiang

⾃自我介绍

• ⽥田永强/@朴灵

• 阿⾥里巴巴/数据平台/数据产品部/⼯工程师

• CNode社区成员

213年4月22⽇日星期⼀一

Page 3: Qcon beijing-2013-04-27-tianyongqiang

演讲议程

• 数据产品• 协作开发• 质量保证• 异构共存

313年4月22⽇日星期⼀一

Page 4: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 5: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 6: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 7: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 8: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 9: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 10: Qcon beijing-2013-04-27-tianyongqiang

数据产品

413年4月22⽇日星期⼀一

Page 11: Qcon beijing-2013-04-27-tianyongqiang

513年4月22⽇日星期⼀一

Page 12: Qcon beijing-2013-04-27-tianyongqiang

513年4月22⽇日星期⼀一

Page 13: Qcon beijing-2013-04-27-tianyongqiang

513年4月22⽇日星期⼀一

Page 14: Qcon beijing-2013-04-27-tianyongqiang

513年4月22⽇日星期⼀一

Page 15: Qcon beijing-2013-04-27-tianyongqiang

513年4月22⽇日星期⼀一

Page 16: Qcon beijing-2013-04-27-tianyongqiang

业务特点

613年4月22⽇日星期⼀一

Page 17: Qcon beijing-2013-04-27-tianyongqiang

业务特点

• 数据源(类型)多

613年4月22⽇日星期⼀一

Page 18: Qcon beijing-2013-04-27-tianyongqiang

业务特点

• 数据源(类型)多• 数据量⼤大

613年4月22⽇日星期⼀一

Page 19: Qcon beijing-2013-04-27-tianyongqiang

业务特点

• 数据源(类型)多• 数据量⼤大• 分布式

613年4月22⽇日星期⼀一

Page 20: Qcon beijing-2013-04-27-tianyongqiang

Why Node?

713年4月22⽇日星期⼀一

Page 21: Qcon beijing-2013-04-27-tianyongqiang

Why Node?

IO开销 花费CPU时钟周期CPU Cache L1 3

CPU Cache L2 14

RAM 250

Disk 41000000

Net 240000000

713年4月22⽇日星期⼀一

Page 22: Qcon beijing-2013-04-27-tianyongqiang

Why Node?

713年4月22⽇日星期⼀一

Page 23: Qcon beijing-2013-04-27-tianyongqiang

Why Node?

0

75000000.00

150000000.00

225000000.00

300000000.00

区域 1

数据访问耗时图

l1 l2 ramdisk net

713年4月22⽇日星期⼀一

Page 24: Qcon beijing-2013-04-27-tianyongqiang

Coding style

• 团队JavaScript⽔水平参差不⻬齐

813年4月22⽇日星期⼀一

Page 25: Qcon beijing-2013-04-27-tianyongqiang

Coding style

813年4月22⽇日星期⼀一

Page 26: Qcon beijing-2013-04-27-tianyongqiang

Coding style

JSHint

813年4月22⽇日星期⼀一

Page 27: Qcon beijing-2013-04-27-tianyongqiang

Coding style

JSHintCodereview

813年4月22⽇日星期⼀一

Page 28: Qcon beijing-2013-04-27-tianyongqiang

Coding style

JSHintCodereview

merge

813年4月22⽇日星期⼀一

Page 29: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

913年4月22⽇日星期⼀一

Page 30: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

Copy & Parse

913年4月22⽇日星期⼀一

Page 31: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

Copy & Parse

913年4月22⽇日星期⼀一

Page 32: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

Copy & Parse

913年4月22⽇日星期⼀一

Page 33: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

913年4月22⽇日星期⼀一

Page 34: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

913年4月22⽇日星期⼀一

Page 35: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

项⺫⽬目1

913年4月22⽇日星期⼀一

Page 36: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

项⺫⽬目1 项⺫⽬目2

913年4月22⽇日星期⼀一

Page 37: Qcon beijing-2013-04-27-tianyongqiang

代码复⽤用

项⺫⽬目1 项⺫⽬目2 项⺫⽬目3

913年4月22⽇日星期⼀一

Page 38: Qcon beijing-2013-04-27-tianyongqiang

包管理

1013年4月22⽇日星期⼀一

Page 39: Qcon beijing-2013-04-27-tianyongqiang

包管理{ "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⽇日星期⼀一

Page 40: Qcon beijing-2013-04-27-tianyongqiang

包管理

1013年4月22⽇日星期⼀一

Page 41: Qcon beijing-2013-04-27-tianyongqiang

包管理

1013年4月22⽇日星期⼀一

Page 42: Qcon beijing-2013-04-27-tianyongqiang

社区模块问题

• 私有模块⽆无法应⽤用• 模块质量良莠不⻬齐• 版本控制存在⻛风险• 模块安装速度⽆无法保障

1113年4月22⽇日星期⼀一

Page 43: Qcon beijing-2013-04-27-tianyongqiang

企业NPM

1213年4月22⽇日星期⼀一

Page 44: Qcon beijing-2013-04-27-tianyongqiang

企业NPM

1213年4月22⽇日星期⼀一

Page 45: Qcon beijing-2013-04-27-tianyongqiang

企业NPM

1213年4月22⽇日星期⼀一

Page 46: Qcon beijing-2013-04-27-tianyongqiang

企业NPM

1213年4月22⽇日星期⼀一

Page 47: Qcon beijing-2013-04-27-tianyongqiang

享受开源

1313年4月22⽇日星期⼀一

Page 48: Qcon beijing-2013-04-27-tianyongqiang

享受开源

1313年4月22⽇日星期⼀一

Page 49: Qcon beijing-2013-04-27-tianyongqiang

享受开源单向同步

1313年4月22⽇日星期⼀一

Page 50: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM单向同步

1313年4月22⽇日星期⼀一

Page 51: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

1313年4月22⽇日星期⼀一

Page 52: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

私有模块

1313年4月22⽇日星期⼀一

Page 53: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

私有模块

1313年4月22⽇日星期⼀一

Page 54: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

私有模块

1313年4月22⽇日星期⼀一

Page 55: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

私有模块 公有模块

1313年4月22⽇日星期⼀一

Page 56: Qcon beijing-2013-04-27-tianyongqiang

享受开源

本地NPM

项⺫⽬目

单向同步

私有模块 公有模块

1313年4月22⽇日星期⼀一

Page 57: Qcon beijing-2013-04-27-tianyongqiang

1413年4月22⽇日星期⼀一

Page 58: Qcon beijing-2013-04-27-tianyongqiang

1413年4月22⽇日星期⼀一

Page 59: Qcon beijing-2013-04-27-tianyongqiang

1413年4月22⽇日星期⼀一

Page 60: Qcon beijing-2013-04-27-tianyongqiang

私有NPM

1413年4月22⽇日星期⼀一

Page 61: Qcon beijing-2013-04-27-tianyongqiang

项⺫⽬目1

私有NPM

1413年4月22⽇日星期⼀一

Page 62: Qcon beijing-2013-04-27-tianyongqiang

项⺫⽬目1 项⺫⽬目2

私有NPM

1413年4月22⽇日星期⼀一

Page 63: Qcon beijing-2013-04-27-tianyongqiang

项⺫⽬目1 项⺫⽬目2 项⺫⽬目3

私有NPM

1413年4月22⽇日星期⼀一

Page 64: Qcon beijing-2013-04-27-tianyongqiang

项⺫⽬目1 项⺫⽬目2 项⺫⽬目3

私有NPM

1413年4月22⽇日星期⼀一

Page 65: Qcon beijing-2013-04-27-tianyongqiang

质量保证

1513年4月22⽇日星期⼀一

Page 66: Qcon beijing-2013-04-27-tianyongqiang

质量保证

• 严格的单元测试

1513年4月22⽇日星期⼀一

Page 67: Qcon beijing-2013-04-27-tianyongqiang

质量保证

• 严格的单元测试

1513年4月22⽇日星期⼀一

Page 68: Qcon beijing-2013-04-27-tianyongqiang

质量保证

• 严格的单元测试

1513年4月22⽇日星期⼀一

Page 69: Qcon beijing-2013-04-27-tianyongqiang

质量保证

• 严格的单元测试• 只挑选有单元测试的三⽅方模块

1513年4月22⽇日星期⼀一

Page 70: Qcon beijing-2013-04-27-tianyongqiang

质量保证

• 严格的单元测试• 只挑选有单元测试的三⽅方模块• 持续集成平台(Toast/Travis/jenkins)

1513年4月22⽇日星期⼀一

Page 71: Qcon beijing-2013-04-27-tianyongqiang

发布流程

1613年4月22⽇日星期⼀一

Page 72: Qcon beijing-2013-04-27-tianyongqiang

发布流程

merge

1613年4月22⽇日星期⼀一

Page 73: Qcon beijing-2013-04-27-tianyongqiang

发布流程

testmerge

1613年4月22⽇日星期⼀一

Page 74: Qcon beijing-2013-04-27-tianyongqiang

发布流程

testmerge deploy

1613年4月22⽇日星期⼀一

Page 75: Qcon beijing-2013-04-27-tianyongqiang

异常处理

1713年4月22⽇日星期⼀一

Page 76: Qcon beijing-2013-04-27-tianyongqiang

异常处理

testmerge deployJSHintCodereview

1713年4月22⽇日星期⼀一

Page 77: Qcon beijing-2013-04-27-tianyongqiang

异常处理

testmerge deployJSHintCodereview

exception

1713年4月22⽇日星期⼀一

Page 78: Qcon beijing-2013-04-27-tianyongqiang

异常处理

testmerge deployJSHintCodereview

exceptiontest case

1713年4月22⽇日星期⼀一

Page 79: Qcon beijing-2013-04-27-tianyongqiang

异常处理

testmerge deployJSHintCodereview

exceptiontest case

1713年4月22⽇日星期⼀一

Page 80: Qcon beijing-2013-04-27-tianyongqiang

异构共存

1813年4月22⽇日星期⼀一

Page 81: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair

1813年4月22⽇日星期⼀一

Page 82: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

1813年4月22⽇日星期⼀一

Page 83: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF OTS

1813年4月22⽇日星期⼀一

Page 84: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF OTS TFS

1813年4月22⽇日星期⼀一

Page 85: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF OTS TFS CDN

1813年4月22⽇日星期⼀一

Page 86: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 87: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 88: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

HTTP RESTful

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 89: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

HTTP RESTful RPC

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 90: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

HTTP RESTful RPC MySQL协议

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 91: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

HTTP RESTful RPC MySQL协议 etc.

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 92: Qcon beijing-2013-04-27-tianyongqiang

异构共存

Tair HSF

Node

HTTP RESTful RPC MySQL协议 etc.

OTS TFS CDN etc.

1813年4月22⽇日星期⼀一

Page 93: Qcon beijing-2013-04-27-tianyongqiang

总结

1913年4月22⽇日星期⼀一

Page 94: Qcon beijing-2013-04-27-tianyongqiang

总结• 严格⾃自律,让犯错变得困难

1913年4月22⽇日星期⼀一

Page 95: Qcon beijing-2013-04-27-tianyongqiang

总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量

1913年4月22⽇日星期⼀一

Page 96: Qcon beijing-2013-04-27-tianyongqiang

总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量

• 编码规范和代码审查,提升团队平均⽔水平

1913年4月22⽇日星期⼀一

Page 97: Qcon beijing-2013-04-27-tianyongqiang

总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量

• 编码规范和代码审查,提升团队平均⽔水平• 私有NPM去粗取精,拥抱开源社区,回馈开源社区

1913年4月22⽇日星期⼀一

Page 98: Qcon beijing-2013-04-27-tianyongqiang

总结• 严格⾃自律,让犯错变得困难• 单元测试与异常⽇日志,并驾⻬齐驱保障应⽤用质量

• 编码规范和代码审查,提升团队平均⽔水平• 私有NPM去粗取精,拥抱开源社区,回馈开源社区

• 拥抱社区⽣生态,打造企业内开发⽣生态环境

1913年4月22⽇日星期⼀一

Page 99: Qcon beijing-2013-04-27-tianyongqiang

Q&A

2013年4月22⽇日星期⼀一

Page 100: Qcon beijing-2013-04-27-tianyongqiang

资料链接• 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⽇日星期⼀一