SlideShare una empresa de Scribd logo
1 de 100
Descargar para leer sin conexión
企业级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 ram
disk net
713年4月22⽇日星期⼀一
Coding style
• 团队JavaScript⽔水平参差不⻬齐
813年4月22⽇日星期⼀一
Coding style
813年4月22⽇日星期⼀一
Coding style
JSHint
813年4月22⽇日星期⼀一
Coding style
JSHint
Code
review
813年4月22⽇日星期⼀一
Coding style
JSHint
Code
review
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 deployJSHint
Code
review
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHint
Code
review
exception
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHint
Code
review
exceptiontest case
1713年4月22⽇日星期⼀一
异常处理
testmerge deployJSHint
Code
review
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⽇日星期⼀一

Más contenido relacionado

Similar a Qcon beijing-2013-04-27-tianyongqiang

百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011
Yiwei Ma
 
Node js q-con
Node js q-conNode js q-con
Node js q-con
q3boy
 

Similar a Qcon beijing-2013-04-27-tianyongqiang (10)

百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011百度实施持续集成之 “工具战争”-Qcon2011
百度实施持续集成之 “工具战争”-Qcon2011
 
給軟體工程師的不廢話 R 語言精要班
給軟體工程師的不廢話 R 語言精要班給軟體工程師的不廢話 R 語言精要班
給軟體工程師的不廢話 R 語言精要班
 
Ptmind
PtmindPtmind
Ptmind
 
03 azure devops pipeline - release
03 azure devops pipeline - release03 azure devops pipeline - release
03 azure devops pipeline - release
 
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
 
Django deploy
Django deployDjango deploy
Django deploy
 
02 azure devops pipeline - build
02 azure devops pipeline - build02 azure devops pipeline - build
02 azure devops pipeline - build
 
01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview
 
Node js q-con
Node js q-conNode js q-con
Node js q-con
 
Android vs e pub
Android vs e pubAndroid vs e pub
Android vs e pub
 

Más de drewz lin

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
drewz lin
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
drewz lin
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
drewz lin
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
drewz lin
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
drewz lin
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
drewz lin
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
drewz lin
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
drewz lin
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
drewz lin
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
drewz lin
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
drewz lin
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
drewz lin
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
drewz lin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
drewz lin
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
drewz lin
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
drewz lin
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
drewz lin
 
天猫后端技术架构优化实践
天猫后端技术架构优化实践天猫后端技术架构优化实践
天猫后端技术架构优化实践
drewz lin
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践
drewz lin
 
T4 淘宝私有云
T4 淘宝私有云T4 淘宝私有云
T4 淘宝私有云
drewz lin
 

Más de drewz lin (20)

Web security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-kearyWeb security-–-everything-we-know-is-wrong-eoin-keary
Web security-–-everything-we-know-is-wrong-eoin-keary
 
Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013Via forensics appsecusa-nov-2013
Via forensics appsecusa-nov-2013
 
Phu appsec13
Phu appsec13Phu appsec13
Phu appsec13
 
Owasp2013 johannesullrich
Owasp2013 johannesullrichOwasp2013 johannesullrich
Owasp2013 johannesullrich
 
Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2Owasp advanced mobile-application-code-review-techniques-v0.2
Owasp advanced mobile-application-code-review-techniques-v0.2
 
I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2I mas appsecusa-nov13-v2
I mas appsecusa-nov13-v2
 
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolfDefeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
Defeating xss-and-xsrf-with-my faces-frameworks-steve-wolf
 
Appsec usa roberthansen
Appsec usa roberthansenAppsec usa roberthansen
Appsec usa roberthansen
 
Appsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaolaAppsec usa2013 js_libinsecurity_stefanodipaola
Appsec usa2013 js_libinsecurity_stefanodipaola
 
Appsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_editsAppsec2013 presentation-dickson final-with_all_final_edits
Appsec2013 presentation-dickson final-with_all_final_edits
 
Appsec2013 presentation
Appsec2013 presentationAppsec2013 presentation
Appsec2013 presentation
 
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitationsAppsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
Appsec 2013-krehel-ondrej-forensic-investigations-of-web-exploitations
 
Appsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martinAppsec2013 assurance tagging-robert martin
Appsec2013 assurance tagging-robert martin
 
Amol scadaowasp
Amol scadaowaspAmol scadaowasp
Amol scadaowasp
 
Agile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usaAgile sdlc-v1.1-owasp-app sec-usa
Agile sdlc-v1.1-owasp-app sec-usa
 
Vulnex app secusa2013
Vulnex app secusa2013Vulnex app secusa2013
Vulnex app secusa2013
 
基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架基于虚拟化技术的分布式软件测试框架
基于虚拟化技术的分布式软件测试框架
 
天猫后端技术架构优化实践
天猫后端技术架构优化实践天猫后端技术架构优化实践
天猫后端技术架构优化实践
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践
 
T4 淘宝私有云
T4 淘宝私有云T4 淘宝私有云
T4 淘宝私有云
 

Qcon beijing-2013-04-27-tianyongqiang