Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
chrisliu1995 opened this issue May 28, 2024 · 2 comments
Open

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

chrisliu1995 opened this issue May 28, 2024 · 2 comments

Comments

@chrisliu1995
Copy link
Member

chrisliu1995 commented May 28, 2024

背景需求

为了尽可能降低网络延迟并优化玩家体验,大型多人在线对战(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形式部署,主集群拿到从集群的访问权限。

@symsimmy
Copy link

@chrisliu1995

  1. ping server是否是和openkruise game一起部署,还是可选组件?
  2. ping server是采用什么网络协议?
  3. 为了获取各地的延迟数据,客户端需要支持哪些工作?

@chrisliu1995
Copy link
Member Author

@chrisliu1995

  1. ping server是否是和openkruise game一起部署,还是可选组件?
  2. ping server是采用什么网络协议?
  3. 为了获取各地的延迟数据,客户端需要支持哪些工作?

ping server可单独部署,支持upd / http。客户端访问ping server获取延迟数据后,筛选出符合备选条件的地域集群名称,在创建ticket时作为参数传入。

本设计中主要关注director的设计逻辑,ping server的需求我们接下来可一并讨论。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants