亚马逊AWS官方博客

使用Amazon Global Accelerator 服务加速传统互联网游戏

传统互联网游戏典型架构

在传统互联网游戏设计中,游戏服务器和游戏客户端为了保持高可靠和低延迟通信,往往选择使用TCP协议。游戏服务器再利用分服+分区方式实现用户分组和负载分担。以下是一款传统互联网游戏的参考架构:

游戏玩家首先使用电脑或手机游戏客户端向游戏登录服执行登录操作,游戏登录服会根据用户注册时候的选择,返回其对应游戏区服的连接参数“IP地址+端口”给游戏客户端。游戏客户端将使用获得的连接参数建立与对应游戏区服的TCP长连接,开始游戏互动。

为了保证不同国家/地区的游戏玩家都拥有一致的流畅游戏体验,游戏运营商往往还会在游戏服务器和玩家电脑&手机终端之间部署网络流量加速服务,最大限度的减少网络延迟和抖动问题。

 

使用Amazon Global Accelerator加速传统互联网游戏

Amazon Global Accelerator 是一种通过亚马逊云科技的全球网络基础设施发送用户流量的联网服务,可以将亚马逊云服务客户的网络性能提升高达60%。当互联网拥塞时,Global Accelerator 的自动路由优化会帮助客户将数据包丢失、抖动和延迟水平持续维持在低水平。凭借 Global Accelerator,亚马逊云服务客户还可获得两个面向最终用户的全球静态IP,以简化流量管理。Global Accelerator也支持加速位于VPC私有网络中的不同类型终端节点资源,比如位于VPC私有子网中的EC2服务器或ALB/NLB负载均衡器,可以在保证终端节点的网络安全的同时也为全球各地的最终用户提供高性能低延迟访问。

亚马逊云服务的游戏行业客户可以考虑使用Global Accelerator服务来加速其TCP协议为主的传统互联网游戏,根据部署游戏所需要的游戏服务器数量不同和其他特定需求,游戏客户可以采用不同的Global Accelerator网络加速解决方案:

  1. 客户计划启动的游戏服务器数量在【1-10】台

如果游戏客户需要支持的玩家数量有限,或者选择使用了较大EC2实例类型来部署其游戏区服,实际上就减少了需要同时启动的游戏服务器数量。这样就可以考虑使用Amazon Global Accelerator的“标准加速器”功能来直接加速运行游戏区服的EC2实例终端节点。
Figure 1直接使用标准加速器加速EC2游戏服示例

 

这种方案支持通过游戏服直接获取来自游戏客户端的源IP地址,便于游戏客户进行基于用户IP地址的客户端数据分析,并且游戏客户还可以灵活控制游戏区服的IP地址和监听端口,便于管理。目前一个Global Accelerator能够支持最多10个侦听器,可用于实现游戏客户端请求端口到后端某台EC2上的游戏区服端口的转发。

提示:在这种架构中,如果游戏客户实际需要启动的游戏服务器EC2数量可能超过10台,客户可以通过亚马逊云服务控制台创建客户支持服务申请,适当增加单个Global Accelerator实例的侦听器数量配额或者可以考虑创建更多的Global Accelerator实例。

Figure 2利用多个加速器扩展游戏服数量

提示:如果游戏客户启动的游戏服EC2实例的CPU和内存资源足够,客户可以利用Amazon Global Accelerator监听器支持TCP端口段监听的能力,在一台游戏服EC2上部署多个游戏区服,监听在不同的TCP端口,从而进一步增加支持的游戏区服数量。

Figure 3在一台EC2上部署多个游戏区服

对于游戏区服的可用性要求极高的用户,甚至可以考虑为Amazon Global Accelerator的相同监听器使用多个终点组,实现游戏区服的多区域部署模式,完成跨区域的高可用性设计。

Figure 4跨区域高可用性设计

  1. 用户计划启动的游戏服务器数量在【10-500】台

中等用户规模的互联网游戏需要启动更多的游戏服务器,这个时候可以利用Amazon Global Accelerator基于客户端请求端口段的转发能力加上网络负载均衡器终端节点来扩展可以支持的游戏服务器最大数量。缺省配置为:一个Amazon Global Accelerator可以支持10个侦听器;每个侦听器都可以有单独的监听TCP端口段;每个网络负载均衡器可以支持50个EC2实例或者容器目标组。这样一个Amazon Global Accelerator可以支持最多10*50=500个游戏区服。和加速解决方案1类似,游戏客户也可以通过亚马逊云服务控制台创建客户支持服务申请,适当增加单个Global Accelerator的侦听器数量配额或者考虑创建更多的Global Accelerator实例来进一步增加需要支持的游戏服数量。

