I canât directly mention the game that Iâm familiar with, but with at least one very large MOBA (and probably the others) it works basically like any other lobby system with games such as Counter Strike or Battlefield, with a little bit of obfuscation between the layers.
Basically you would make your arena (or arenas) as your level, with the server hosting that one match on that one map. Separately (in something to your own crafting, however you liked to build it) comes in your matchmaking. This is where (if you have enough players) you try to match skill level to the other players, this is harder to do and will require you to put in some time of your own designing the scoring/ranking system and how wins/losses effect it.
When a client logs in, they donât login directly to a game server or to matchmaking, theyâd basically authenticate against whatever you wanted to and be sitting at a ânot in any lobbiesâ state. Your match making system would wait for clients to flag themselves as ready to play, they get collected into that process (grab their ID so you can message them directly). You would insert your matchmaking process here, whatever you determine for your game, in order to selectively build a group of players for your gamesize (10 if itâs 5v5 or 6 if itâs 3v3 or whatever).
Once a player has opted in and matchmaking has found the appropriate number of players, youâd send a command to your game server (you can usually run multiple instances on one actual piece of hardware, but how many is dependent on your abilities and the type of game) to spin up the map and only allow connections from the people in your list of players for that particular game. You would then send the clients messages directly with the information to join the server - at this point itâs normal, join server (youâre already authenticated when you logged in before you joined a match, you just literally need to get them to the right server). At the conclusion of the game report the stats back to your matchmaking system, force disconnect all the players and spin down that instance.
You will not need to change from this model until you get a whole ton of players, at which point you could squeeze more into a single piece of hardware by doing things like replacing the serverâs Unreal instance with a custom coded solution (whereby you recreate everything the server needs to do so that there is no visual rendering of any kind for example), but this may not even be necessary depending on your project and your goals.
In a corporate environment (not a MOBA, but actually very similar needs) Iâve had some very nice success with using virtual machines from service companies that allow you to create them and resize them through your control panel and have your VMs up within seconds. I built this into our âmatchmakingâ (equivalent for the project) service so that it would build the list of clients, check what servers were running and what their capacity/usage was, and if one was capable of taking the load itâd go to them, otherwise itâd use the API of our 3rd party VM host, spin up a new instance, load the required packages automatically, spin up a server and then join the clients in, you could perhaps do something similar depending on what your server solution ends up being.
I hope this helps, although it probably was not the answer you wanted.