Beyond `rails server`
     Rails全栈技术指南
陈金洲


     @mechiland

Picture taken by Michael Chen
部署   监控   架构演进
gem install rails
RVM
rails g scaffold
Programming Model
 GET      PUT     POST     DELETE



 show    update   create   destroy



SELECT   UPDATE   INSERT   DELETE
rails server
“15分钟创建Blog”

“24小时创建一个网站”
“15分钟创建Blog”

“24小时创建一个网站”
“15分钟创建Blog”

“24小时创建一个网站”
1. 部署
jinshuju.net
Browser   Web Server   App Server   Database
Browser   ?   Web Server   App Server   Database


                 ?             ?           ?
注册域名
域名
‣   www.domain.com
‣   *.domain.com
‣   MX记录
‣   TXT记录
主机
备案
cannot find this picture source
Web, App, DB
硬件准备完毕……
jinshuju.net
Git
      master

      dev

      feature 1

      feature 2
部署



cap deploy
除了CRUD

   resque + god



cronjob + whenever
持续部署


DEV    UAT   PROD
2. 监控
[h]top
vmstat      w      uptime


  ps       free    iostat


  sar     mpstat   pmap


netstat     ss     iptraf


tcpdump   strace   /proc
监控什么?
硬盘    www/db服务状态   Google Analytics



CPU   页面响应时间           微博@



内存     4xx/5xx页面   用户行为数据



带宽      邮件队列

                        ……
硬盘    www/db服务状态 Google Analytics



CPU   页面响应时间           微博@


内存     4xx/5xx页面    用户行为数据


带宽      邮件队列


      可用性影响逐渐   少
      实际花费时间逐渐增加
http://www.flickr.com/photos/declicjardin/309583331




3. 架构演进
初始
 Model

  View

Controller

   DB
进行中
 Model       Model      Model

  View       View        View

Controller Controller Controller

   DB         DB         DB
真实情况
 Model      Model       Model      Model      Model

  View       View       View       View        View

Controller Controller Controller Controller Controller

   DB         DB         DB         DB         DB
JavaEE/.NET
Rails/Linux的方式




   resque   cronjob
‣ 前台进程、后台进程、cronjob
‣ 前台进程保证响应时间在可接受范
 围之内(<200ms)

‣ 将耗时操作放入后台(delay_job,
 resque, sidekiq)
3000
代码行阈值
Picture taken by Michael Chen




                                随时准备应用剥离
核心应用
domain.com
核心部分
                 domain.com
核心应用
domain.com



                  支付
             payments.domain.com
核心部分
                                       domain.com
               核心部分
                 domain.com
核心应用
domain.com
                                     用户管理
                                     my.domain.com


                  支付                    支付
             payments.domain.com   payments.domain.com
‣ 将架构演进视作正常行为

‣ 警惕代码行数

‣ 随时准备剥离,进行进程分离
http://www.flickr.com/photos/rtv/2269548635




X. 免费赠送
B2B
Go B2b, B2C
rubygems.org
not just What
It’s about How
and Why
Beyond `rails server`




 部署             监控          架构演进
实现持续部署        监控应用行为             警惕规模变大
谢谢!

    陈金洲
    @mechiland
http://michael.nona.name

Beyond rails server

