The dream machine
The dream machine I'd like to own one day;
Hardware
Backbone:
High
speed wireless network for connecting clients to the servers, high
speed (fiber?) network for the connection between static servers.
Servers:
3
servers running a virtual environment, enough CPU power to satisfy high
demand but capable of throttling back to very low power states, even
shutting down CPU's when they're not needed, high performance static
disks (flash, etc) without the problem of aging in a NAS.
Clients:
3 portable clients (as I prefer seperate desktops instead of 1 giant desktop).
Software
Servers:
Clustered virtual backbone like VMware ESX or Xen, capable of running accelerated graphics and any hardware I plug into the servers or clients.
Option of graphic output of 1 virtual machine sent to 2 or more clients.
Clients:
Option to control clients with one set of keyboard/mouse (think Synergy).
Applications:
Cluster
capable, to have 2 or more instances co-operate for graphics work or
games, combining the graphic output as if 1 desktop on 2 or more
clients (working in combination with the server graphic option).
But,
that was the original idea.
After thinking a bit more about it while reading another article about virtualization, I figured the point of view was wrong.
Running an OS on virtual harware is all the rage, but that's not the true goal. Why are we running an OS?
The answer; to run applications!
The
OS is nothing more than a tool to run the applications that do the real
work. The database doesn't care what the OS does as long as it gets
data to the clients. Same with mail, files, printqueues, the latest RPG
or FPS games, etc, etc...
The application needs to run, that's it. Nothing more, nothing less.
So what changes from the original idea? Well, depends.
Applications
could be cluster aware, have the ability to dynamically change the
number of nodes it runs on. Then it can remove itself from one node
intentionally or in case of a failure.
If the application isn't
cluster aware, the host OS has to be able to run it virtually. Like a
virtual guest OS it runs in its own environment which can be migrated
across nodes.
The main point is that the hosts run applications
only. No virtual guest OS that runs the applications. One layer is
removed from the equation this way, which should in turn enhance
performance and reliability. And applications that can't run natively
on the host's OS can always be run in an emulator (which is backed
up by hardware virtualization).
This setup might not be as futuristic as it seems though. KVM on Linux or *BSD could be used to run the non-cluster applications in a virtual environment, and DMX (aka Xdmx
and xorg-dmx) can be used to distribute the graphical output to the
clients. Not the complete set as I'd like to have, but it all comes
down to the applications anyway.