I have a beefy linux server (32 GB RAM) with good harddrives. with one of my hosts. I run a lot of webapps which use varnish, nginx, unicorn app server, thin app server, redis, mongodb and postgresql. Now, I don't expect a huge amount of traffic to the webapps. So, my questions is, with a good enough server, Should I just run all the services on the bare metal OS? or should I setup VMS and run a few services on the VMS? Setting up VMs doesn't seem like a good idea performance wise.
EDIT: It'd be great if someone had some numbers on this. I would never have thought of putting databases on VMs as they are more IO intensive. I don't have any numbers to support that, but wanted to know if anyone has deployed databases on VMs.
My rule is simple - I virtualize everything except when the hypervisor gets in my way.
Even if I only put one VM on a box, at least I have the hardware abstracted which comes in handy when you need high uptime (real time mover to another machine), in case of disasters (cut down large servers move others to same machine) and lifetime (upgrades do not deal with low level drivers, I can just move the machine to new hardware).
There are exceptions - which are systems that are time sensitive. Data collection and decision making in sub millisecond space is not really usable on VM's, so certain activities are off. Note that those are not VOIP etc. - VOIP mostly is ok with latency. Not so much when you start dealing with financial market data and trading, though.
Update:
There is an obvious other case where you can not virtualize - that is when your hardware is too powerfull. At the moment using hyper-V for example a machine needing more than 4 cores can not be virtualized as a VM only supports 4 cores. Simple decision. Next generation hyper-V will mvoe to 32 virtual procesors, but then when AMD comes out with 20 core CPU's and you have two of them... over the limit again. This IS mostly relevant for more powerfull servers, agreed.
Services on Host
Services on a VM