Editor's Notes

  • #2 \n
  • #3 \n
  • #4 \n
  • #5 \n
  • #6 \n
  • #7 \n
  • #8 \n
  • #9 \n
  • #10 \n
  • #11 \n
  • #12 &amp;#x4ED6;&amp;#x4EEC;&amp;#x591A;&amp;#x6570;&amp;#x8FC7;&amp;#x5EA6;&amp;#x7B80;&amp;#x5355;&amp;#x5316;&amp;#x4E86;&amp;#x4E00;&amp;#x4E2A;&amp;#x521B;&amp;#x5EFA;&amp;#x7F51;&amp;#x7AD9;&amp;#x6240;&amp;#x9700;&amp;#x8981;&amp;#x7684;&amp;#x77E5;&amp;#x8BC6;\n
  • #13 \n
  • #14 \n
  • #15 \n
  • #16 \n
  • #17 \n
  • #18 \n
  • #19 \n
  • #20 \n
  • #21 \n
  • #22 \n
  • #23  Apache + Passenger - &amp;#x7B80;&amp;#x5355;&amp;#xFF0C;&amp;#x4E0A;&amp;#x624B;&amp;#x5FEB;\n Nginx + unicorn - &amp;#x5FEB;&amp;#x901F;&amp;#xFF0C;&amp;#x8D44;&amp;#x6E90;&amp;#x5360;&amp;#x7528;&amp;#x5C11;\n &amp;#x6709;&amp;#x610F;&amp;#x601D;&amp;#x7684;&amp;#x662F; &amp;#x867D;&amp;#x7136;&amp;#x8BF4;&amp;#x5F00;&amp;#x6E90;&amp;#x793E;&amp;#x533A;&amp;#x6709;&amp;#x5F88;&amp;#x591A;&amp;#x9009;&amp;#x62E9;&amp;#xFF0C;&amp;#x4F46;&amp;#x5B9E;&amp;#x9645;&amp;#x4E0A;&amp;#x6CA1;&amp;#x6709;&amp;#x591A;&amp;#x5C11;\n &amp;#x597D;&amp;#x5904;&amp;#x662F;&amp;#x8FD9;&amp;#x4E9B;&amp;#x9009;&amp;#x62E9;&amp;#x90FD;&amp;#x662F;&amp;#x514D;&amp;#x8D39;&amp;#x7684;&amp;#xFF0C;&amp;#x5E76;&amp;#x4E14;&amp;#x6709;&amp;#x5927;&amp;#x91CF;&amp;#x9AD8;&amp;#x8D28;&amp;#x91CF;&amp;#x7684;&amp;#x6587;&amp;#x6863;&amp;#x3001;&amp;#x6559;&amp;#x7A0B;&amp;#x5B58;&amp;#x5728;\n
  • #24 \n
  • #25 Always stable master\n
  • #26 \n
  • #27 \n
  • #28 &amp;#x6301;&amp;#x7EED;&amp;#x90E8;&amp;#x7F72;&amp;#x6240;&amp;#x8981;&amp;#x6C42;&amp;#x7684;&amp;#xFF0C;&amp;#x7EDD;&amp;#x4E0D;&amp;#x4EC5;&amp;#x4EC5;&amp;#x662F;&amp;#x4E00;&amp;#x79CD;&amp;#x90E8;&amp;#x7F72;&amp;#x65B9;&amp;#x5F0F;&amp;#xFF0C;&amp;#x8FD8;&amp;#x5F3A;&amp;#x8C03;&amp;#x4E86;&amp;#x4E00;&amp;#x79CD;&amp;#x7279;&amp;#x6027;&amp;#x4F18;&amp;#x5148;&amp;#x7684;&amp;#x601D;&amp;#x8DEF;&amp;#x3002;&amp;#x6BCF;&amp;#x4E2A;&amp;#x7279;&amp;#x6027;&amp;#x90FD;&amp;#x5E94;&amp;#x8BE5;&amp;#x5F53;&amp;#x505A;&amp;#x4ECE;&amp;#x524D;&amp;#x5230;&amp;#x540E;&amp;#x7684;&amp;#x8003;&amp;#x8651;&amp;#xFF0C;&amp;#x800C;&amp;#x4E0D;&amp;#x4EC5;&amp;#x4EC5;&amp;#x662F;&amp;#x5206;&amp;#x5C42;&amp;#x5F0F;&amp;#x7684;&amp;#x5F00;&amp;#x53D1;&amp;#x3002;&amp;#x5B9E;&amp;#x73B0;&amp;#x4E86;&amp;#x6309;&amp;#x7167;&amp;#x7279;&amp;#x6027;&amp;#x5212;&amp;#x5206;&amp;#x5E76;&amp;#x4E14;&amp;#x5F00;&amp;#x53D1;&amp;#x7684;&amp;#x6301;&amp;#x7EED;&amp;#x90E8;&amp;#x7F72;&amp;#xFF0C;&amp;#x624D;&amp;#x5177;&amp;#x6709;&amp;#x5B9E;&amp;#x9645;&amp;#x7684;&amp;#x610F;&amp;#x4E49;&amp;#x3002;\n
  • #29 \n
  • #30 \n
  • #31 \n
  • #32 \n
  • #33 \n
  • #34 \n
  • #35 \n
  • #36 &amp;#x76F8;&amp;#x6BD4;Amazon/Linode&amp;#xFF0C;&amp;#x5373;&amp;#x4FBF;&amp;#x56FD;&amp;#x5185;&amp;#x7684;&amp;#x4E91;&amp;#x670D;&amp;#x52A1;&amp;#x5F88;&amp;#x4E0D;&amp;#x582A;&amp;#xFF0C;&amp;#x4F46;&amp;#x670D;&amp;#x52A1;&amp;#x7684;&amp;#x53EF;&amp;#x7528;&amp;#x6027;&amp;#x4ECD;&amp;#x7136;&amp;#x4EE4;&amp;#x4EBA;&amp;#x79F0;&amp;#x9053;&amp;#x3002; &amp;#x7528;&amp;#x6237;&amp;#x521B;&amp;#x5EFA;&amp;#x7684;&amp;#x5185;&amp;#x5BB9;&amp;#xFF0C;&amp;#x53EF;&amp;#x80FD;&amp;#x4F1A;&amp;#x88AB;&amp;#x62D4;&amp;#x7EBF;&amp;#x2026;&amp;#x2026;\n
  • #37 \n
  • #38 \n
  • #39 \n
  • #40 \n
  • #41 \n
  • #42 \n
  • #43 \n
  • #44 \n
  • #45 \n
  • #46 \n
  • #47 \n
  • #48 \n
  • #49 \n
  • #50 \n
  • #51 \n
  • #52 &amp;#x4F60;&amp;#x6240;&amp;#x53D1;&amp;#x73B0;&amp;#x7684;&amp;#x75DB;&amp;#x70B9;&amp;#xFF08;&amp;#x4E5F;&amp;#x8BB8;&amp;#xFF09;&amp;#x7684;&amp;#x786E;&amp;#x5B58;&amp;#x5728;\n&amp;#x4F60;&amp;#x7684;&amp;#x524D;&amp;#x51E0;&amp;#x4E2A;&amp;#x5BA2;&amp;#x6237;&amp;#xFF08;&amp;#x4E5F;&amp;#x8BB8;&amp;#xFF09;&amp;#x7684;&amp;#x786E;&amp;#x70ED;&amp;#x7231;&amp;#x4F60;&amp;#x7684;&amp;#x8F6F;&amp;#x4EF6;\n&amp;#x4F46; &amp;#x5C1D;&amp;#x8BD5;&amp;#x63A8;&amp;#x5E7F;&amp;#x5F00;&amp;#x6765;\n&amp;#x5546;&amp;#x4E1A;&amp;#x7528;&amp;#x6237;&amp;#x6F2B;&amp;#x957F;&amp;#x7684;&amp;#x91C7;&amp;#x8D2D;&amp;#x6D41;&amp;#x7A0B;&amp;#x4F1A;&amp;#x8BA9;&amp;#x56E2;&amp;#x961F;&amp;#x5931;&amp;#x53BB;&amp;#x6700;&amp;#x5B9D;&amp;#x8D35;&amp;#x7684;&amp;#x7CBE;&amp;#x529B;\n&amp;#x8FDB;&amp;#x800C;&amp;#x5931;&amp;#x53BB;&amp;#x52A8;&amp;#x529B;\n
  • #53 \n
  • #54 Keep an eye on your gems. keep them update. \n
  • #55 \n
  • #56 \n
  • #57 \n