SlideShare a Scribd company logo
1 of 60
Download to read offline
Advanced Matchmaking
with Multiplay
1
Josie Messa & Caleb Atwood
Multiplay
Josie Messa
Backend Developer
What Do Multiplay Do?
3
— Specialise in hosting real-time multiplayer games
— Hybrid scaling
— Resource orchestration platform
Allocations
4
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
Allocate Request
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// REQUEST
$ curl -X POST /server/allocate?
profileid=104843
regionid=375ed04b-a4c2-4ecb-91ab-9ebc27eafbb0
uuid=2f139030-e997-11e8-9f32-f2801f1b9fd1
fleetid=7db01ecd-68f9-45ff-8f1e-369b2b4e4913
// RESPONSE
{
"allocation": {
"profileid": 1075753,
"uuid": "2f139030-e997-11e8-9f32-f2801f1b9fd1",
"regions": "375ed04b-a4c2-4ecb-91ab-9ebc27eafbb0",
"requested": "2019-09-24T15:05:16.601951875Z",
"created": "2019-09-24T15:05:16.601951875Z",
"fleetid": "7db01ecd-68f9-45ff-8f1e-369b2b4e4913"
}
}
6
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
Regions
8
— Defined based on player density.
— Bare metal and cloud availability
zones, allow for burst scaling.
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
Allocating Servers
Servers on Machines
Players
Server
Server
Server
Machine
Allocating Servers
Bare Metal
Cloud
Allocating Servers
Server
Server
Server
Server
Server
Server
Server
Server
Server
cost
Allocating Servers
Server
Server
Server
Server
Server
Server
Server
Server
Server
Hot machine
cost
Profiles
Profile BProfile A
# Already running (not allocated)
$ ./server -gamemode=casual
# Start up on new profile
$ ./server -gamemode=ranked
SIGTERM
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
{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
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
Scaling
Scaling Method
Bare Metal
Scaling Method
Server
Server
Server
Server
Server
Server
Server
Server
Server
Unused Machine
cost
Matchmaker Integration
— 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
Matchmaking
Caleb Atwood
Tech Lead
Multiplay Matchmaking
Beta
25
Fall for Multiplay customers
Matchmaking from 10,000 feet
26
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
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
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…?)
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
Tickets
31
Attributes
Tickets
32
— { Attributes, Properties, Assignments }
— Assignment = the ticket’s final state
– Connection details
– Custom assignment properties
– Assignment/matchmaking errors.
Properties
Skill / TeamSkill
PlayerCount
Mode
Rank
Client Version
Keys Held
Role
Recent History
Friends Online
Cars Unlocked
QoS Data
Inventory
Tickets
33
{
"attributes": {
"mode": 1,
"teamSkill": 2437,
"playerCount": 2
},
"properties": {
"partyInfo": {
"partyId": 21398712387,
"players": ["caleb", "josie"],
"recentMatch": [ 987219387123, 1298723198371 ]
},
"qosConnection":[
{ "location": "2183", "avePing": 83, "quality": 12 },
{ "location": "4128", "avePing": 67, "quality": 4 }
],
"mapsUnlocked": [ "dust", "moon", "unite" ]
}
}
Match Functions
34
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
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
Querying for Tickets by Attribute Data
- 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.
Configuration
39
Configuration
40
Multiplay
- profileId
- key
Matchmaking (generator)
- name
- targetFunction
- config
- pools
{
"matchmaking": {
"name": "ctf-competitive",
"targetFunction": {
"name": "team-skill-function"
},
"pools": {
"default": [
{
"attribute": "skill",
"min": 0,
"max": 3000
}
]
},
"config": {
"teamCount": 2,
"teamMin": 3,
"teamMax": 4
}
},
"multiplay":{
"profileId": "",
"key": ""
}
}
Configuration
41
More tickets
slows things down
Just do MORE
{
"matchmaking" : {
"name": "ctf-competitive" ,
"targetFunction" : {
"name":
"team-skill-function"
},
"pools": {
"default": [
{
"attribute": "skill",
"min": 0,
"max": 1600
}
]
},
"config": { … }
},
"Multiplay" :{ … }
}
{
"matchmaking" : {
"name": "ctf-competitive" ,
"targetFunction" : {
"name":
"team-skill-function"
},
"pools": {
"default": [
{
"attribute": "skill",
"min": 1400,
"max": 3000
}
]
},
"config": { … }
},
"Multiplay" :{ … }
}
Configuration
42
Automate “MORE”
DistributionTypes
- Normal
- Uniform
- LinearApproximation
- Auto
BehaviorTypes
- BucketCount
- BucketSize
{
"matchmaking" : {
"name": "ctf-competitive" ,
"targetFunction" : {
"name": "team-skill-function"
},
"pools": {
"default": [
{
"attribute": "skill",
"min": 0,
"max": 3000,
"segmentation":{
"distributionType": "Normal",
"segmentBehaviorType": "BucketCount",
"segmentSize": 10
}
}
]
},
"config": { … }
},
"multiplay" :{ … }
}
Visualizing what’s happening
team-function
timeout-function
Configs
ctf-competitive
ctf-social
global-timeout
Director
? Accepted
Matches
Evaluation
44
?
Evaluation
Concurrent Match Functions = Ticket 124a3ew can appear in multiple proposals
124a3ew
198e31j
lj34093
1oj412l2
124a3ew
834jl1j3
vs
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
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?
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
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
50
Game Client
SDK
Remote Config Func 1
Func 2
{
"attributes": {
"mode": 2, ...
},
"properties": {...}
}
Configs
"attribute": "mode",
"min": 2,
"max": 2
Playlists?
Secure Player Data
51
Game Client
MatchmakingAPI
SDK
Player Data
Services
LobbyService
Identity
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
Parties?
53
Game Client
SDK
Friends/Invites
Sessions
LobbyService
Identity
{
"attributes": {
"playerCount": 2, ...
},
"properties": {...playerData...}
}
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",
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...}
}
Configs
Func 1
Host-Pool Enabled
Func 2
Host-Pool Enabled
MatchmakingAPI
"connectionOverride":
"179.82.03.29:475",
"targetFunction": {
"name": "func1"
},
"pools":{
"default":[{...}],
"servers": [
{"attribute": "host",}
],
},
{
"attributes": {
"host": true,
},
"properties": {
"conn":
"179.82.03.29:475",
},
}
Peer to Peer?
Reference Slides After This
Closing
Deeply custom
matchmaking logic
Integrates automatically
with Multiplay
Multiplay Matchmaking
Beta this Fall (soon)
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
Questions?
Got a question about the Multiplay
matchmaker or Multiplay’s game
server hosting?
https://multiplay.com/contactus/

