如何扩展多人在线游戏后端?

问题描述 投票:0回答:1

我正在编写一个游戏服务器。该游戏是一款多人回合制游戏,具有初始匹配和/或私人房间创建。我计划我的架构如下。

因此,最初,我的用户连接到匹配服务,生成游戏,相互连接,并通过来自匹配服务的 WebSocket 侦听游戏开始事件。之后,只要准备好,匹配服务就应将它们重定向到相应的游戏引擎服务器,该服务器又将通过 WebSocket 与客户端通信。我希望它们连接到同一服务器的原因是为了正确处理 WebSocket 连接和数据同步。

我知道如何进行预定义路由,例如基于 url 键或类似的内容,我的问题是:

如何自动扩展我的游戏服务器,并使其通过动态路由进行访问?假设一个新的游戏服务器产生,它为自己生成一个路由密钥,并将其通知匹配服务器。或者也许匹配服务器会为他生成一个新的路由密钥,这并不重要。但是我如何才能正确路由所有后续请求呢?例如,如果我使用 Nginx 作为代理服务器,我将不得不更改配置并重新启动 Nginx,这不是我想要的服务器,它在扩展时不应该有停机时间。

architecture url-routing autoscaling
1个回答
0
投票

我们假设您将在单个虚拟机(EC2 实例)上运行 4 个游戏服务器。

您必须在每台机器上执行某种静态路由,即启动四个游戏服务器进程,并在前面放置一个 Nginx 代理,并使用静态配置将流量路由到每个游戏服务器。

这里的关键观察是,您不会通过添加 EC2 实例来一次扩展一台游戏服务器,这样每次新实例启动时都会为您提供 +4 个游戏服务器。

您现在需要的是一个注册机制,以便游戏服务器可以向匹配服务器注册。每个游戏服务器都会做单独的注册报告:

  • 实例的公网IP
  • 他们在该服务器上的索引(0-3)。
  • 他们当前的状态(就绪、忙碌、失败……)

您可以自己实现此注册或使用为此目的设计的库(例如 Apache Zookeeper)

最后,我希望您将游戏服务器放入自动缩放组中 - 您可以通过匹配服务控制 ASG 的大小 - 当它发现可用游戏服务器的数量较低时,它会增加组大小。

© www.soinside.com 2019 - 2024. All rights reserved.