分享平台构建之旅

423 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
423
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

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
  • 分享平台构建之旅

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

    ×