More Related Content

Similar to Advanced Matchmaking with Multiplay – Unite Copenhagen 2019

fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook
guoqing75
 
Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统
yiditushe
 

Similar to Advanced Matchmaking with Multiplay – Unite Copenhagen 2019 (20)

fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Behind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game GloballyBehind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
Behind the Scenes: Deploying a Low-Latency Multiplayer Game Globally
 
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry PiMonitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
Scalding big ADta
Scalding big ADtaScalding big ADta
Scalding big ADta
 
4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook
 
Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统
 
Future Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETFuture Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NET
 
Deep_dive_on_Amazon_Neptune_DAT361.pdf
Deep_dive_on_Amazon_Neptune_DAT361.pdfDeep_dive_on_Amazon_Neptune_DAT361.pdf
Deep_dive_on_Amazon_Neptune_DAT361.pdf
 
Quick trip around the Cosmos - Things every astronaut supposed to know
Quick trip around the Cosmos - Things every astronaut supposed to knowQuick trip around the Cosmos - Things every astronaut supposed to know
Quick trip around the Cosmos - Things every astronaut supposed to know
 
Game server development in node.js in jsconf eu
Game server development in node.js in jsconf euGame server development in node.js in jsconf eu
Game server development in node.js in jsconf eu
 
Monitoring infrastructure with prometheus
Monitoring infrastructure with prometheusMonitoring infrastructure with prometheus
Monitoring infrastructure with prometheus
 
(GAM301) Real-Time Game Analytics with Amazon Kinesis, Amazon Redshift, and A...
(GAM301) Real-Time Game Analytics with Amazon Kinesis, Amazon Redshift, and A...(GAM301) Real-Time Game Analytics with Amazon Kinesis, Amazon Redshift, and A...
(GAM301) Real-Time Game Analytics with Amazon Kinesis, Amazon Redshift, and A...
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
How to win $10m - analysing DOTA2 data in R (Sheffield R Users Group - May)
How to win $10m - analysing DOTA2 data in R (Sheffield R Users Group - May)How to win $10m - analysing DOTA2 data in R (Sheffield R Users Group - May)
How to win $10m - analysing DOTA2 data in R (Sheffield R Users Group - May)
 
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
Building a Versatile Analytics Pipeline on Top of Apache Spark with Mikhail C...
 
Laravel5 Introduction and essentials
Laravel5 Introduction and essentialsLaravel5 Introduction and essentials
Laravel5 Introduction and essentials
 
