SlideShare a Scribd company logo
1 of 37
Download to read offline
Node.js酸奶框架 
我们的Web全栈开发实践 
Shared By Xiang Shouding
相守⿍鼎 
2012年加⼊入百度 
@相守⿍鼎 
@xiangshouding
⼤大纲 
• 酸奶框架是什么 
• 酸奶框架提供了那些功能 
• 应⽤用部署上线 
• 应⽤用的线上运维
酸奶框架是什么
• 先从⼀一个项⺫⽬目说起 
• 项⺫⽬目特性 
• 前端WebApp应⽤用,RTT时间⻓长 
• 数据接⼝口杂乱 
• 业务⽀支持度不理想 
• 静态资源管理不理想
• ⽅方案 
• 后端渲染,解决webapp RTT时间⻓长问题 
• 使⽤用node作为中间层,提⾼高前端可控性,⽅方便⽀支 
持项⺫⽬目以及统⼀一接⼝口 
• 使⽤用FIS 2.0解决前端⼯工程问题
“⽤用node.js的哪个框架呢?”
express.js koa 
nodejs <= 0.10.30 nodejs >= 0.11.1 
烦⼈人的callback generator 
稳定性 
express.js
express.js 
可扩展 
⾼高度灵活 
需配置(硬编码) 
kraken.js 
可扩展 
MVC 
通过配置⽂文件配置
介绍 
• 酸奶框架,基于kraken.js的Web MVC开发框架; 
• 可扩展 
• 前后端分离 
• ⽀支持项⺫⽬目拆分 
• ⽀支持BigPipe,chunk渲染模板 
• 简称“yog”
Front-End Fr UI Layer 
Back-End 
UI Layer 
Browser 
Business Logic 
Server 
HTTP/HTTPS
UI Layer 
Front-End 
Back-End 
Browser 
Business Logic 
Server 
HTTP/HTTPS 
UI Layer 
Server 
HTTP/HTTPS
⼩小结 
• 整个⽅方案实现了 
• ⾸首屏时间 3.55s 减少⾄至 1.55s 
• 开发速度相较相同项⺫⽬目提升20%
酸奶框架提供的功能
• FIS静态资源管理 
• BigPipe 
• RAL:resource access layer
FIS静态资源管理 
• ⾃自动构建: 
• 静态资源:md5,压缩,CDN,资源合并,资源定位... 
• 异构语⾔言的使⽤用:less,coffescript,sass... 
• 前端模板预编译 
• 模块化 
• 按需加载 
• ⽅方便维护
静态资源管理 
{%widget "widget/nav/nav.tpl"%} 
{%widget "widget/sidebar/sidebar.tpl"}
BigPipe 
• Chunk输出:并行数据并行渲染模板 
• 高效 
• SPA(单页应用) 
• 学习成本低 
• pagecache 
• 对SEO友好 
• LazyRender 
• 方便做首屏优化
BigPipe 
并⾏行数据并⾏行渲染
BigPipe SPA 
{%widget "content.tpl" id=“content" mode=“quickling”%} 
A B 
page_a.tpl page_b.tpl
BigPipe 
• LazyRender 
• 组件延迟渲染
RAL: resource access layer 
• node-ral 
• 负载均衡 
• 多种数据打包⽅方式 
• 扩展性
RAL: resource access layer 
{ 
"SOME_SERVICE": { 
"unpack": "json", 
"pack": "form", 
"method": "POST" 
"encoding": "gbk", 
"balance": "random", 
"protocol": "http", 
"server": [ 
{ "host": "127.0.0.1", "port": 8080} 
] 
} 
} 
var RAL = require('node-ral').RAL; 
var request = RAL('SOME_SERVICE', { 
path: '/user/info' 
data: { 
'name': 'admin', 
'city': 'Beijing', 
'gender': 'Male' 
} 
}); 
request.on('data', function(data){ 
data.status.should.be.eql(0); 
});
小结 
• 静态资源管理 
• ⾃自动化 
• 模块化 
• ⽅方便快速开发SPA 
• 便于性能优化 
• ⽅方便和通⽤用服务通信
应⽤用部署上线
Nginx 
PHP UI 
… 
Nginx 
PHP UI 
server server 
PHP UI Cluster 
Request 
Load Balancer(Transmit) 
Nginx 
… 
Node.js process 
Node.js process 
Node.js process 
server(multi core) 
NodeJS UI Cluster 
… 
Nginx 
Node.js process 
Node.js process 
… 
Node.js process 
server(multi core)
部署 
• Nginx 配置实现⼩小流量,流量切换等 
• upstream 
• location
部署 
upstream nodejs { 
location ~ "^/mobile/xxx"{ 
proxy_pass http://nodejs; 
break; 
} 
upstream nodejs_php { 
server 127.0.0.1:8080 max_fails=2 fail_timeout=1s weight=10; 
server 10.0.0.10:8080 max_fails=2 fail_timeout=1s weight=1 
} 
location ~ "^/mobile/yyy"{ 
proxy_pass http://nodejs_php; 
break; 
} 
server 127.0.0.1:8080 max_fails=2 fail_timeout=1s weight=10; 
}
应⽤用线上运维
运维 
稳定性 
• pm2 
• 0宕机启动 
• 监控 
• 多进程管理 
• yog-pm 
• 扩展⾃自pm2 
• 内存检查 
• ⾃自启动
运维 
logger 标准化的⽇日志 
• ⽅方便⽇日志统计 
• ⽅方便统计监控 
• 捕获异常,错误,请求 
• 维持唯⼀一ID
总结 
• Yog是什么 
• Yog的核⼼心功能 
• ⾃自动化、模块化的静态资源管理 
• 灵活的⻚页⾯面渲染⽅方式 
• ⽅方便和通⽤用服务互联 
• Yog App的部署、上线
Q&A
Thanks 
• FEX官⺴⽹网 http://fex.baidu.com 
• FIS官⺴⽹网 http://fis.baidu.com 
• FIS解决⽅方案 http://fis.baidu.com 
• github https://github.com/fex-team/yog

More Related Content

What's hot

Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Jimmy Ho
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
数据架构方面的一些探讨
数据架构方面的一些探讨数据架构方面的一些探讨
数据架构方面的一些探讨Chao Zhu
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生dennis zhuang
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server國昭 張
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】inwin stack
 
金山云查询系统改进之路1
金山云查询系统改进之路1金山云查询系统改进之路1
金山云查询系统改进之路1Zoom Quiet
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS國昭 張
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘Joshua Zhu
 
美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术团队
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析國昭 張
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术团队
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化Jinrong Ye
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统美团点评技术团队
 
頑皮工坊 GCP 大冒險
頑皮工坊 GCP 大冒險頑皮工坊 GCP 大冒險
頑皮工坊 GCP 大冒險onlinemad
 

What's hot (20)

Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Zabbix in PPTV
Zabbix in PPTVZabbix in PPTV
Zabbix in PPTV
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
数据架构方面的一些探讨
数据架构方面的一些探讨数据架构方面的一些探讨
数据架构方面的一些探讨
 
一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生一个 Mongodb command 的前世今生
一个 Mongodb command 的前世今生
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】Train.IO 【第六期-OpenStack 二三事】
Train.IO 【第六期-OpenStack 二三事】
 
金山云查询系统改进之路1
金山云查询系统改进之路1金山云查询系统改进之路1
金山云查询系统改进之路1
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘
 
美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台美团点评技术沙龙14美团云-Docker平台
美团点评技术沙龙14美团云-Docker平台
 
React js
React jsReact js
React js
 
DDD系統分析
DDD系統分析DDD系統分析
DDD系統分析
 
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进美团点评技术沙龙13-酒旅Hybrid架构体系及演进
美团点评技术沙龙13-酒旅Hybrid架构体系及演进
 
如何针对业务做DB优化
如何针对业务做DB优化如何针对业务做DB优化
如何针对业务做DB优化
 
美团技术沙龙04 美团下一代分布式存储系统
美团技术沙龙04   美团下一代分布式存储系统美团技术沙龙04   美团下一代分布式存储系统
美团技术沙龙04 美团下一代分布式存储系统
 
頑皮工坊 GCP 大冒險
頑皮工坊 GCP 大冒險頑皮工坊 GCP 大冒險
頑皮工坊 GCP 大冒險
 

Viewers also liked

HTML5 介绍
HTML5 介绍HTML5 介绍
HTML5 介绍S S
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站areyouok
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongMichael Zhang
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
Lenovo SAP Customer Success Story
Lenovo SAP Customer Success StoryLenovo SAP Customer Success Story
Lenovo SAP Customer Success StorySAP Technology
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用琛琳 饶
 
Slack Pro Tips - The most used tool, the least known one
Slack Pro Tips - The most used tool, the least known oneSlack Pro Tips - The most used tool, the least known one
Slack Pro Tips - The most used tool, the least known oneMarco Pracucci
 

Viewers also liked (7)

HTML5 介绍
HTML5 介绍HTML5 介绍
HTML5 介绍
 
腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站腾讯大讲堂09 如何建设高性能网站
腾讯大讲堂09 如何建设高性能网站
 
Lvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukongLvs在大规模网络环境下的应用pukong
Lvs在大规模网络环境下的应用pukong
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
Lenovo SAP Customer Success Story
Lenovo SAP Customer Success StoryLenovo SAP Customer Success Story
Lenovo SAP Customer Success Story
 
Perl在nginx里的应用
Perl在nginx里的应用Perl在nginx里的应用
Perl在nginx里的应用
 
Slack Pro Tips - The most used tool, the least known one
Slack Pro Tips - The most used tool, the least known oneSlack Pro Tips - The most used tool, the least known one
Slack Pro Tips - The most used tool, the least known one
 

Similar to Yog Framework

Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)锐 张
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseJack Gao
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术团队
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJSTechParty@UIC
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构Cosey Lee
 
Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Li Yi
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统Frank Xu
 
