This session at Unite Copenhagen focused on Multiplay's new matchmaking service that allows developers to create their own custom matchmaking logic. Get a glimpse into how matchmaking works with Multiplay's game server hosting to accelerate on-boarding onto this powerful platform.
Speakers:
Josie Messa – Unity
Caleb Atwood – Unity
5. Matchmaker wants to host a game session
Allocate Request
5
Makes an “allocate” request to Multiplay’s
APIs for a game server
Matchmaker Multiplay
/server/allocate
7. Party Servers
Fleets
7
— Fleets are a logical group of
servers.
— Servers belong to a fleet.
— Allocations and scaling are made
within a fleet.
Game Servers
8. Regions
8
— Defined based on player density.
— Bare metal and cloud availability
zones, allow for burst scaling.
9. Specifies details about the server the game
should be hosted on.
Used for switching versions.
Other Parameters
9
Used to track allocation throughout its
lifecycle.
Generated by matchmaker for idempotency.
Profile Allocation UUID
15. Profiles
Profile BProfile A
# Already running (not allocated)
$ ./server -gamemode=casual
# Start up on new profile
$ ./server -gamemode=ranked
SIGTERM
16. Matchmaker polls allocations endpoint with
the allocation UUID to check status
Allocations Request
16
Multiplay responds with the allocation when
the server is ready.
Matchmaker Multiplay
/server/allocations
17. {Server Details}
Matchmaker
Matchmaker now has details of the server to
host the game session
Allocations Request
17
This can be passed to the client so it can
directly connect to the game server.
Game Client
18. Game server tells matchmaker it’s ready to
deallocate, matchmaker calls us
Deallocate Request
18
We remove the allocation from our system
and refresh the server configuration.
Matchmaker Multiplay
/server/deallocate
23. — How is the game server connection information passed to the clients?
— How do solve for player density across regions?
— How are custom requirements configured, such as map/mode?
— What concerns does the game server have in accepting new matches?
— When is a deallocation processed?
Questions for Matchmaker Design
27. Matchmaking from 10,000 feet
27
Game Client Matchmaking
/tickets
Players want to play Matchmaking finds “good"
groups of players waiting for
games to play together
Multiplay
/allocate
assignment ip:port
Matchmaking asks
Multiplay for a server
for the new game
28. Matchmaking from 1,000 feet
28
CLI
1
Game Server
1
Game Server
Game
Server
Game Client
InternalAPI
BackendAPI
Orchestration
Match
Function
Hosting
Matchmaker
MatchmakingAPI
Director
SDK
Skill, Party,
Player Data
1
Analytics
Configuration
Identity, QoS
Services
Custom
SkillFunc
Custom
CasualFunc
Backfill
LobbyService
SDK
29. Matchmaking 2 feet off the ground going 640kph
29
What is it?
— Open Match
— Tickets: { Attributes, Properties, Assignments }
— Match Functions: { Concurrency, Query, Algorithms, Proposals, Development }
— Evaluation: { Score Normalization }
— Configuration: { Functions, Pools, Scaling, Multiplay }
How do you use it?
— Matchmaking as backend infrastructure
— Practical Matchmaking (but wait, how do I…?)
30. Open Match
30
● openmatch.dev
● openmatch.dev/site/docs/
● github.com/googleforgames/open-match
● open-match.slack.com
Roadmap
- V0.6 - github.com/googleforgames/open-match/releases/tag/v0.6.0
- V0.7
- Advanced player data indexing
- Enhanced filtering api [bool, string]
- Automated stress testing
- Performance improvements
- Improved tutorials and demo code
- Monitoring Metrics
35. Match Functions
35
Code you write to fetch and group tickets into proposals
- Tooling for local simulation and testing
- Api for management through CLI
- Api to get logs from your running functions
- Examples: QoS, Skill Balance, Backfill, Timeout, Recent Matchup Avoidance
36. Match Functions
36
1. Construct and run a query
2. Group players together based on their ticket data to generate proposals
3. Decorate proposals with additional data
a. For the game server (mode, map, teams)
b. For the tickets (team, role)
c. Set any overrides if applicable (previously existing host)
4. Score and return the proposals
38. - Multiple-priority role preferences - healer AND/OR tank
- Social graph distances - friends of friends dynamic runtime lookup
- Conditional attribute weighting - xp only matters if skill confidence is weak
- Scheduled specialized content access - 2 hour window for rare-boss matches
- Geo-distance - combinations of multiple parameters into new parameters
- Off-box calls - reasonable if fast(consider preemptable indexing instead)
- Simulated functions - production sandbox for testing new algorithms
- Outcome prediction - build your own quality confidence
Match Function Customizations
Wall. of. text.
46. Evaluation
46
Concurrent Match Functions = Ticket 124a3ew can appear in multiple proposals
We want to normalize our Score across functions. In our case, we’re using a
RootMeanSquaredDeviation calculation with weights to create a score algorithm.
0.5f * RMSD(time-waiting) + 0.5f * 1/RMSD(skill-gap)
124a3ew s=90 t=134
198e31j s=80 t=35
lj34093 s=88 t=210
Score = 115.7
1oj412l2 s=99 t=350
124a3ew s=90 t=134
834jl1j3 s=30 t=198
Score = 146.8
vs
47. But How Do I...?
Just do matchmaking?
Support multiple playlists?
Securely put player data (e.g. skill) into tickets?
Do Quality of Service based matchmaking to nearby regions?
Parties?
Backfill?
What about peer to peer?
48. Quick Reminder
48
CLI
1
Game Server
1
Game Server
Game
Server
Game Client
InternalAPI
BackendAPI
Orchestration
Match
Function
Hosting
Matchmaker
MatchmakingAPI
Director
SDK
Skill, Party,
Player Data
1
Analytics
Configuration
Identity, QoS
Services
Custom
SkillFunc
Custom
CasualFunc
Backfill
LobbyService
SDK
49. 1
Game Server
Quick Reminder
49
1
Game Server
1
Game Server
Multiplay
Game Client
MatchmakingAPI
Configs
SDK
Player Data
Services
Game Client
Services
Func 1
Func 2
Backfill
LobbyService
52. Region Based?
52
1
Game Server
1
Game Server
Region A Server
Multiplay
Game Client
MatchmakingAPI
SDK
QoS Discovery Func 1
------------
-Query tickets
-Categories by region
connections
-Matchmake within
best regions for tickets
-Set region on proposal
LobbyService
Automatically
/allocate
region A
QoS Discovery
54. 1
Game Server
Backfill? Option 1: Function
54
1
Game Server
1
Game Server
Multiplay
Configs
Func 1
Func 2
Backfill
Backfill
Function
Game Client
MatchmakingAPI
SDK
LobbyService
"proposal.properties.ConnectionOverride":
"179.82.03.29:475",
55. 1
Game Server
Backfill? Option 2: Ticket
1
Game Server
1
Game Server
Multiplay
Configs
Func 1
Host-Pool Enabled
Func 2
Host-Pool Enabled
Backfill
MatchmakingAPI
"connectionOverride":
"179.82.03.29:475",
"targetFunction": {
"name": "func1"
},
"pools":{
"default":[{...}],
"servers": [
{"attribute": "host",}
],
},
{
"attributes": {
"host": true, ...
},
"properties": {...currentPlayers...}
}
59. Other Talks
Yesterday - Hosting Happy Gamers
Today @ 4:00pm - How MADFINGER is leading next-gen multiplayer mobile FPS game
Today @ 12:00 pm - How the Apex Legends Season 2 online experience was scaled
Tomorrow @ 2:30pm - Voice and text comms for Unity: using Vivox to connect your
players
60. Questions?
Got a question about the Multiplay
matchmaker or Multiplay’s game
server hosting?
https://multiplay.com/contactus/