Of Virtual Servers

I was reading propaganda/sales material on some web hosting company about their offerings, and it got me thinking…

In the web hosting world there exists “Shared Hosting” and “Dedicated Servers”. Other hosting services exist, but we’ll just use these two for our purposes (since we’re only interested in rented/leased options). With “Shared Hosting”, the client basically has an account on the machine with a directory for their stuff. The client does not have much access over the finer parts of the machine. Pro: You pay less (otherwise you’re getting ripped off). Con: You share resources with a bunch of strangers. With a “Dedicated Server”, the user gets an entire machine to themselves to do as they please. Pro: You don’t have to worry about someone else using all the resources. Con: You pay more.

In searching for a middle somebody came up with “Virtual Private Servers”. Like an compromise, you kinda end up with a little of the pros and cons. You pay less than a “Dedicated Server” but more than “Shared Hosting”. You get more control, but you share resources.

Virtual private servers run as virtual machine processes on a physical machines. These virtual machines may be in the form of VMWare or User Mode Linux or something else altogether. To the client, it basically looks like their own server. To the host, it is just another process they’re hosting. Since usage patterns vary, rarely is a machine 100% utilized (otherwise they’re asking for trouble). The host doesn’t want 100% utilization, but it is a waste of resources if a machine averages 1% utilization. So the idea is similar to “Share Hosting”. Pool all these machines on to one real machine, and bump up average utilization while saving some room for spikes. Anyways, the idea of virtual machines is nothing really new.

What got me thinking was that the place was saying that because the leased “machine” is virtualized, they could move it from one machine to another (less busy, hopefully (machine). Browsing through VMWare’s offerings, it seems like the offer some sort of enterprise edition with a manager to do something like this. Ooooh. Cool. Except it doesn’t to be automatic. How cool would it be to be able to load balance virtual machines? Actually it’s probably not that big of a deal. Grid computing and clustering solutions already allow for process migration across machines, and in this case the virtual machine is nothing more than a proess. One virtual machine starting to hog a bunch of resources? No problem, start migrating other virtual machines to other physical hosts. I suppose you’d need some smart switch or something to reassociate the IP with a differenct MAC address unless all your machines have a virtual MAC address and are routed through the physical machine.

But wait, there’s more… Almost kinda sounds like RAID. Why not? Instead of a redundant array of disks, why not computers themselves. We could replicate processes (virtual machines) and have them on standby on other machines. With automatic migration, you can move processes around as load changes and as hardware fails. I suspect it wouldn’t be _too_ difficult to make snap shots of processes, they are just data in memory.

But wait, there’s more… what if you could partition processes? What if the virtual machine needs more resources (memory, cycles) than the physical machine could provide? Wouldn’t it be cool if the process could just be partitioned and spread across multiple hosts? This is probably the least feasible to do. Though I suppose if each virtual machine virtualized a quad processor box or something, it wouldn’t be impossible to partition it across the 4 virtual processors and spread it out across 4 physical hosts. You’ll need a fat pipe between the machines though.

Unfortunately something like this would really only be useful for server hosting purposes. Something like web hosting (I can’t imagine them to be that profitable) or running something like Terminal Server (businesses with thin clients). In fact I believe big IBM mainframes already do some of the above. These machines have hundreds of CPU’s and are partitioned into virtual machines. I don’t know if it is automatic, but I’m sure they can be repartitioned. A CPU fails, that’s OK, we’ll just allocate a different functional one. Virtual machine getting overloaded? That’s OK, we’ll just repartition more CPUs. Maybe “utility” computing is suppose to provide something like this for their audience.

Leave a Reply