In a presentation he gave (slides at
http://brainspl.at/xen_and_the_art_of_rails_deployment.pdf), Ezra Zygmuntowicz, the founder of Engine Yard, suggested that folks hosting web apps should base their infrastructure on Xen virtualization from the ground up, with a separate VM for each service. In other words, you start with one physical server, on which you have a web server VM, a database server VM, an email server VM, etc. Backing up your server configuration is now as easy as copying over one (albeit large) file, you can more easily isolate performance issues within your application's dependencies, and when you need to start worrying about scaling, it's a cinch to move a resource-hungry VM over to a new machine, boot up a new web server instance, etc.
I'm just curious whether anybody's tried hosting their app in a virtualized environment like this, as well as what people's thoughts are about this in general. Is it a good idea? Is Xen stable enough and is the performance good enough for this to work? Is it premature optimization for a startup not having scalability issues yet to be doing something like this, or do the other benefits help make it more justifiable? Would this really be all that much more work to set up compared to running all the services on a single box anyway?
The ability to (relatively) quickly deploy a blank VM for development is great, too. It means you can give people more control over things. If you have lots of dev sites used for demos, there's the danger that someone might make a mistake editing httpd.conf and bring it all down, but if they're all in separate VMs, you don't need to worry.