• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
独爽不如众乐
 

独爽不如众乐

on

  • 1,045 views

分享平台应用NodeJS MongoDB, nginX 的实践。

分享平台应用NodeJS MongoDB, nginX 的实践。

Statistics

Views

Total Views
1,045
Views on SlideShare
1,029
Embed Views
16

Actions

Likes
0
Downloads
25
Comments
0

2 Embeds 16

http://fenxiang.taobao.net 15
http://nodeslide.herokuapp.com 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

独爽不如众乐 独爽不如众乐 Presentation Transcript

  • 独爽不如众乐 分享平台构建之旅
  • 文龙@maxbbn交易&新业务评价
  • fenxiang.taobao.net
  • 服务器端
  • 服务器端• 应用服务器• 前端服务器
  • 服务器端• 应用服务器• 前端服务器
  • 服务器端• 应用服务器• 前端服务器
  • NodeJS, 啥?
  • NodeJS, 啥?• server-side V8
  • NodeJS, 啥?• server-side V8• event-driven 事件驱动
  • NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO
  • NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO• single threaded, efficient 单线程
  • NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO• single threaded, efficient 单线程• freaking fast 真XX快
  • 不擅长的• 发送大量静态文件• 密集的计算(use Worker)
  • a Simple Servervar http = require(http);http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); res.end(Hello Worldn);}).listen(1337, "127.0.0.1");console.log(Server running at http://127.0.0.1:1337/);
  • Nginx, Who?
  • Nginx, Who?• HTTP 和 反向代理 服务器
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程• Resource efficient 高效
  • Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程• Resource efficient 高效• Highly modular 高度模块化
  • Work Together
  • Work Together fenxinag.taobao.net
  • Work Together fenxinag.taobao.net
  • Work Together fenxinag.taobao.net :80
  • Work Together fenxinag.taobao.net :80 Nginx
  • Work Together fenxinag.taobao.net :80 Nginx
  • Work Together fenxinag.taobao.net :80 Nginx proxy to:8000
  • Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • 配置nginx很简单server { listen 80; server_name fenxiang.taobao.net; location / { proxy_pass http://localhost:8000; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; } }
  • nginx dealing with the static filesserver { listen 80; server_name fenxiang.taobao.net; location ~* .(png|jpg|gif|zip|ppt|rar|pdf|js|css|less)$ { root /home/wwwroot/fenxiang/public; } location / { proxy_pass http://localhost:8000; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; } }
  • 数据库
  • 星系 发的故事
  • • noSQL | Document Based 文档型数据库 星系 发的故事
  • • noSQL | Document Based 文档型数据库• store in JSON; query in json. 星系 发的故事
  • • noSQL | Document Based 文档型数据库• store in JSON; query in json.• Speak Javascript 不说鸟语 星系 发的故事
  • VS
  • VS• 都特XX快
  • VS• 都特XX快• 都说 Javascript
  • VS• 都特XX快• 都说 Javascript• 都喜欢 JSON
  • VS• 都特XX快• 都说 Javascript• 都喜欢 JSON• 都是前端的好朋友
  • 诺德和 哥
  • 诺德和 哥N M
  • Web framework
  • a Simple Servervar http = require(http);http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); res.end(Hello Worldn);}).listen(1337, "127.0.0.1");console.log(Server running at http://127.0.0.1:1337/); 原生的HTTPServer比较 弱 只提供非常有限的功能 不过,如何去扩展我们 的server 。
  • a Simple Servervar http = require(http);http.createServer(function (req, res) { res.writeHead(200, {Content-Type: text/plain}); 回调 res.end(Hello Worldn);}).listen(1337, "127.0.0.1");console.log(Server running at http://127.0.0.1:1337/); 原生的HTTPServer比较 弱 只提供非常有限的功能 不过,如何去扩展我们 的server 。
  • Connect• 中间件框架• 内置多达18个中间件• 精选第三方插件
  • • logger • methodOverride• csrf • responseTime• compress • staticCache• basicAuth • static• bodyParser • directory• json • vhost• urlencoded • favicon• multipart • limit• cookieParser • query• session • errorHandler• cookieSession
  • what is middleware? 回调function (req, res) {}
  • what is middleware?请求 回调进入 function (req, res) { }
  • what is middleware?请求 响应 回调进入 发送 function (req, res) { }
  • what is middleware?请求 响应 回调进入 发送 function (req, res) { }
  • what is middleware? query请求 响应 回调进入 发送 function (req, res) { }
  • what is middleware? query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • what is middleware? session query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • what is middleware? session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • what is middleware? session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • what is middleware? compress session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • what is middleware? compress session cookie parser query请求 回调 响应 发送进入 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • • Web 发框架
  • • Web 发框架• 基于Connect
  • • Web 发框架• 基于Connect• 轻量高效, 满足日常所需
  • • Web 发框架• 基于Connect• 轻量高效, 满足日常所需• 易扩展
  • • Web 发框架• 基于Connect• 轻量高效, 满足日常所需• 易扩展• 路由 Routers
  • 动手构建
  • REST 风格的接口
  • 分享平台提供的资源
  • 分享平台提供的资源 分享 * 分享会
  • 分享平台提供的资源 分享 * 分享会
  • 分享平台提供的资源 分享 * 分享会 分享会 数据模式 { subject : {type:String, required:true}, shares : [ { type: Schema.ObjectId, ref: share } ], ... }
  • REST 特点• 为所有“事物”定义ID• 将所有事物链接在一起• 使用标准方法• 资源多重表述• 无状态通信
  • Why REST• 标准化,容易理解• 客户端兼容• express-resource
  • 类 Resouseful操作 键 HTTP方法 路径新建 new GET /share/new创建 create POST /share更新 update PUT /share/000001获取 show GET /share/000001索引 index GET /share删除 delete DELETE /share/000001
  • http://fenxiang.taobao.net /shareset/new
  • http://fenxiang.taobao.net/share/4f44f43c0eca437223000386
  • http://fenxiang.taobao.net/shareset/share_20120224
  • 索引接口使用http://fenxiang.taobao.net/share?size=8&sort=viewCount
  • 索引接口使用http://fenxiang.taobao.net/share?tags=优化
  • 展现层使用资源接口,将资源以一些形式展示出来
  • • MVC
  • • MVC • Backbone - mustache
  • • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template
  • • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template• Bootstrap from twitter
  • • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template• Bootstrap from twitter• LESS
  • 版本管理
  • 版本管理• git
  • 版本管理• git• 分支管理
  • 版本管理• git• 分支管理 • master (当前部署)
  • 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署)
  • 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支)
  • 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支) • feature2 (特性分支)
  • 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支) • feature2 (特性分支)• git hook 自动更新和部署
  • 通过 hooks 自动更新和部署#!/bin/sh//进入部署文件夹cd ~/ratting-app/unset GIT_DIR//更新文件git pull//安装依赖npm install -d//重启应用forever restart /home/git/app/server.jsecho success...exec git-update-server-info
  • UED一直以来有很好的分享传统我们有很多分享会
  • 商品线-交易线分享会 一淘分享会 UED一直以来有很好的 分享传统 我们有很多分享会
  • 我们也认识到分享要淀下来
  • 我们也认识到分享要淀下来
  • Thank you!• 欢迎一起 发,一起来“玩”各 新技术• 欢迎加入 N-O-D-E 群• 分享平台期待你的分享
  • 相 链接• nodejs http://nodejs.org• Expressjs http://expressjs.com/• Connect http://www.senchalabs.org/connect/• MongoDB http://www.mongodb.org/• Mongoose http://mongoosejs.com/• Nginx http://nginx.org/• momentjs http://momentjs.com• 深入浅出REST http://www.infoq.com/cn/articles/rest-introduction