在一些比較普通的應用場景,我們產生一個 matches 的流程會像是,由 Director 輪詢呼叫 Open-Match Backend 取得一組 MatchProfile
,而過程中會觸發 MMF 的執行,並且依照 MatchProfile filter
的條件獲得對應的 tickets
,最後 MMF 依照設定的邏輯匹配這些 tickets
,返回 matches
。
而在一般場景會將這些 Tickets Pool 完美的分配劃分,使得條件設定是不會重疊的,透過設定 MatchProfiles filter
的內容可以達成我們期望的目標,指定好特定區間或固定的條件,讓 MMF 撈出來 tickets
執行的時候不會有 overlap 的可能性。但事實上我們在做分配時,還是有可能利用部分重疊的條件範圍,來使得配對時間縮短,提升配對品質體驗。
Director 發出含有以下條件 tickets
的 MatchProfiles
p := []*pb.MatchProfile{
{
Name: "Profile1",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 0,
Max: 49,
},
},
},
},
},
{
Name: "Profile2",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 50,
Max: 99,
},
},
},
},
},
{
Name: "Profile3",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 100,
Max: 300,
},
},
},
},
},
}
Director 發出含有以下條件 tickets
的 MatchProfiles
p := []*pb.MatchProfile{
{
Name: "Profile1",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 0,
Max: 49,
},
},
},
},
},
{
Name: "Profile2",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 39,
Max: 99,
},
},
},
},
},
{
Name: "Profile3",
Pools: []*pb.Pool{
{
Name: "ping",
DoubleRangeFilters: []*pb.DoubleRangeFilter{
{
DoubleArg: "ping",
Min: 79,
Max: 300,
},
},
},
},
},
}
我們需要注意的是,在給定含有重疊的 MatchProfiles
時,會產生組合的碰撞,而如何讓這些帶有重疊的 tickets
配對池,可以得到最合適的配對結果?需要仰賴 Open-Match 核心 Evaluator 的參與 ,透過我們在 MatchProfiles
給予 overlapping 與 MMF 計算配對品質指數,Evaluator 可以協助我們找出最合適的配對組合,這部分我們留至 Evaluator 範例說明。