03.osb概览
03.osb概览03.osb概览
03.osb概览Meng He
 
KSDG BaaS Intro
KSDG BaaS IntroKSDG BaaS Intro
KSDG BaaS Introericpi Bi
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocessbabel_qi
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案美团技术团队
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送yongboy
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送yongboy
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案Ady Liu
 

Similar to Yog Framework (20)

Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)新浪云计算公开课第一期:Let’s run @ sae(丛磊)
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
 
Data Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouseData Analyse Black Horse - ClickHouse
Data Analyse Black Horse - ClickHouse
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍美团点评技术沙龙13-前端工程化开发方案app-proto介绍
美团点评技术沙龙13-前端工程化开发方案app-proto介绍
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
构建基于Lamp的网站架构
构建基于Lamp的网站架构构建基于Lamp的网站架构
构建基于Lamp的网站架构
 
Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践Gops2016 云端基于Docker的微服务与持续交付实践
Gops2016 云端基于Docker的微服务与持续交付实践
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
03.osb概览
03.osb概览03.osb概览
03.osb概览
 
KSDG BaaS Intro
KSDG BaaS IntroKSDG BaaS Intro
KSDG BaaS Intro
 
分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess分布式流数据实时计算平台 Iprocess
分布式流数据实时计算平台 Iprocess
 
Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案Truck js 高性能移动web开发解决方案
Truck js 高性能移动web开发解决方案
 
Real time web实时信息流推送
Real time web实时信息流推送Real time web实时信息流推送
Real time web实时信息流推送
 
Real-Time Web实时信息流推送
Real-Time Web实时信息流推送Real-Time Web实时信息流推送
Real-Time Web实时信息流推送
 
高性能远程调用解决方案
高性能远程调用解决方案高性能远程调用解决方案
高性能远程调用解决方案
 

Yog Framework

Editor's Notes

  1. Nodejs的出现让这种架构成为可能 1.控制更灵活,开发效率更高 2.性能更高
  2. 启用方便
  3. mode=quickling的组件,首次渲染不会直接渲染;
  4. resource access layer