Understanding OpenStack Deployments - PuppetConf 2014
Understanding OpenStack Deployments - PuppetConf 2014Understanding OpenStack Deployments - PuppetConf 2014
Understanding OpenStack Deployments - PuppetConf 2014
 
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
Optimizing InfluxDB Performance in the Real World by Dean Sheehan, Senior Dir...
 

More from Unity Technologies

More from Unity Technologies (20)

Build Immersive Worlds in Virtual Reality
Build Immersive Worlds  in Virtual RealityBuild Immersive Worlds  in Virtual Reality
Build Immersive Worlds in Virtual Reality
 
Augmenting reality: Bring digital objects into the real world
Augmenting reality: Bring digital objects into the real worldAugmenting reality: Bring digital objects into the real world
Augmenting reality: Bring digital objects into the real world
 
Let’s get real: An introduction to AR, VR, MR, XR and more
Let’s get real: An introduction to AR, VR, MR, XR and moreLet’s get real: An introduction to AR, VR, MR, XR and more
Let’s get real: An introduction to AR, VR, MR, XR and more
 
Using synthetic data for computer vision model training
Using synthetic data for computer vision model trainingUsing synthetic data for computer vision model training
Using synthetic data for computer vision model training
 
The Tipping Point: How Virtual Experiences Are Transforming Global Industries
The Tipping Point: How Virtual Experiences Are Transforming Global IndustriesThe Tipping Point: How Virtual Experiences Are Transforming Global Industries
The Tipping Point: How Virtual Experiences Are Transforming Global Industries
 
Unity Roadmap 2020: Live games
Unity Roadmap 2020: Live games Unity Roadmap 2020: Live games
Unity Roadmap 2020: Live games
 
Unity Roadmap 2020: Core Engine & Creator Tools
Unity Roadmap 2020: Core Engine & Creator ToolsUnity Roadmap 2020: Core Engine & Creator Tools
Unity Roadmap 2020: Core Engine & Creator Tools
 
How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...
How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...
How ABB shapes the future of industry with Microsoft HoloLens and Unity - Uni...
 
Unity XR platform has a new architecture – Unite Copenhagen 2019
Unity XR platform has a new architecture – Unite Copenhagen 2019Unity XR platform has a new architecture – Unite Copenhagen 2019
Unity XR platform has a new architecture – Unite Copenhagen 2019
 
Turn Revit Models into real-time 3D experiences
Turn Revit Models into real-time 3D experiencesTurn Revit Models into real-time 3D experiences
Turn Revit Models into real-time 3D experiences
 
How Daimler uses mobile mixed realities for training and sales - Unite Copenh...
How Daimler uses mobile mixed realities for training and sales - Unite Copenh...How Daimler uses mobile mixed realities for training and sales - Unite Copenh...
How Daimler uses mobile mixed realities for training and sales - Unite Copenh...
 
How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...
How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...
How Volvo embraced real-time 3D and shook up the auto industry- Unite Copenha...
 
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
QA your code: The new Unity Test Framework – Unite Copenhagen 2019QA your code: The new Unity Test Framework – Unite Copenhagen 2019
QA your code: The new Unity Test Framework – Unite Copenhagen 2019
 
Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...
Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...
Engineering.com webinar: Real-time 3D and digital twins: The power of a virtu...
 
Supplying scalable VR training applications with Innoactive - Unite Copenhage...
Supplying scalable VR training applications with Innoactive - Unite Copenhage...Supplying scalable VR training applications with Innoactive - Unite Copenhage...
Supplying scalable VR training applications with Innoactive - Unite Copenhage...
 
XR and real-time 3D in automotive digital marketing strategies | Visionaries ...
XR and real-time 3D in automotive digital marketing strategies | Visionaries ...XR and real-time 3D in automotive digital marketing strategies | Visionaries ...
XR and real-time 3D in automotive digital marketing strategies | Visionaries ...
 
Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...
Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...
Real-time CG animation in Unity: unpacking the Sherman project - Unite Copenh...
 
Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...
Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...
Creating next-gen VR and MR experiences using Varjo VR-1 and XR-1 - Unite Cop...
 
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
What's ahead for film and animation with Unity 2020 - Unite Copenhagen 2019
 
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
How to Improve Visual Rendering Quality in VR - Unite Copenhagen 2019
 

Recently uploaded

Recently uploaded (20)

Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Optimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through ObservabilityOptimizing NoSQL Performance Through Observability
Optimizing NoSQL Performance Through Observability
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
The UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, OcadoThe UX of Automation by AJ King, Senior UX Researcher, Ocado
The UX of Automation by AJ King, Senior UX Researcher, Ocado
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya HalderCustom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
Custom Approval Process: A New Perspective, Pavel Hrbacek & Anindya Halder
 

