Matchmaking #

The Matchmaking service connects parties together to create matches. Matchmaking handles game mode and queue configuration, matchmaking rules, matchmaking plugins, and game version management.

Architecture #

Matchmaking is a common bottleneck for scale. The Matchmaking service is structured to work at a scale to support the world’s largest games. All matchmaking state is held in-memory upon entry from the Party service. This improves performance characteristics by several orders of magnitude by avoiding extraneous network hits. The result is that the matchmaker can remain entirely CPU dependent and tailored to prioritize match speed or quality.

Matchmaking Plugin #

The Matchmaking plugin supports custom match requirements defined by the game team. The engine handles accepting parties, caching state, driving the matchmaking loop, and handing off completed matches. Some 1st party matchmaking plugins are provided for common scenarios, such as a development matcher to prioritize for speed while doing small playtests internally.

Skill-Based Matchmaking #

Skill-based matchmaking uses Party extension data and plugins to support anything from a simple win-based matcher to the most recent advances in skill-based rating systems.

sequenceDiagram participant p as Party participant m as Matchmaking participant ml as MatchLifecycle participant mc as MatchCapacity participant gs as GameServer Hosting p->>m:enterMatchmaking(party) m->>m:findMatches() m->>ml:submit(match) Note right of ml: Update session ml->>mc:allocate(match) Note right of mc: Determine capacity mc->>gs:allocate(match)