Upload
vivekprahlad
View
19.895
Download
1
Embed Size (px)
DESCRIPTION
Covers the different options for scaling Rails applications, Nginx, a light weight HTTP server / reverse proxy, using Cron for periodic scheduled task, and Monit for monitoring rails applications.
Citation preview
© ThoughtWorks, 2006
Deploying Rails Applications
Vivek Prahlad
© ThoughtWorks, 2006 2
Agenda
Typical Rails deployment scenarios
Mongrel
Nginx vs. Apache vs. Lighttpd
Shared vs. Virtual vs. Dedicated hosting
Monitoring Rails Applications
© ThoughtWorks, 2006
Typical Rails Deployment Setup
Web Server(Static Content)
Rails App(Mongrel)
Database(MySQL / PostgreSQL)
© ThoughtWorks, 2006
Lots of Static content?
Web Server(Static Content)
Rails App(Mongrel)
Database)
(MySQL / PostgreSQL)
Load
Bal
ance
r
Cluster
© ThoughtWorks, 2006
Heavy database load?
Web Server(Static Content)
Rails App(Mongrel)
Database(MySQL / PostgreSQL)
Cluster
© ThoughtWorks, 2006
Very dynamic application?
Web Server(Static Content)
Rails App(Mongrel)
Database(MySQL / PostgreSQL)
Cluster
© ThoughtWorks, 2006 7
Installing the stack using Deprec
cd /path/to/railsapp
deprec --apply-to . --name projectname --
domain www.projectname.com
# edit config/deploy.rb to add svn details
cap install_rails_stack
cap setup
cap deploy_with_migrations
cap restart_apache
© ThoughtWorks, 2006
Mongrel
© ThoughtWorks, 2006 9
Mongrel
Pure Ruby web server for Ruby applications
Supports Rails, Camping, Og + Nitro
Need a cluster due to Rails threadsafety issue
Significant footprint increase with Rails 1.2
• Approximately 60MB / Mongrel / Mephisto
instance
Dash B logging for detecting memory leaks
© ThoughtWorks, 2006
© ThoughtWorks, 2006 11
Nginx
Web server from Igor Sysoev: best used as a
reverse proxy
Rapidly becoming preferred choice of Rails
community
10MB footprint with 10,000 concurrent
connections
Load balancing
Weighted load balancing
Relatively straightforward configuration
© ThoughtWorks, 2006 12
Nginx vs. Apache
Apache: Relatively Larger footprint
Thread per request
Nginx: Low footprint
Non blocking IO
© ThoughtWorks, 2006 13
Issues with Lighttpd
Stability
Memory leaks
Non-trivial URL rewriting
© ThoughtWorks, 2006 14
Nginx: configuring mongrel
upstream mongrel {
server 127.0.0.1:10000;
server 127.0.0.1:10001;
}
proxy_pass http://mongrel;
© ThoughtWorks, 2006 15
Nginx: load balancing
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
© ThoughtWorks, 2006 16
Nginx: Caveats
Primary documentation in Russian
• (Documentation is rapidly improving,
though)
No X-sendfile support (useful for serving large
files)
Virtual host support poor
© ThoughtWorks, 2006 17
Rails Hosting
Rails 1.2+ unsuitable for shared hosting
Most shared hosts have published / unpublished
memory caps
• Textdrive: 47 MB per process
Dedicated hosting expensive
• Starts at ~ $70 per month (e.g.
ServerPronto)
© ThoughtWorks, 2006 18
Virtual Private Server (VPS) Hosting
Fits in between Shared and Dedicated hosting
Nice performance / price ratio (starts @ $20 /
month)
Can potentially exploit superior hardware
Alternatives:
• Xen
• Virtuzzo
Baked in kernel level virtualization support is
coming
Caveat: Need to manage your own setup
© ThoughtWorks, 2006 19
Advantages of VPS hosting
Entire CPU available when other users are idle.
Disk I/O usually faster than dedicated box (due
to RAID etc.)
Can take advantage of SANs if required.
Hosting company takes care of the VPS server
Fairly easy to scale VPS setup (just add more
VMs)
© ThoughtWorks, 2006 20
Monitoring Rails applications
Monit (http://www.tideslash.com/monit)
Process monitoring tool
Can monitor:
• HTTP server
• Processes
• Databases (MySQL and PostgreSQL)
© ThoughtWorks, 2006 21
Cron Jobs
Clear stale sessions
Database maintenance
Clear logs
Best practice: get Cron to call out to a script
Don't hardcode commands in the crontab
Makes it easy to test
© ThoughtWorks, 2006 22
Putting it all together
Can use Monit to create 'self healing' setup
PostgresQL
Nginx
Mongrel
Cron
© ThoughtWorks, 2006
http://nginx.net/
http://railsexpress.de/blog (performance tuning)
http://hostingfu.com (blog on hosting) http://www.slideshare.net/Georgio_1999/how-to-scale-your-web
-app/
(scaling Rails)
23
Additional Information
© ThoughtWorks, 2006
Thank You
http://blog.vivekprahlad.com/