Advanced Matchmaking with Multiplay – Unite Copenhagen 2019

  • 3. What Do Multiplay Do? 3 — Specialise in hosting real-time multiplayer games — Hybrid scaling — Resource orchestration platform
  • 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
  • 6. Allocate Request 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // REQUEST $ curl -X POST /server/allocate? profileid=104843 regionid=375ed04b-a4c2-4ecb-91ab-9ebc27eafbb0 uuid=2f139030-e997-11e8-9f32-f2801f1b9fd1 fleetid=7db01ecd-68f9-45ff-8f1e-369b2b4e4913 // RESPONSE { "allocation": { "profileid": 1075753, "uuid": "2f139030-e997-11e8-9f32-f2801f1b9fd1", "regions": "375ed04b-a4c2-4ecb-91ab-9ebc27eafbb0", "requested": "2019-09-24T15:05:16.601951875Z", "created": "2019-09-24T15:05:16.601951875Z", "fleetid": "7db01ecd-68f9-45ff-8f1e-369b2b4e4913" } } 6
  • 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
  • 32. Attributes Tickets 32 — { Attributes, Properties, Assignments } — Assignment = the ticket’s final state – Connection details – Custom assignment properties – Assignment/matchmaking errors. Properties Skill / TeamSkill PlayerCount Mode Rank Client Version Keys Held Role Recent History Friends Online Cars Unlocked QoS Data Inventory
  • 33. Tickets 33 { "attributes": { "mode": 1, "teamSkill": 2437, "playerCount": 2 }, "properties": { "partyInfo": { "partyId": 21398712387, "players": ["caleb", "josie"], "recentMatch": [ 987219387123, 1298723198371 ] }, "qosConnection":[ { "location": "2183", "avePing": 83, "quality": 12 }, { "location": "4128", "avePing": 67, "quality": 4 } ], "mapsUnlocked": [ "dust", "moon", "unite" ] } }
  • 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
  • 37. Querying for Tickets by Attribute Data
  • 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.
  • 40. Configuration 40 Multiplay - profileId - key Matchmaking (generator) - name - targetFunction - config - pools { "matchmaking": { "name": "ctf-competitive", "targetFunction": { "name": "team-skill-function" }, "pools": { "default": [ { "attribute": "skill", "min": 0, "max": 3000 } ] }, "config": { "teamCount": 2, "teamMin": 3, "teamMax": 4 } }, "multiplay":{ "profileId": "", "key": "" } }
  • 41. Configuration 41 More tickets slows things down Just do MORE { "matchmaking" : { "name": "ctf-competitive" , "targetFunction" : { "name": "team-skill-function" }, "pools": { "default": [ { "attribute": "skill", "min": 0, "max": 1600 } ] }, "config": { … } }, "Multiplay" :{ … } } { "matchmaking" : { "name": "ctf-competitive" , "targetFunction" : { "name": "team-skill-function" }, "pools": { "default": [ { "attribute": "skill", "min": 1400, "max": 3000 } ] }, "config": { … } }, "Multiplay" :{ … } }
  • 42. Configuration 42 Automate “MORE” DistributionTypes - Normal - Uniform - LinearApproximation - Auto BehaviorTypes - BucketCount - BucketSize { "matchmaking" : { "name": "ctf-competitive" , "targetFunction" : { "name": "team-skill-function" }, "pools": { "default": [ { "attribute": "skill", "min": 0, "max": 3000, "segmentation":{ "distributionType": "Normal", "segmentBehaviorType": "BucketCount", "segmentSize": 10 } } ] }, "config": { … } }, "multiplay" :{ … } }
  • 45. Evaluation Concurrent Match Functions = Ticket 124a3ew can appear in multiple proposals 124a3ew 198e31j lj34093 1oj412l2 124a3ew 834jl1j3 vs
  • 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
  • 50. 50 Game Client SDK Remote Config Func 1 Func 2 { "attributes": { "mode": 2, ... }, "properties": {...} } Configs "attribute": "mode", "min": 2, "max": 2 Playlists?
  • 51. Secure Player Data 51 Game Client MatchmakingAPI SDK Player Data Services LobbyService Identity
  • 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...} }
  • 56. Configs Func 1 Host-Pool Enabled Func 2 Host-Pool Enabled MatchmakingAPI "connectionOverride": "179.82.03.29:475", "targetFunction": { "name": "func1" }, "pools":{ "default":[{...}], "servers": [ {"attribute": "host",} ], }, { "attributes": { "host": true, }, "properties": { "conn": "179.82.03.29:475", }, } Peer to Peer?
  • 58. Closing Deeply custom matchmaking logic Integrates automatically with Multiplay Multiplay Matchmaking Beta this Fall (soon)
  • 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/