自定义游戏服务器扩展参考体系结构

了解如何使用 Docker 容器化您的游戏服务器,以及如何使用 Azure 资源管理器模板、Azure Functions 和 DevOps 实践为服务器构建可靠的自动化部署过程。

请参阅使用 Docker 和 Azure 编排和扩展 Icebird 的游戏服务器,阅读所有详细信息。 GitHub 上有源代码部署模板可用。

体系结构关系图

B使用封装的基本游戏服务器托管

参考实现详细信息

每个虚拟机都包含一个运行游戏会话的 Docker 容器。 虚拟机启动后,它会立即实例化 Docker 容器,并通过自定义脚本扩展 (Linux, Windows) 打开所需的网络端口。 每个容器都有自己的公共专用 IP 地址。

此外,还有一个获取服务器 Azure Functions,它在应用服务计划上运行,可提供其他缩放选项,如应用服务环境 文档中所述。 任何应用服务必须具有 Azure 存储帐户,并且 Azure Functions 服务将预配它。 在此存储帐户中,Azure 表存储 表用于存储有关服务器池的信息,包括服务器的唯一标识符、它的 IP 地址、端口和状态。 获取服务器 Azure Functions 使用此信息将连接详细信息返回到客户端,并将服务器标记为在使用时不可用。

若要帮助缩放服务器池,使用计时器触发的自动缩放 Azure Functions。 每隔一分钟左右,它就会查看有多少台服务器可用,并根据需要添加其他服务器。 如果池中有太多未使用的服务器,它将取消这些服务器的设置。 您可以设置池中要有多少台服务器。

游戏服务器启动后,需要与第三个发送详细信息 Azure Functions通信,宣布它的存在,以便可以在 Azure 表存储中更新相关的连接信息。

游戏会话完成后,游戏服务器会对 Azure Functions 上的第四个游戏会话执行 ping 操作,以更新该特定服务器的 Azure 表存储的状态。

最终目标是尽可能快地释放虚拟机,因此这个体系结构侧重于仅为每个虚拟机提供一个游戏会话。

留意 Azure 限制 页面,了解您将能够基于 Azure 存储限制运行的并发用户数量。 如果需要扩展,请考虑使用 Azure Cosmos DB 及其表 API 替换 Azure 表存储。

部署模板

单击下面的按钮,将项目部署到您的 Azure 订阅:

此操作将触发模板部署,即系统会将 template.json ARM 模板文件部署到您的 Azure 订阅,从而创建必要的 Azure 资源。 这可能会在您的 Azure 帐户中产生相应费用。

请查看一般指南文档,其中有一篇文章概述了 Azure 服务的命名规则和限制。

备注

如果您对 ARM 模板的工作原理感兴趣,请参阅此参考体系结构中使用的每个不同服务对应的 Azure 资源管理器模板文档:

提示

要在本地运行 Azure Functions,请使用这些相同的应用设置更新 local.settings.json 文件。

定价

如果您没有 Azure 订阅,可以创建免费帐户,开始使用 12 个月的免费服务。 除非您超出这些服务的使用限制,否则无需为 Azure 免费帐户中包含的这些免费服务付费。 了解如何通过 Azure 门户使用情况文件查看服务使用情况。

您需要承担运行这些参考体系结构时所使用的 Azure 服务的费用。 总金额将因使用情况而异。 请参阅参考体系结构中使用的每项服务的定价网页:

您还可以使用 Azure 定价计算器,以配置和估算您计划使用的 Azure 服务的成本。