SlideShare uma empresa Scribd logo
1 de 22
Full-Stack-Development with 
NodeJS 
携程Mobile/Online 应用场景分析
Agenda 
• Recall: n-Layer Code Structure & Org Structure 
• What’s NodeJS 
• Who are applying NodeJS 
• Why considering NodeJS for Ctrip 
• Risks & Issues 
• Demo & QA
n-Layer Distilled – Tech Stack 
e-Commerce System (frontend + backend) 
FrontEnd BackEnd 
JobWS Svc Proxies 
SOA/Asmx/WCF/ 
Servlet/RESTful Svc 
Technology Center 
Controllers, Svc Proxies 
Presentation Layer 
Application Layer 
Domain Layer 
Infrastructure Layer 
HTML/JS Aspx/Servlet 
Ascx/Taglib/JSF 
DAL Fx/Svc, Data Access Layer, etc. 
ADO.NET, JDBC, ORM, etc. 
Framework, Utils, etc. 
Utils 
OOD & 
DDD 
WinSvc
Code Arch to Org Arch – Ctrip Samples 
• Ctrip Flight Dev Team 
– Frontend  Presentation + Application 
– Backend  API (SOA) + Domain + Data 
• Ctrip Hotel Dev Team 
– Data Dev Team  DB/SQL/Repl/DAL 
• Ctrip Fx Dev Team 
– Frontend  Presentation + Application 
– Backend  API (RESTful) + Domain + Data
Code Arch to Org Arch – Int’l Flight Team 
航空公司SNS 无线APP Online 分销Offline 
搜索查询 
资源共享平台API 
GDS Amadeus Sabre Galileo 中航信 
Presentation 
Layer (View) 
Application 
Layer (Controller) 
Domain Layer 
(API) 
Infrastructure 
Layer (internal) 
Infrastructure 
Layer (external) 
Frontend Dev Team 
Backend Dev Team
Agenda 
• Recall: n-Layer Code Structure & Org Structure 
• What’s NodeJS 
• Who are applying NodeJS 
• Why considering NodeJS for Ctrip 
• Risks & Issues 
• Demo
What’s NodeJS 
• 2009.5 Ryan Dahl 发布于GitHub,总排名#3 
• 基于Google V8 引擎的Web & Socket Server 
• 使用Javascript 编写服务端代码,前后通吃 
• Single Thread, Event Driven, Non-blocking IO 
• Light-weight, Scale-out, Cluster-enabled 
• 接近70,000 NPM (Node Packaged Modules) 
• 成熟的社区,热情贡献者,Full-Stack 呼声
Who are applying NodeJS (国外) 
• LinkedIn 
– 2012.10 将所有移动应用服务从Ruby on Rails 迁到NodeJS 
• Groupon 
– 2013.10 将所有应用从Ruby on Rails 迁到NodeJS 
• eBay 
– 2012.3 在GitHub 发布ql.io 框架,可认为是Service Aggregator 
– 2013.5 发布第一个线上NodeJS 项目 
• PayPal 
– 2012.4 使用NodeJS 在6 周内完成支付系统重写 
– 2013.1 在GitHub 发布Kraken 框架,两年内将大规模使用 
• Walmart  2014 年底电商平台全上NodeJS 
• Google, Yahoo, Netflix, AWS, Azure, etc.
Who are applying NodeJS (国内) 
• 淘宝 
– 淘宝指数、数据魔方、时光机 
– CNodeJS 社区 
• 网易 
– 2012.11 在GitHub 发布pomelo 框架 
– 移动推送、Web 推送采用pomelo 框架构建 
• 腾讯推送、百度推送、搜狐推送、新浪微博DB Proxy 
• 去哪儿、点点、花瓣、雪球、小米手机销售、etc. 
• 携程 DVF RESTful API、Real-Time Crawler (Open House)
携程最新进展: 
1、框架已构建Ctrip NPM Repository 
2、Clog via edge, SOA via Node native 
3、门票v5.8 H5/Hybrid 接入NodeJS
Agenda 
• Recall: n-Layer Code Structure & Org Structure 
• What’s NodeJS 
• Who are applying NodeJS 
• Why considering NodeJS for Ctrip 
• Risks & Issues & Countermeasure 
• Demo
Why considering NodeJS for Ctrip 
• 高性能,可减少服务器(non-blocking IO, IOCP on Windows) 
• 开发效率高,减少集成(Same Javascript + Less Integration) 
• 易于修改和维护(由管道连接小模块构成) 
• DRY Principle:View & Controller 共用一套验证逻辑 
• Frontend == View + Controller,Controller 是短板 
• Controller == Model (SOA 1.0/2.0) Composing & Tailoring 
• 适合IO-intensive 场景,不适合CPU-intensive 场景 
• 机票、酒店已做前后端分离,可在前端团队尝试 
• 强烈建议看这篇文章:淘宝基于NodeJS 全栈开发
Frontend & Backend – Tech Stack
Risk & Issue & Countermeasure 
• 思想理念的转变 Controller from C# to JS 
• 团队分工的转变 Frontend Full-Stack-Engineer 
and Full-Stack-Development 
• 同步开发模式 异步开发模式+ 严格异常处理 
• 框架支持 Clog、SOA 已验证没问题,可稳定运 
行(demo),Cfx 需扩展,但不动核心,CI 原生支持 
• 运维支持 NodeJS module for Zabbix 
• 其它SOA 支持 NodeJS module for SOAP/REST 
• NodeJS & NPM  框架& 系统研发(C/C++/Driver支持)
请收藏两个Mail Groups: 
1、技术支持:RDkjts 
2、产品建议: KJCP
Demo #1 – ql.io for service composing 
& tailoring
Demo #2 – Send log via Clog .NET client
Demo #3 – Send log via SOA 2.0 client
Demo #4 – Visit .NET Service via SOAP
Demo #5 – One rule set via nools run 
@ both node-side and browser-side
Demo #6 – One js via browserify run @ 
both node-side and browser-side
Q & A

