狠狠撸

狠狠撸Share a Scribd company logo
独爽不如众乐
 分享平台构建之旅
文龙@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, ef?cient 单线程
NodeJS, 啥?
? server-side V8
? event-driven 事件驱动
? non-blocking I/O 无阻塞的IO
? single threaded, ef?cient 单线程
? freaking fast 真XX快
不擅长的


? 发送大量静态文件
? 密集的计算(use 奥辞谤办别谤)
a Simple Server

var 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 ef?cient 高效
Nginx, Who?
?   HTTP 和 反向代理 服务器

?   IMAP/POP3/SMTP 代理服务器

?   Non-Blocking 无阻塞

?   Event-Driven 事件驱动

?   Single threaded 单线程

?   Resource ef?cient 高效

?   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 ?les
server
    {
         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 Server


var 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 Server


var 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 发框架
? 基于颁辞苍苍别肠迟
? Web 发框架
? 基于颁辞苍苍别肠迟
? 轻量高效, 满足日常所需
? Web 发框架
? 基于颁辞苍苍别肠迟
? 轻量高效, 满足日常所需
? 易扩展
? Web 发框架
? 基于颁辞苍苍别肠迟
? 轻量高效, 满足日常所需
? 易扩展
? 路由 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.js
echo 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

More Related Content

分享平台构建之旅

Editor's Notes