The full answer to that is probably one or more conference papers but here is a basic high level description.
When we talk about load balancing, we are talking about the multi-node production servers, not the SGS SDK.
The multi-node production servers use a distributed object store that makes all data available to all nodes. You can think of it as a kind of “clustering” but instead of physical memory being replicated, its as if a large bank of memory is available to all of the processing nodes. In reality, ist more complicated and involves a combination of fast backing store and local caching. Ths distributed object store is really the most "labsy’ thing about the system.
Each user is assigned a node through discovery that they connect to. That node processes all their requests against the shared view of the world contained in the object store. It gets objects as needed from the objects store and returns them when a task commits.
In order to allow more efficient caching, the system is designed so load balancing logic can build affinity groups based on the users’ access patterns and move then to the same node for processing. In this regard it is something like the old hard-wired systems where a zone is located on a system, but it differs in many ways. Key among theses are:
(1) it is not zone based but based on the actual data being accessed.
(2) Affinity groups are not fixed and assigned to fixed machines but come into being as needed by the access patterns of the data and are assigned wherever it makes the most sense according to the current load of the back end.
(3) The developer has to do nothing to create these groups. he or she just writes their code and the system figures out the bast way at any given time to partition the processing available.
(4) If a processing node fails, the group just reforms on one or more other nodes and continues processing without significant interruption of the user experience.
(5) Nodes can be added “on the fly” to add extra capacity and the system balances out the load to include them.
In terms of the actual mechanism used to move clients, part of the client/server protocol is an instruction to the client to move the node it is connected to. This happens inside of the client API and is invisible to the game coder.
I’m afraid to explain it any deeper is probably a few hours of lecture. Ill be covering from the POV of the programmer in a bit more detail at my talk at JavaOne.,