7.02.2008

The difference between instancing and sharding

Relmstein's been talking about seamless word design, but I think that he's a bit unclear about the difference between instancing and sharding. Both are used to avoid the problems of scaling (and introduce seams into the world), but there are a few critical differences.

I'll use WoW and EvE as examples, because those are the two games I know best. EvE is heavily instanced. Each star system is a separate instance, which makes sense. You can hardly interact with (read: shoot) someone who is several light years away. Conversely, it's possible to interact with someone in WoW if they're standing on the Ashenvale side of the Ashenvale-Barrens border and you're on the Barrens side. The WoW equivalent to EvE's jumpgate is the instance portal leading to Deeprun Tram. You go to an instance, but it's shared among all players on that realm/shard, and you can't interact with someone in Ironforge or Stormwind from Deeprun Tram. The difference is that there is always only one Jita (the most populated star system in EvE), but there are several Deeprun Trams, one for each realm/shard. Even if you wanted to, you cannot meet your friend in Deeprun Tram if he plays on a different realm/shard.

The problem with shardless design is that players are free to flock into a certain area and thus you more easily run into the issue of bandwidth demands increasing exponentially as the number of players nearby increases.

If a player makes any action, the results of that action must be transmitted to every player that can in any way be affected by that action. That includes everyone who is in visual range, because their clients must be able to render the animation for that action. As the number of players increases, so does the amount of bandwidth required to transmit the results to all witnesses. If there's only a few active players and a lot of spectators, the bandwidth requirements increase geometrically and the server is able to keep up. WoW, for example, can handle events where there are around 500-700 spectators with little or no percievable performance problems.

However.. if each of those players is an active participant and thus generates actions themselves, the amount of bandwidth required to transmit results rises exponentially. That same server that can handle 700 passive players will start timeouting people when around 200-300 people engage in combat.

WoW uses both instancing and sharding to combat that problem. At most, a dedicated instance can contain up to 80 players (Alterac Valley), so you only need to allocate bandwidth for that worst-case scenario. Sharding is used to divide the player base into so small groups that there isn't 200-300 players on any realm/shard that would be interested in engaging in one massive battle. It isn't a foolproof method, so Blizzard's been using instanced battlegrounds, arenas and geographically distributed PvP objectives to lure people away from the old Tarren Mill vs Southshore battles. I'm a bit curious about Lake Wintergrasp, though. Maybe Blizzard is more confident about their architecture this time. Or they just forgot some hard lessons of the past.