Fleet Management Overview #

Fleet management refers to the process of managing a fleet of game servers. Because individual game server needs differ in configuration and scale, Pragma provides flexibility for game server allocation and orchestration. While most production-level games will use a third-party fleet management system, such as one included with a third-party game server, Pragma also offers the Pragma Fleet service to use during development.

Fleet management with a third party #

For managing game servers outside of the Pragma Fleet service, either in development or production

If you choose to manage your game server capacity outside of Pragma, whether in development or production, implement the following:

  1. Edit the findHostForGameInstance method. Have the Game Instance Host Plugin’s findHostForGameInstance method return null. Use the findHostForGameInstance method to generate partner tokens and integrate with your game server fleet manager in order to allocate a game server for this game instance.
  2. Do not allow game servers to poll to report their capacity. To request game start data for a known game instance, use the MatchApi.RequestStartGame SDK method
  3. Prevent Pragma from spinning up Fleet service nodes. Add the following to your configuration files:
game:
  core:
    distributedServices:
      FleetService:
        nodeByInstanceId:
          0: ~

Fleet management with the Pragma Fleet service #

For getting up and running in development

The Pragma Fleet service is responsible for processing game instance requests and coordinating with the game server provider to allocate game servers. Within this service, you can customize the Pragma Fleet Plugin, or use one of the pre-built plugins listed in the table below. The customizable Fleet Plugin provides an abstract interface for defining a game server fleet management model, and allows developers to manage game server capacity for fulfilling game instance requests. However, this method is not suitable for production.

The following pre-built Fleet service plugins are ready to use out-of-the-box:

plugindescriptionUsage
DefaultFleetPluginDefault implementation with one server pool using the default server management policy. This plugin does not allocate game servers.Use as a placeholder while setting up your Pragma Engine
LocalProcessFleetPluginSelects server pools based on game server version.Use when running servers on a local development machine.
PragmaNomadFleetPluginSelects server pools based on game server version. All server pools map to the default server management policy.Use when running servers on Nomad in a development environment.
MultiplayFleetPluginThe Multiplay Fleet Plugin’s selectServerPool method uses a Multiplay regionId to determine a server pool. You map regionIds to Pragma gameServerZone values in the gameServerZoneToMultiplyRegionId block of your YAML configuration file.Use when running servers using Unity’s Game Server Hosting (Multiplay), but NOT using their fleet management services.

See Fleet Service Tasks for instructions on how to implement the various Fleet service methods.

You can view more details about the Fleet Plugin methods and their properties in the Fleet Service Reference topic.

Example fleet management flow #

Fleet service graph

When the Matchmaking service finds a match, the service generates a NewGameInstance to send to the Game Instance service. The Game Instance service executes the findHostForGameInstance method, which can return null or an ExtHostRequest payload, depending on whether or not you are using the Pragma Fleet service.

In environments not using the Pragma Fleet service:

The findHostForGameInstance method will return null. Further fleet management tasks will be handled by the third-party fleet management provider.

In environments using the Pragma Fleet service:

The findHostForGameInstance is used to generate an ExtHostRequest containing relevant NewGameInstance information to send to the Fleet service. With this information, the Fleet service puts in an allocation request as well as selects an appropriate server pool for this new game instance. The allocation request is placed in a queue to wait for a game server it can be allocated to.

Meanwhile, the Pragma Engine internal capacity manager automatically reviews the allocation request queue to determine whether or not a game server’s reported capacity can accommodate the request. If there is insufficient capacity, the Fleet service allocates additional capacity on the Pragma side and returns a list of game server IDs for you to use when spinning up additional game servers to support the pending allocation requests.

Every time a game server reports its available capacity, the Fleet service finds queued allocation requests assigned to the game server’s server pool. Based on the server’s reported available capacity, the Fleet service provides the game server with a list of game instance IDs ready to run.