Unless you are making a split-screen or peer-to-peer multiplayer game, chances are you'll need to host dedicated servers (DS). If you already do, congratulations! You are one step closer to the future of gaming: games-as-a-service. By utilizing DS, your game is ready for a cross-platform play, which now is an inevitability.
Refresher on Dedicated Server
Multiplayer games utilize DS as a host. That is, a hub where all players who are in the same match/session connect to. Its jobs are to:
- Receive input/actions from players
- Calculate and resolve the result of the actions
- Broadcast the result to players
- Perform housekeeping on player data updates (e.g. ELO/MMR ranks)
There are 2 kinds of DS, in terms of its lifespan:
- Session/match based DS, which only needs to live as long as the match it hosts. It is suitable for quick match games (e.g. Fortnite, Apex Legends). The rest of this article will assume this use-case.
- Long-running DS, which lives as long as possible. It is suitable to host "worlds" for MMO games (e.g. WoW, Final Fantasy XIV)
Traditionally, managing the DS is done by hosting a number of DS instances (running natively or in VM) in bare-metal servers. A matchmaker then directs the matched players to a DS.
When the game has players from different parts of the world, in order to reduce the latency, more DS instances are provided in several regions. That way, the matchmaker can match players in the same region and direct them to the nearest DS.
The traditional way starts to face challenges when the DS is short-lived and has an unpredictable number of players playing at the same time. We need a way to dynamically scale the DS fleet according to the number of players. The need to manage multiple regions at the same time is an addition to the complexity.
We solve the need to dynamically scale the DS fleet by leveraging Kubernetes. Our Dedicated Server Manager (DSM) spawns each DS in a Kubernetes pod. Since it takes a rather quick time to create and destroy a Kubernetes pod, we can scale the DS fleet up and down with ease.
To serve global players, our DSM is also available in multiple regions. Since the control to all of the regions are centralized, game admin can manage the DS in all regions from an Admin Portal.
Our DSM is integrated in the matchmaking flow where both the matchmaker and DSM intelligently match players in the same region and spawn a DS accordingly. In the case of a regional failure, our DSM tries to find another regions which are available.
Here's how our matchmaking flow works:
- Game client asks Quality of Service (QoS) for QoS servers in all regions
- Game client pings each QoS service to find the latency to each region
- Game client sends matchmaking request with latency data attached
- Matchmaker matches player within the configured matching rules, player statistics, and similar latency
- DSM spawns a DS in the nearest region
- Game client connects to a DS to start the match
- When the match ends, the DS updates player's statistics for future matchmaking reference
More on DSM
Other than the features mentioned above, our DSM has:
- The ability to manage multiple versions of DS. This ensures that a certain game client version is served by the configured DS version. Our matchmaker also matches game clients of the same version together.
- The ability to handle local DS. During a development, it's easier to debug the DS locally. We provide the API to let the DS running locally registers itself to the DSM. That way, the game clients can use the same matchmaking flow but is redirected to the local DS.
- The DS uploader tool. This uploader can be integrated with thr CI/CD pipeline thus the new builds are automatically uploaded.
- The option to integrate with 3rd party bare-metal providers. To save cost, it might make sense to you to have DS in a bare-metal server. Our DSM can manage DS in bare-metal servers provided by the selected partners. In an event of the bare-metal server runs out of space, the DSM can fall back to spawning DS in Kubernetes.
- UE4 and Unity SDK for its integration with game client and servers. All of the features mentioned above are accessible by calling the functions in our SDKs.
Interested to implement our Matchmaking Service with Multi Region Dedicated Server Manager to your game? Reach out to us by sending an email to firstname.lastname@example.org.