kruise-game-open-match-director icon indicating copy to clipboard operation
kruise-game-open-match-director copied to clipboard

The Game Match Solution for Multi-Clusters(Multi-Regions)

Open chrisliu1995 opened this issue 9 months ago • 2 comments

背景需求

为了尽可能降低网络延迟并优化玩家体验,大型多人在线对战(PvP)游戏经常采取在全球范围内部署服务器的做法。这种布局确保了玩家可以连接到地理位置邻近的节点,以获得更流畅的游戏过程。然而,为了丰富游戏的趣味性,在网络延迟允许的前提下,来自世界各地的玩家也应有机会加入到同一场对战中。这就将游戏内的匹配逻辑带入了一个全新的复杂性层级。 以往,OKG的director系统各自独立运行于每个服务器集群之中,专注于处理本地集群的匹配要求,同时仅限于指派各自集群内的服务器资源。不难看出,这种单一集群的模式由于局限于特定区域,无法满足跨区域游戏匹配需求,阻碍了全球化玩家互动的潜能。 如今要想跨越这个障碍,就必须对现有的游戏匹配架构进行全方位的更新,创建一个能够在全球范围内高效匹配玩家的模型。这种全域匹配系统的引进,不仅能够提供更好的玩家游戏体验,还能促进不同文化背景的玩家之间的交流,为游戏带来更加广泛的国际影响力。

架构设计

方案架构图如下图所示

  • 每个地域存在一套Kubernetes集群环境
  • 每个地域的Kubernetes集群都安装OKG,并部署相同名称的GameServerSet
  • 选择某地(此例中为Region A)Kubernetes集群作为Host集群,部署Open Match

image

匹配过程如下:

  1. 玩家客户端访问各地Ping Server,获取即时延迟数据。
  2. 将各地延迟数据作为ticket属性,向Host集群的Open Match发起请求,进入匹配队列。
  3. Host集群中Director将生成与地域有关的Profile,并解析生成的Match、寻找对应地域的可用房间服,获取其地址并返回。

Director改造设计

为满足上述架构,kruise-game-open-match-director(OKG Director)需要进行全地域化改造:

  • 配置多集群GameServer访问权限
  • profile name 格式改变,带上地域属性
  • 解析match,根据match中的profile name访问对应地域的GameServer

新增启动参数

-- slave-clusters

  • default: "", which means only host cluster exists.
  • usage: Specify the slave cluster names, which are also the names of corresponding kubeconfig secrets. Format is "{cluster_1_secret_name},{cluster_2_secret_name},..."

profile命名规范

  • 当 slave-clusters 为默认值,即不存在从集群时,profile命名与之前一致,以gssName作为名称
  • 当存在slave-clusters,profile命名规范如下:{gssName}_{cluster_name}.例如,存在两个gss,分别为game-1,game-2;同时存在一个从集群region-b,则会生成四个profile,其命名分别为:game-1_Host; game-1_region-b; game-2_Host; game-2_region-b.

master集群访问slave集群资源

从集群(图中的region B、C所在集群)的kubeconfig以主集群open match同命名空间下的secret形式部署,主集群拿到从集群的访问权限。

chrisliu1995 avatar May 28 '24 13:05 chrisliu1995