使用 Azure 容器实例 (ACI) 实现同步多人游戏

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Microsoft Azure网络

小提示:您能找到这篇{使用 Azure 容器实例 (ACI) 实现同步多人游戏}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的使用 Azure 容器实例 (ACI) 实现同步多人游戏内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

< ">探索此使用Azure容器实例、事件网格和Azure Functions的替代解决方案,它可按需自动缩放,且按每秒使用量计费,前提是您希望以支付较高价格为代价,利用托管虚拟机实现更简单的体系结构和维护工作。

< ">服务器需要在Azure容器实例之外保持持久状态。

< ">本文将描述GitHub上的此示例中使用的体系结构。请注意,此参考体系结构中的代码只是一个指南示例,在用于生产环境之前,可能还有需要优化的地方。

< ">体系结构关系图

< ">相关服务

< ">Azure流量管理器-选择此服务是因为它可以根据延迟情况将玩家连接到最合适的区域。

< ">Azure容器实例-在Azure中运行容器的最快且最简单的方法,无需管理任何虚拟机,也无需采用更高级别的服务。

< ">Azure Functions-选择此服务是因为它是运行小部分逻辑的最简单方法。

< ">Azure表存储-用于跟踪容器组状态的简单的键/属性存储。

< ">Azure事件网格-选择此服务是因为它内置针对来自Azure服务的事件的支持。

< ">Azure Blob存储-我们需要一个用于存储自动缩放帮助程序配置的空间。

< ">资源组-针对Azure流量管理器使用一个资源组,并针对每个区域游戏服务器池各使用一个资源组(例如,一个用于北美、一个用于欧洲、一个用于拉丁美洲、一个用于亚洲等)。

< ">部署模板

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

< ">Deploy using an Azure Resource Manager template

< ">此操作将触发模板部署,即系统会将azuredeploy.json ARM模板文件部署到您的Azure订阅,从而创建必要的Azure资源并从此存储库中提取源代码。这可能会在您的Azure帐户中产生相应费用。

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

< ">要部署项目,需要指定以下信息:

< ">位置:选择将部署资源的Azure区域。请确保选择Azure容器实例可用的位置。

< ">Function名称:选择Function App的唯一名称。这将确定Function的DNS,请谨慎选择。

< ">存储库URL:系统将拉取相应文件来创建Azure Functions,而此URL将确定包含这些文件的存储库。您可以保留默认值,或者换成自己的Fork。

< ">分支:此值与项目的GitHub分支相对应。

< ">Azure Functions部署在免费的应用程序服务计划上,您可能需要对它进行扩展以提高性能。



< ">项目使用托管服务标识及其与Azure Functions的关系来对Azure ARM API管理服务进行身份验证,从而创建/删除/修改所需的Azure容器实例。部署脚本会自动小红书订单查看为Function App创建应用程序标识,但您需要向将要托管容器实例的资源组授予此标识权限。为此,请执行以下操作:

< ">访问Azure门户。

< ">找到要在其中创建Azure容器实例的资源组(这可能是托管Function App的同一资源组)。

< ">选择访问控制(IAM)。

< ">单击添加,选择贡献者作为角色,向Function App分配访问权限,然后通过修改订阅/资源组下拉框来选择Azure Functions。

< ">单击保存,就完成操作了!

< ">此外,部署完成后,您需要按照此处的说明手动添加ACIMonitor Function的事件订阅Webhook。只需确保选择正确的资源组来监控事件(即将在其中创建容器的Azure资源组)。这样一来,只要指定资源组中发生资源修改,事件网格便会立即向ACIMonitor Function发送消息。完成此操作后,部署就准备就绪了。获取ACIMonitor Function的URL后,您可以使用此ARM模板来部署事件网格订阅,这是一项可选操作。

< ">使用门户部署事件网格订阅时,需要填写以下值:

< ">名称-为事件网格订阅选择一个独特的名称。

< ">主题类型-选择“资源组”(如果Azure容器实例将部署在不同的资源组中,请选择“Azure订阅”)。

< ">订阅-要用来监控Azure容器实例创建事件的订阅。

< ">资源组-选择将包含您创建的Azure容器实例的资源组。请确保选中订阅所有事件类型复选框。

< ">订阅服务器类型-Webhook。

< ">订阅终结点-这将包含ACIMonitor Azure Functions的触发器URL。

< ">前缀筛选器-将其保留为空。

< ">后缀筛选器-将其保留为空。

< ">最后但同样重要的是,使用新的Azure Functions v2运行时版本时,EventGrid绑定扩展可能需要手动注册。在正常情况下,扩展将自动安装(因为它注册在extensions.csproj文件中),但如果没有自动安装,您可以查看以下文章了解如何手动执行此操作:

< ">Azure Functions注册绑定扩展。

< ">从门户手动安装或更新Azure Functions绑定扩展。

< ">分步操作

< ">玩家的设备客户端连接到流量管理器,以传送要查找游戏服务器的玩家请求。

< ">流量管理器连接到具有最低延迟的区域,并指向可获取可用游戏服务器的Matchmaker。

< ">Matchmaker调用ACIList Azure Functions以获取来自所有容器组的公共IP和活动会话列表。

< ">该Azure Functions从Azure表存储中获取表,而该表存储将存储所有容器组中的公共IP、活动会话数量和状态。

