时间: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分钟运行一次,默认禁用。 < ">负载为已连接的玩家数量/总玩家容量。 < ">如果(“负载”>80%且实例<最大实例数),则调用ACICreate Azure Functions以加快启动新实例。这可以处理好扩展情形。 < ">如果(“负载”<60%且实例>最小实例数),则调用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服务的成本。 |
上一篇:AppsFlyer干货分享 | 关于深度链接的那些烦心事,
下一篇:阿里云OSS绑定自己域名
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“使用 Azure 容器实例 (ACI) 实现同步多人游戏”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用 Azure 容器实例 (ACI) 实现同步多人游戏的相关事宜。
关键词:使用,Azure,容器实例,(ACI)