02-18-2005 12:29
The way I understand it, each sim is allocated a server whenever the sim has to be brought up, either because the sim crashed or because the grid went down. Other than that, server allocation isn't changed, probably to keep downtime to a minimum.

Semi-permanent allocation like that, however, seems to beg the question of changing levels of activity in each sim. There are definitely places that are running fine, but then start getting a lot of traffic due to a new mall or club, and their performance suffers since they're still on old hardware.

What if there were a way to dynamically allocate server resources without much more downtime than we experience now?

I had a crazy idea for doing that, and thought I'd float it here. Feel free to shoot it down. It's really more of a thought experiment.

It's basically an algorithm that would every once in a while swap the servers that are running a pair of sims (maybe one swap a day, so as not to increase downtime much) in such a way that the server-sim pairing tends toward an equilibirium, and takes into account the changing levels of activity in sims.

It would work like this:

Rank all the sims from 1-500 (or however many there are) based on some measure of activity within the sim. 1 = most active, 500 = least active. No two sims get the same ranking. The ranking would be updated daily or weekly and be a trailing average over the last week or month.

Rank all the servers from 1-500, with 1 = highest capacity, 500 = lowest capacity. Servers are allowed to share rankings, but there has to be a 1-ranked server and a 500-ranked server.

The goal is to dynamically keep the fastest servers on the fastest sims, but in an orderly fashion that doesn't necessitate much downtime.

Here's the algorithm:

Re-rank all the sims in terms of activity every week or month or however long seems appropriate.

Re-rank all the servers whenever you add one.

If you've swapped two servers within the last 24 hours, do nothing (to keep downtime to a minimum), else:

// Loop through all the servers
For each server (call it S1) {
. If S1 is running a sim with a higher (less active) or equal ranking, do nothing. Go on to test the next server.
. If S1 is running a sim with a lower (more active) ranking, then {
.. // Loop through all the servers lower ranked (faster) than S1
.. For each server lower ranked than S1 {
... If it's running a sim that's higher ranked (slower) than S1 {
... Bring the sims down long enough to swap the servers // This will result in a performance improvement in both sims. Check it out.
... } else, go on to test the next server in this inner 'for' loop
.. }
. }
}

I know it doesn't look very intuitive, but if I know my Knuth, the algorithm above should tend toward an equilibirum in which the fastest servers are running the sims with the most activity, and is able to adjust with changing levels of activity.

This will result in no more than two sims being down an additional few moments each day. Or LL might want to make two swaps a day (four sims down) or whatever, depending on what they feel the grid can bear. Hopefully they'd make the swap(s) at a moment when data shows there to be historically the fewest residents online. They could also make swaps when a sim crashed, or when the grid crashed.

I realize this is a crazy idea that will make sense to few and will never be implemented, but I thought I'd post it in case anyone has some time on their hands and wants to shoot holes in it (not in me, please).