< ">假设没有可用的表,系统将调用ACICreate Azure Functions。容器状态为Creating。

< ">ACICreate Azure Functions创建容器。

< ">创建或删除容器时,系统接入事件网格进行侦听。片刻之后(几分钟),事件网格收到来自正在创建的容器的相关事件。

< ">事件网格还进行了设置,可在收到事件后调用ACIMonitor Azure Functions,以便传递公共IP。

< ">ACIMonitor Azure Functions插入来自新创建容器的公共IP,并将该容器的状态设置为Running。

< ">Matchmaker现在为玩家获得了一台可用服务器,它将详细信息发回设备客户端,以便设备客户端直接连接到服务器。

< ">Matchmaker调用ACISetSession Azure Functions,以更新玩家被指派连接的容器上运行的活动会话数量。

< ">ACISetSession Function更新Azure表存储。

< ">到某个时刻后,将不再需要服务器。由于玩家可能仍在使用容器实例,因此本例不会手动删除容器,而是调用ACISetState Azure Functions来将容器的状态设置为MarkedForDeletion,这样一来,新玩家就不会被安排到该容器实例。

< ">ACISetState Azure Functions更新Azure表存储。

< ">时间触发的ACIGC Azure Functions会时不时地运行,并删除所有具有MarkedForDeletion状态的容器实例。

< ">ACIGC Azure Functions调用可实际删除容器实例的ACIDelete Azure Functions。

< ">ACIDelete Azure Functions删除容器。

< ">使用更具体的示例:

< ">一开始没有服务器实例。

< ">突然,玩家需要服务器进行连接,系统调用了ACICreate。

< ">执行创建命令时,服务器尚未启动和运行,状态为Creating。

< ">完成部署后(几分钟),事件网格将通过ACIMonitor通知您服务器实例(容器组1)正在特定的IP地址(即1.2.3.4)中运行。系统将该实例的状态更新为Running。

< ">玩家现在可以连接到服务器实例。

< ">假设现在需要另一个服务器实例。您可以再次使用ACICreate,或者如果已超出横向扩展阈值,则让ACIAutoScaler代表您使用ACICreate创建实例。

< ">还是同样的模式,新服务器尚未准备就绪,当部署完成后,事件网格将通过ACIMonitor通知您服务器在另一个特定IP地址(即2.3.4.5)中运行。系统将这第二个实例(容器组2)的状态更新为Running。

< ">玩家现在可以连接到第二个实例。

< ">最后,不需要第二个实例,我们决定不使用它或者超出了扩展阈值。由于可能有玩家仍在使用第二个实例,因此系统不会删除该实例,而是调用ACISetScale将服务器标记为删除,这样一来,新玩家就不会被安排到第二个实例。现在,第二个实例的状态是MarkedForDeletion。

< ">当玩家在第二个实例中结束游戏后,系统将运行垃圾回收器ACIGB,并触发ACIDelete以完全删除第二个实例。

< ">缩放

< ">可通过以下环境变量配置ACIAutoScaler Azure Functi上海危机公关I咨询时代达ons设置:扩展/收缩阈值、最小/最大实例数以及冷却。下面是自动缩放器的逻辑:

< ">计时触发,每隔1分钟运行一次,默认禁用。

< ">负载为已连接的玩家数量/总玩家容量。

< ">如果(“负载”&gt;80%且实例&lt;最大实例数),则调用ACICreate Azure Functions以加快启动新实例。这可以处理好扩展情形。

< ">如果(“负载”&lt;60%且实例&gt;最小实例数),则调用ACISetState Azure Functions,将负载最小的实例的状态设置为MarkedForDeletion。这可以处理好收缩情形。

< ">扩展/收缩有10分钟的冷却期。

< ">Azure容器实例可以快速实现扩展,只需几分钟,您便可以随时开始使用新容器。例如,对于扩展30个运行OpenArena的新Azure容器实例的请求,从请求发出到玩家能够连接,用时不到3分钟。



< ">手动创建一组容器进行测试

< ">如果您想创建一组容器实例进行测试,可以使用此处提供的示例。将openarenaserver1替换为您要创建的各个实例的唯一名称(如openarenaserver1、openarenaserver2、openarenaserver3等)。您还可以替换资源组、位置和存储名称/键。

< ">其他资源和示例

< ">请观看Build上录制的使用Azure容器实例实现多人游戏服务器缩放视频,了解详细信息。

< ">定价

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

< ">您需要承担运行这些参考体系结构时使用的Azure服务的费用,总金额取决于将通过分析管道运行的事件数。请参阅参考体系结构中使用的每项服务的定价网页:

< ">Azure流量管理器

< ">Azure容器实例

< ">Azure Functions

< ">Azure事件网格

< ">Azure表存储和Azure Blob存储

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

使用 Azure 容器实例 (ACI) 实现同步多人游戏

上一篇:AppsFlyer干货分享 | 关于深度链接的那些烦心事,
下一篇:阿里云OSS绑定自己域名


版权声明:以上主题为“使用 Azure 容器实例 (ACI) 实现同步多人游戏"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    使用 Azure 容器实例 (ACI) 实现同步多人游戏
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“使用 Azure 容器实例 (ACI) 实现同步多人游戏”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用 Azure 容器实例 (ACI) 实现同步多人游戏的相关事宜。

关键词:使用,Azure,容器实例,(ACI)

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号