Pragma Fleet Service #
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.
If you choose to manage your game server capacity outside of Pragma, whether in development or production, see the Game Servers section.
Fleet Service Key Concepts #
To facilitate this capability, you can partition your game server fleet according to two facets: server pools and server pool management policies .
Server pools #
Server pools allow you to segment your fleet of game servers by common features, such as game server zone, game server version, and custom values such as game mode. Using server pools, the Fleet service can determine what server pool a given game instance should be associated with, ensuring the game instance finds an appropriate game server to run on.
Server pool implementation can be useful if you have game servers that each run only one type of game (e.g., one game server runs PvP casual, another runs PvP competitive). You could also use server pools to segment your servers by geographic region or expected workload.
Each game server maps to one server pool, which in turn maps to one server pool management policy to inherit general server pool settings. You can define additional custom data, such as game version, in an individual pool’s ExtServerPool
payload to further inform the game server allocation process.
Server pool management policies #
Server pool management policies define capacity characteristics that you can apply to one or more pools of game servers. Server pool management policy configuration options include:
- Number of games allowed to run on a single game server
- Minimum and maximum game capacity allocated at all times
- Maximum time a game server can take to start before allocation fails
- Interval at which a game server should report its capacity
- Number of reporting heartbeats that can be missed before allocation fails
- Maximum time the platform will wait for capacity to resolve for a game instance before ejecting it
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:
plugin | description | Usage |
---|---|---|
DefaultFleetPlugin | Default 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 |
LocalProcessFleetPlugin | Selects server pools based on game server version. | Use when running servers on a local development machine. See note below. |
PragmaNomadFleetPlugin | Selects 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. |
MultiplayFleetPlugin | The Multiplay Fleet Plugin’s selectServerPool method uses a Multiplay regionId to determine a server pool. You map regionId s 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. |
If you are using theLocalProcessFleetPlugin
for local development only, consider using theLocalProcessGameServerProviderPlugin
to make your local development more similar to your non-local environments.