Mais conteúdo relacionado

Mais procurados

Redux+react js
Redux+react jsRedux+react js
Redux+react js國昭 張
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践Xupeng Yun
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server國昭 張
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)Jeff Chu
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析國昭 張
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
QCon - 一次 Clojure Web 编程实战
QCon - 一次 Clojure Web 编程实战QCon - 一次 Clojure Web 编程实战
QCon - 一次 Clojure Web 编程实战dennis zhuang
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overviewChris Lee
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台drewz lin
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
架構設計-資料存取的選擇
架構設計-資料存取的選擇架構設計-資料存取的選擇
架構設計-資料存取的選擇國昭 張
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘Joshua Zhu
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)frogd
 

Mais procurados (20)

Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
豆瓣数据架构实践
豆瓣数据架构实践豆瓣数据架构实践
豆瓣数据架构实践
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
React js
React jsReact js
React js
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
QCon - 一次 Clojure Web 编程实战
QCon - 一次 Clojure Web 编程实战QCon - 一次 Clojure Web 编程实战
QCon - 一次 Clojure Web 编程实战
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
Pptv lb日志实时分析平台
Pptv lb日志实时分析平台Pptv lb日志实时分析平台
Pptv lb日志实时分析平台
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
架構設計-資料存取的選擇
架構設計-資料存取的選擇架構設計-資料存取的選擇
架構設計-資料存取的選擇
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)
 

Semelhante a Full stack-development with node js

Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
课题二:Node.js那些事儿
课题二:Node.js那些事儿课题二:Node.js那些事儿
课题二:Node.js那些事儿Liu Allen
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJSTechParty@UIC
 
Yog Framework
Yog FrameworkYog Framework
Yog Frameworkfansekey
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建Zhang Xiaoxue
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用謝 宗穎
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)志龍 陳
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】inwin stack
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkitLainZQ
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架Will Huang
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理gorillazf
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设Tianwei Liu
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)锐 张
 
Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Li Yi
 

Semelhante a Full stack-development with node js (20)

Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
课题二:Node.js那些事儿
课题二:Node.js那些事儿课题二:Node.js那些事儿
课题二:Node.js那些事儿
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
Meteor
MeteorMeteor
Meteor
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
基于Seajs的项目构建
基于Seajs的项目构建基于Seajs的项目构建
基于Seajs的项目构建
 
N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用從軟體開發角度
談 Docker 的應用
從軟體開發角度
談 Docker 的應用
 
Angular從入門到實戰(二)
Angular從入門到實戰(二)Angular從入門到實戰(二)
Angular從入門到實戰(二)
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】
 
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架快快樂樂學 Angular 2 開發框架
快快樂樂學 Angular 2 開發框架
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理
 
2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设2021 ee大会-旷视ai产品背后的研发效能工具建设
2021 ee大会-旷视ai产品背后的研发效能工具建设
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
 
Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践
 