这种方案的优势是支持的游戏服务器数量比较多,游戏客户可以灵活控制游戏区服的IP地址和监听端口,同时支持使用EC2和Docker容器目标作为运行游戏区服的游戏服务器。存在的一个使用限制是Amazon Global Accelerator的“标准加速器”功能目前还不支持获取使用网络负载均衡器终端节点的客户端源IP地址。一个替代解决方案是游戏客户可以在玩家登录的时候就利用登录服通过HTTP协议获取玩家的客户端IP地址,而不是通过每个游戏服来获取。

Figure 5单个NLB可支持最多50个游戏服

Figure 6单个GA可以支持最多10个NLB,500个游戏服

  1. 用户计划启动的游戏服务器数量可能超过500台

如果某游戏客户需要支持海量的游戏区服,比如一款面向全球用户的超大规模互联网游戏,它需要启动的游戏服务器和游戏区服的数量已经远远超过了方案1和方案2能够提供的最大数量,那么游戏客户可以考虑使用Amazon Global Accelerator最近推出的新功能:“自定义路由加速器”。它使用VPC子网作为终端节点,极大增加了支持的游戏服务器和游戏区服的数量。用户在创建这样的VPC子网终端节点的时候,Global Accelerator就会自动给创建这样的的静态映射关系:Global Accelerator对外监听端口à内部服务IP地址->监听端口。游戏客户只需要使用Global Accelerator查询接口获得的这个静态映射关系表,启动特定IP地址的EC2游戏服,并在提前定义的TCP端口上启动游戏区服进程即可。考虑到一个VPC子网的可用IP数量以及子网内单个EC2实例允许同时启动的游戏区服数量(这取决于启动的EC2示例大小和每个游戏区服需要使用的CPU和内存资源数量),这种配置实际上可以支持的游戏区服数量是非常巨大的,可以是几十万甚至数百万的规模,完全可以满足任何规模互联网游戏部署。

一个典型的Amazon Global Accelerator “自定义路由加速器”的使用方法可以是:

    1. 游戏客户创建VPC
    2. 游戏客户创建VPC子网
    3. 游戏客户创建自定义路由加速器,设置对外的监听端口范围
    4. 游戏客户选择VPC子网作为终端节点,设置游戏区服启动端口范围(目标端口范围)
    5. 游戏客户利用Global Accelerator查询API,获取完整的“对外监听端口à游戏区服IP地址->内部启动端口”静态映射表
    6. 在游戏运营过程中,游戏客户根据业务扩展需求,按照映射关系在对应的VPC子网中启动EC2实例和游戏区服进程,EC2 IP地址和游戏区服进程启动端口其实都是提前定义好的
    7. 将已经成功启动的游戏区服信息(IP+Port)和对应的对外请求端口信息提供给游戏登录服,比如通过登录服参数配置界面或者系统配置文件方式提供。
    8. 游戏玩家登录,登录服将分配可用的Global Accelerator对外端口给玩家

Figure 7Global Accelerator “自定义路由加速器”工作原理示意图

关于Global Accelerator “自定义路由加速器”是如何根据用户定义的对外监听端口范围,游戏服务器目标端口范围和VPC子网IP地址段建立静态映射关系的,请参考该服务开发者文档相关章节:https://docs.aws.amazon.com/global-accelerator/latest/dg/about-custom-routing-how-it-works.html

使用Global Accelerator “自定义路由加速器”而不是“标准加速器”还有一个优势就是,即使需要同时支持大量的游戏服务器,也可以直接从游戏服务器获取客户端的源IP地址。需要注意的是,游戏客户需要按照创建加速器时候产生的静态端口映射规则来启动游戏服务器和游戏区服,不能自己任意指定游戏区服的IP地址或端口,这个限制在大多数情况下都不会是一个问题。如果游戏客户确实需要自定义游戏区服的启动IP地址和端口,可以考虑选择使用加速方案1或者方案2.

 

总结

随着亚马逊的Global Accelerator新近推出的“自定义路由加速器”功能正式上线,大大增强了该服务对传统互联网游戏网络加速需求的支持。大部分情况下,游戏客户直接选择使用Global Accelerator提供的“自定义路由加速器”功能将是加速传统互联网游戏的最佳选择。使用Global Accelerator的“标准加速器”网络游戏加速方案1和方案2)可作为补充方案,用于有特定需求的加速场景。

 

本篇作者

蒙维

亚马逊云科技解决方案架构师,负责基于亚马逊云服务的解决方案架构咨询和设计,有超过十年以上电信行业和移动互联网行业复杂应用系统架构和设计经验,主要擅长分布式和高可用软件系统架构设计,移动互联网应用解决方案设计,研发机构DevOps最佳实施过程。