apache/mongrel/mysql -master-slave on xen/memory allocation

I'm wondering - what is the advantage of running xen over just running all your processes on one instance of an OS. You're still using all the same hardware resources, plus overhead of running Xen. Maybe this is obvious, but I don't get it. Can anyone explain this to me?

joe wrote:

Not speaking for Joe here but...

The reason to go with Xen is one of hardware mobility.

Once the configuration is in place, if you need to add in more hardware,
moving the instance is a no-brainer operation.

I, for one, will *never* install on bare hardware ever again. Properly
configured, the Xen overhead is amazingly low.

Splitting up a server with 6 gigs of ram using Xen is a great way to make it easy for yourself to scale later. It also separates concerns so they run independently of each other. It is true that since it is all on the same piece of hardware that you still have a single point of failure if your hardware crashes. But it makes it much easier to scale to more servers later. You can actually move a running Xen instance to another physical server *while it is still running*.

  Also Xen is a serious performance leader in the virt server field. You really only have about 5% perf loss compared to raw hrdware and Xen VM's. We have built our entire business around Xen based rails hosting http://engineyard.com . And even when we sell dedicated servers to people we are still running Xen even if they only have one Xen VM that takes up the entire server. This allows for much easier migration to different hardware in the future.

  Xen is awesome and I think it is a good idea to split up your server like you are thinking about. You haven't given enough details about the hardware(processor type et al) and your app for me to give you any performance or capacity estimates. But you will be able to serve quite a lot of traffic off of a box like you have.

  I would recommend if you haven't bought the hardware yet that you consider getting two servers with maybe 2 or 4 gigs of ram each. And then split up your app across two servers. Run identical VM'x on each server so you have one DB VM on each server and a few App server VM's on each server and two Web static file VM's on each server. This will give you much more reliability then one server.