独爽不如众乐
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

独爽不如众乐

  • 1,218 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,218
On Slideshare
1,202
From Embeds
16
Number of Embeds
2

Actions

Shares
Downloads
26
Comments
0
Likes
0

Embeds 16

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \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

Transcript

  • 1. 独爽不如众乐 分享平台构建之旅
  • 2. 文龙@maxbbn交易&新业务评价
  • 3. fenxiang.taobao.net
  • 4. 服务器端
  • 5. 服务器端• 应用服务器• 前端服务器
  • 6. 服务器端• 应用服务器• 前端服务器
  • 7. 服务器端• 应用服务器• 前端服务器
  • 8. NodeJS, 啥?
  • 9. NodeJS, 啥?• server-side V8
  • 10. NodeJS, 啥?• server-side V8• event-driven 事件驱动
  • 11. NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO
  • 12. NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO• single threaded, efficient 单线程
  • 13. NodeJS, 啥?• server-side V8• event-driven 事件驱动• non-blocking I/O 无阻塞的IO• single threaded, efficient 单线程• freaking fast 真XX快
  • 14. 不擅长的• 发送大量静态文件• 密集的计算(use Worker)
  • 15. 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/);
  • 16. Nginx, Who?
  • 17. Nginx, Who?• HTTP 和 反向代理 服务器
  • 18. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器
  • 19. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞
  • 20. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动
  • 21. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程
  • 22. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程• Resource efficient 高效
  • 23. Nginx, Who?• HTTP 和 反向代理 服务器• IMAP/POP3/SMTP 代理服务器• Non-Blocking 无阻塞• Event-Driven 事件驱动• Single threaded 单线程• Resource efficient 高效• Highly modular 高度模块化
  • 24. Work Together
  • 25. Work Together fenxinag.taobao.net
  • 26. Work Together fenxinag.taobao.net
  • 27. Work Together fenxinag.taobao.net :80
  • 28. Work Together fenxinag.taobao.net :80 Nginx
  • 29. Work Together fenxinag.taobao.net :80 Nginx
  • 30. Work Together fenxinag.taobao.net :80 Nginx proxy to:8000
  • 31. Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • 32. Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • 33. Work Together fenxinag.taobao.net :80 Nginx proxy to:8000 NodeJS Server
  • 34. Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • 35. Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • 36. Work Together fenxinag.taobao.net :80 Static Nginx File proxy to:8000 NodeJS Server
  • 37. 配置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; } }
  • 38. 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; } }
  • 39. 数据库
  • 40. 星系 发的故事
  • 41. • noSQL | Document Based 文档型数据库 星系 发的故事
  • 42. • noSQL | Document Based 文档型数据库• store in JSON; query in json. 星系 发的故事
  • 43. • noSQL | Document Based 文档型数据库• store in JSON; query in json.• Speak Javascript 不说鸟语 星系 发的故事
  • 44. VS
  • 45. VS• 都特XX快
  • 46. VS• 都特XX快• 都说 Javascript
  • 47. VS• 都特XX快• 都说 Javascript• 都喜欢 JSON
  • 48. VS• 都特XX快• 都说 Javascript• 都喜欢 JSON• 都是前端的好朋友
  • 49. 诺德和 哥
  • 50. 诺德和 哥N M
  • 51. Web framework
  • 52. 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 。
  • 53. 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 。
  • 54. Connect• 中间件框架• 内置多达18个中间件• 精选第三方插件
  • 55. • logger • methodOverride• csrf • responseTime• compress • staticCache• basicAuth • static• bodyParser • directory• json • vhost• urlencoded • favicon• multipart • limit• cookieParser • query• session • errorHandler• cookieSession
  • 56. what is middleware? 回调function (req, res) {}
  • 57. what is middleware?请求 回调进入 function (req, res) { }
  • 58. what is middleware?请求 响应 回调进入 发送 function (req, res) { }
  • 59. what is middleware?请求 响应 回调进入 发送 function (req, res) { }
  • 60. what is middleware? query请求 响应 回调进入 发送 function (req, res) { }
  • 61. what is middleware? query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • 62. what is middleware? session query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • 63. what is middleware? session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ }
  • 64. what is middleware? session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • 65. what is middleware? compress session cookie parser query请求 响应 回调进入 发送 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • 66. what is middleware? compress session cookie parser query请求 回调 响应 发送进入 function (req, res) { req.query 对象 ✌ req.session 对象 ✌ req.cookie 对象 ✌ }
  • 67. • Web 发框架
  • 68. • Web 发框架• 基于Connect
  • 69. • Web 发框架• 基于Connect• 轻量高效, 满足日常所需
  • 70. • Web 发框架• 基于Connect• 轻量高效, 满足日常所需• 易扩展
  • 71. • Web 发框架• 基于Connect• 轻量高效, 满足日常所需• 易扩展• 路由 Routers
  • 72. 动手构建
  • 73. REST 风格的接口
  • 74. 分享平台提供的资源
  • 75. 分享平台提供的资源 分享 * 分享会
  • 76. 分享平台提供的资源 分享 * 分享会
  • 77. 分享平台提供的资源 分享 * 分享会 分享会 数据模式 { subject : {type:String, required:true}, shares : [ { type: Schema.ObjectId, ref: share } ], ... }
  • 78. REST 特点• 为所有“事物”定义ID• 将所有事物链接在一起• 使用标准方法• 资源多重表述• 无状态通信
  • 79. Why REST• 标准化,容易理解• 客户端兼容• express-resource
  • 80. 类 Resouseful操作 键 HTTP方法 路径新建 new GET /share/new创建 create POST /share更新 update PUT /share/000001获取 show GET /share/000001索引 index GET /share删除 delete DELETE /share/000001
  • 81. http://fenxiang.taobao.net /shareset/new
  • 82. http://fenxiang.taobao.net/share/4f44f43c0eca437223000386
  • 83. http://fenxiang.taobao.net/shareset/share_20120224
  • 84. 索引接口使用http://fenxiang.taobao.net/share?size=8&sort=viewCount
  • 85. 索引接口使用http://fenxiang.taobao.net/share?tags=优化
  • 86. 展现层使用资源接口,将资源以一些形式展示出来
  • 87. • MVC
  • 88. • MVC • Backbone - mustache
  • 89. • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template
  • 90. • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template• Bootstrap from twitter
  • 91. • MVC • Backbone - mustache • 替代方案 Kissy mvc,Kissy Template• Bootstrap from twitter• LESS
  • 92. 版本管理
  • 93. 版本管理• git
  • 94. 版本管理• git• 分支管理
  • 95. 版本管理• git• 分支管理 • master (当前部署)
  • 96. 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署)
  • 97. 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支)
  • 98. 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支) • feature2 (特性分支)
  • 99. 版本管理• git• 分支管理 • master (当前部署) • dev ( 发分支,待部署) • feature1 (特性分支) • feature2 (特性分支)• git hook 自动更新和部署
  • 100. 通过 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
  • 101. UED一直以来有很好的分享传统我们有很多分享会
  • 102. 商品线-交易线分享会 一淘分享会 UED一直以来有很好的 分享传统 我们有很多分享会
  • 103. 我们也认识到分享要淀下来
  • 104. 我们也认识到分享要淀下来
  • 105. Thank you!• 欢迎一起 发,一起来“玩”各 新技术• 欢迎加入 N-O-D-E 群• 分享平台期待你的分享
  • 106. 相 链接• 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