Full stack-development with node js

  • 1. Full-Stack-Development with NodeJS 携程Mobile/Online 应用场景分析
  • 2. Agenda • Recall: n-Layer Code Structure & Org Structure • What’s NodeJS • Who are applying NodeJS • Why considering NodeJS for Ctrip • Risks & Issues • Demo & QA
  • 3. n-Layer Distilled – Tech Stack e-Commerce System (frontend + backend) FrontEnd BackEnd JobWS Svc Proxies SOA/Asmx/WCF/ Servlet/RESTful Svc Technology Center Controllers, Svc Proxies Presentation Layer Application Layer Domain Layer Infrastructure Layer HTML/JS Aspx/Servlet Ascx/Taglib/JSF DAL Fx/Svc, Data Access Layer, etc. ADO.NET, JDBC, ORM, etc. Framework, Utils, etc. Utils OOD & DDD WinSvc
  • 4. Code Arch to Org Arch – Ctrip Samples • Ctrip Flight Dev Team – Frontend  Presentation + Application – Backend  API (SOA) + Domain + Data • Ctrip Hotel Dev Team – Data Dev Team  DB/SQL/Repl/DAL • Ctrip Fx Dev Team – Frontend  Presentation + Application – Backend  API (RESTful) + Domain + Data
  • 5. Code Arch to Org Arch – Int’l Flight Team 航空公司SNS 无线APP Online 分销Offline 搜索查询 资源共享平台API GDS Amadeus Sabre Galileo 中航信 Presentation Layer (View) Application Layer (Controller) Domain Layer (API) Infrastructure Layer (internal) Infrastructure Layer (external) Frontend Dev Team Backend Dev Team
  • 6. Agenda • Recall: n-Layer Code Structure & Org Structure • What’s NodeJS • Who are applying NodeJS • Why considering NodeJS for Ctrip • Risks & Issues • Demo
  • 7. What’s NodeJS • 2009.5 Ryan Dahl 发布于GitHub,总排名#3 • 基于Google V8 引擎的Web & Socket Server • 使用Javascript 编写服务端代码,前后通吃 • Single Thread, Event Driven, Non-blocking IO • Light-weight, Scale-out, Cluster-enabled • 接近70,000 NPM (Node Packaged Modules) • 成熟的社区,热情贡献者,Full-Stack 呼声
  • 8. Who are applying NodeJS (国外) • LinkedIn – 2012.10 将所有移动应用服务从Ruby on Rails 迁到NodeJS • Groupon – 2013.10 将所有应用从Ruby on Rails 迁到NodeJS • eBay – 2012.3 在GitHub 发布ql.io 框架,可认为是Service Aggregator – 2013.5 发布第一个线上NodeJS 项目 • PayPal – 2012.4 使用NodeJS 在6 周内完成支付系统重写 – 2013.1 在GitHub 发布Kraken 框架,两年内将大规模使用 • Walmart  2014 年底电商平台全上NodeJS • Google, Yahoo, Netflix, AWS, Azure, etc.
  • 9. Who are applying NodeJS (国内) • 淘宝 – 淘宝指数、数据魔方、时光机 – CNodeJS 社区 • 网易 – 2012.11 在GitHub 发布pomelo 框架 – 移动推送、Web 推送采用pomelo 框架构建 • 腾讯推送、百度推送、搜狐推送、新浪微博DB Proxy • 去哪儿、点点、花瓣、雪球、小米手机销售、etc. • 携程 DVF RESTful API、Real-Time Crawler (Open House)
  • 10. 携程最新进展: 1、框架已构建Ctrip NPM Repository 2、Clog via edge, SOA via Node native 3、门票v5.8 H5/Hybrid 接入NodeJS
  • 11. Agenda • Recall: n-Layer Code Structure & Org Structure • What’s NodeJS • Who are applying NodeJS • Why considering NodeJS for Ctrip • Risks & Issues & Countermeasure • Demo
  • 12. Why considering NodeJS for Ctrip • 高性能,可减少服务器(non-blocking IO, IOCP on Windows) • 开发效率高,减少集成(Same Javascript + Less Integration) • 易于修改和维护(由管道连接小模块构成) • DRY Principle:View & Controller 共用一套验证逻辑 • Frontend == View + Controller,Controller 是短板 • Controller == Model (SOA 1.0/2.0) Composing & Tailoring • 适合IO-intensive 场景,不适合CPU-intensive 场景 • 机票、酒店已做前后端分离,可在前端团队尝试 • 强烈建议看这篇文章:淘宝基于NodeJS 全栈开发
  • 13. Frontend & Backend – Tech Stack
  • 14. Risk & Issue & Countermeasure • 思想理念的转变 Controller from C# to JS • 团队分工的转变 Frontend Full-Stack-Engineer and Full-Stack-Development • 同步开发模式 异步开发模式+ 严格异常处理 • 框架支持 Clog、SOA 已验证没问题,可稳定运 行(demo),Cfx 需扩展,但不动核心,CI 原生支持 • 运维支持 NodeJS module for Zabbix • 其它SOA 支持 NodeJS module for SOAP/REST • NodeJS & NPM  框架& 系统研发(C/C++/Driver支持)
  • 16. Demo #1 – ql.io for service composing & tailoring
  • 17. Demo #2 – Send log via Clog .NET client
  • 18. Demo #3 – Send log via SOA 2.0 client
  • 19. Demo #4 – Visit .NET Service via SOAP
  • 20. Demo #5 – One rule set via nools run @ both node-side and browser-side
  • 21. Demo #6 – One js via browserify run @ both node-side and browser-side
  • 22. Q & A