about summary refs log tree commit homepage
path: root/site/src/docs/choosing_deployment.page
diff options
context:
space:
mode:
Diffstat (limited to 'site/src/docs/choosing_deployment.page')
-rw-r--r--site/src/docs/choosing_deployment.page178
1 files changed, 178 insertions, 0 deletions
diff --git a/site/src/docs/choosing_deployment.page b/site/src/docs/choosing_deployment.page
new file mode 100644
index 0000000..7a91e25
--- /dev/null
+++ b/site/src/docs/choosing_deployment.page
@@ -0,0 +1,178 @@
+---
+title: Choosing Deployment
+inMenu: false
+directoryName: Choosing Deployment
+---
+
+h1. Choosing The Best Deployment
+
+A major motivation for writing Mongrel was to make it easy to deploy Ruby web applications
+within existing infrastructures and organizations.  Most of the companies I tried to
+pitch "Ruby on Rails":http://www.rubyonrails.org/ to loved how fast and easy it was to develop,
+but ran screaming when I talked about FastCGI.
+
+Mongrel fixes this by just being a plain HTTP server that is still very fast.  It's easy to
+deploy, cluster, manage, and scale with existing web application technologies.  You can
+put it behind hardware load balancers, load balancing web servers, proxy servers, or just
+by itself.
+
+With this flexibility comes a bit of confusion though.  Many people start off wondering how best to
+deploy Mongrel and then get confused with all the different options available.  This document
+hopefully will help you pick the right deployment for your needs.  They are listed in order
+from smallest/simpler to largest/complex.
+
+h2. Deployment Considerations
+
+There are a few initial things you'll have to consider when picking a deployment:
+
+* Concurrency -- Rails is not thread safe, so if you have giant actions that take
+minutes to complete then take that into consideration.
+* Requests/Second -- Notice I didn't say "users"?  Users is a useless measurement of
+your performance requirements.  You want to know how many *requests per second* you have to process.
+* Content Size -- What's the size of the content you're serving.  Mongrel is pretty decent
+at static files, but it can't beat a good solid web server for pushing out big files.
+* Dynamic vs. Static -- Mongrel can serve static content for small sites, and of course do
+dynamic Ruby generated content, but you'll want to figure out what the mix is so you can scale it later.
+* Available Resources -- You can't cram a truck into a breadbox.  Make sure you have the right deployment
+for your resources such as memory, disk, CPU, etc.
+
+h3. Scalability Means Expansion Not Speed
+
+I'm not sure where the term "scalability" changed from it's original meaning, but you should
+throw out any notion of scalability meaning "high performance".  Scalability is about resources
+and how easy it is for you to expand those resources to meet new demand.  This does not mean
+how many resources you can buy now for *all* the demand you'll ever need.  It means the ability
+to start small now, and then *after* you're the next google you can expand.
+
+h3. Start Small
+
+Everyone immediately jumps to the end of this document and starts with the absolute most complex and
+"scalable" deployment they can muster.  What you really want to do is start with a very small and simple
+setup, and then expand as needed.  This mitigates the risk that you'll buy a bunch of stuff you really
+don't need and keeps your initial pain and costs low.
+
+h3. Automate, Automate, Automate
+
+You're a damn programmer.  You should be scripting the hell out of your deployment just like
+you do your testing.  Automation reduces human error, makes your setups consistent, and many
+times can become a project itself just like "Capistrano":http://manuals.rubyonrails.com/read/book/17
+did.
+
+h1. The Recommendations
+
+Once you've figured out all the basic things about your planned deployment you can start deciding
+which one you need at the moment, and what you might need in the future.
+
+Wait.  You did *plan* this deployment right?  Ok, go back and actually plan it.  This document
+is part of your planning, but you need to do your homework first to make a good decision.
+
+h2. Just Mongrel
+
+Mongrel is actually pretty fast even when compared with web servers like "Apache":http://httpd.apache.org/
+for serving static files.  If your web application is just starting out, doesn't need to coexist with
+things like PHP, and you don't need SSL, then consider just running Mongrel by itself.
+
+This is especially attractive if your application can utilize page caching.  Mongrel is pretty quick
+for page cached sites and is able to handle quite a few concurrent connections.
+
+h3. Disadvantages
+
+Mongrel will break down pretty quick if you have lots of people accessing Rails actions that are
+slow.  It can still perform like a champ for most small needs, but if you start getting more
+serious then you need one of the next solutions.
+
+h3. Advantages
+
+The easiest to manage, especially on win32.  You just turn it on and go home.  Maybe write a
+few /etc/init.d/ start-up scripts for your server if you're running a POSIX system.
+
+
+h2. Behind TCP Balancers
+
+You still don't need SSL, but you do need to make a small cluster of Mongrel servers.  If this
+is the case, then you can simply grab "mongrel_cluster":/docs/mongrel_cluster.html and either
+get "Pen":http://siag.nu/pen/ or "Balance":http://www.inlab.de/balance.html and do a simple
+cluster.
+
+h3. Advantages
+
+This configuration is very easy to setup, gives you decent throughput and concurrency, and is
+easy to manage.  Using mongrel_cluster gives you simple commands to control whole clusters of
+Mongrel servers and Pen or Balance simply accepts connections on one port and forwards them
+to one of the backend Mongrel ports.
+
+h3. Disadvantages
+
+No SSL and you're still relying on Mongrel to serve the files.  A cluster of Mongrel servers
+is no slouch though.  I think many sites that don't need SSL could run with this configuration
+happily for years.  A real good mix is to combine this with Rails' @asset server@ configuration
+and a simple "thttpd":http://www.acme.com/software/thttpd/ install to serve your static files.
+
+h2. Behind HTTP Balancers
+
+If you need something like the above, but you also need SSL, then simply swap out Balance or Pen
+and use "Pound":/docs/pound.html instead.  Pound is a very flexible HTTP balancer that
+also supports SSL.  This gives you the same advantages of simple deployment but adds the security
+you need.
+
+h3. Advantages
+
+The same as using a TCP balancer, except you now have SSL and you can do some more creative
+routing.  A good example is if your site has to use a PHP web app for serving ads.  You can
+have pound take requests for the advertising URIs and route them to the PHP application, and
+then transmit everything else to your Mongrels.  It's very flexible and much easier to install.
+
+h3. Disadvantages
+
+You're still relying on Mongrel to serve the files and passing that through Pound, but as
+mentioned before Mongrel is pretty quick with static files.  Don't underestimate it.
+
+h2. Behind Web Servers
+
+If you have complex static file serving needs, need to host a PHP application at the same time,
+or have complex authentication requirements, then you should use a regular web server.  Mongrel
+has good instructions for quite a few web servers and supports any server that has some form
+of @mod_proxy@ style support.
+
+* "Apache":/docs/apache.html
+* "Litespeed":/docs/litespeed.html
+* "Lighttpd":/docs/lighttpd.html  *not recommended*
+
+Each of the above documents describe how to get an initial configuration of Mongrel running behind
+that type of web server.  You should also combine this with "mongrel_cluster":/docs/mongrel_cluster.html
+to manage the cluster of mongrel servers.
+
+h3. Advantages
+
+Since you have a real web server handling the initial HTTP traffic you can easily do page caching
+and other magic to speed things up and avoid even talking to Mongrel.  It also means you can put
+in authenticators, other web platforms, and extensions that your application might need.  Many
+web servers are also installed and configured by default on most platforms and you just need
+to add the Mongrel specifics to get it going.
+
+h3. Disadvantages
+
+This configuration can quickly descend into madness with complexity.  Apache is
+notorious for having a horribly complex configuration file.  Another
+disadvantage of real web servers is they almost always start of as web servers,
+and then proxy support is bolted on as an extra.  Apache's latest proxy support is
+really good as well as Litespeed's, but Lighttpd's proxy support is really bad (as of Mongrel 0.3.13).
+
+
+h2. Behind Hardware
+
+If you are getting really really serious about your web application and you need to
+serve up lots of Mongrels then you should take a look at a hardware load balancer.
+They're really expensive, but they're usually worth it if you're in the big leagues.
+
+h3. Advantages
+
+Big big big loads and the ability to handle the SSL in hardware for many products.
+Also things like smart virus filtering, routing and other goodies, but you'll
+pay for it.
+
+h3. Disadvantages
+
+Expensive, Expensive, Expensive.  Did I mention Expensive.  One more time Expensive.
+They're also a royal pain to setup properly, but then that's why their Expensive.
+