每天,游戏行业都在以惊人的速度发展,与全球客户群的指数级扩张同步。网络和服务器滞后可能会导致游戏玩家响应迟缓并与游戏断开连接。因此,解决这些问题已成为游戏社区的当务之急,以改善玩家体验。可靠的服务器、实时数据分析和低延迟对于高质量的内容和出色的玩家体验至关重要。
这使得游戏自然适合在云上运行。此外,由于云计算提供了灵活且可扩展的基础设施,游戏公司不再需要估计他们将需要的游戏服务器,甚至不需要提前进行额外购买。
手机游戏现在是游戏行业中最大的部分。随着现代移动技术的发展足以处理中等到繁重的游戏,许多主机游戏公司已进入移动领域。手机游戏倾向于创新、VR/AR、移动性、连接性,甚至走向全球。移动游戏的底层架构应该能够处理繁重的工作负载和全球连接,同时将成本保持在最低水平,从而使云计算成为移动游戏公司的最佳选择。
全球游戏服务器(一):内容加速与架构对比
全球服务器游戏加速
Global Server Game Acceleration(或Global Accelerator)的架构是建立在单一区域部署的中心化游戏服务器和全球部署的具有加速公共网络访问的边缘位置。玩家通过高速通道在地理上被路由到最近的边缘位置。这有助于最大限度地减少延迟,确保高质量的性能和可用性,并实现全球加速。
目前,全球服务器游戏的主要痛点是不同地区的玩家网络延迟不同导致的游戏体验不公平。第三方专用网络连接的价格和质量变化等技术复杂性,全球边缘位置部署涉及的高运维成本,复杂的代理等等。
移动加速器
游戏开发者可能会遇到以下问题:
- 应用程序安装和启动缓慢
- 游戏加载缓慢
- 高延迟
- 移动、联通、电信等运营商互动缓慢
- 混乱的运营商IP库
- 服务器访问失败率高
- 非 WiFi 连接的可用性低
- 高丢包率和域名劫持
- 交互体验差
- 用户的游戏体验差异遍布全球。
这些问题使得阿里云移动加速器最适合解决客户端与边缘站点之间的“最后一公里”加速。见下图。
全球加速
使用阿里云全球加速,您无需手动配置到边缘站点的内容交付加速,这可能很复杂,并且需要长时间调试。全球加速确保您的高可用性、可扩展性、性能和灵活的路由。
基本上,全球加速通过使用EIP(弹性IP地址)将中心化服务器上的ECS实例或VPC负载均衡实例映射到公网来提供点对点加速。全球加速加速跨区域、跨国连接服务器,如下图:
全路径加速
通过将移动加速与全球加速相结合,我们可以加速从服务器到客户端的整个数据路径。在该方案中,移动加速基于动态路由加速客户端与边缘站点之间的连接,而全球加速通过高速通道加速中心服务器与边缘站点之间的连接。见下图。
在本文中,我们研究了几种支持全球游戏服务器的架构设计,并评估了每种设计的优缺点。
全球游戏服务器(二):典型系统设计与案例分析
典型系统设计
全球排名设计
在设计全球排名服务时,必须考虑需求、分析、数据结构、排名数据持久化、排名服务器单点故障等问题。一个排名服务架构如下图所示:
该架构使用Redis实现定时数据。游戏服务器向排名服务器上报排名数据。客户端从游戏服务器拉取排名数据,游戏服务器从排名服务器拉取排名数据。
游戏时间设计
所有游戏服务器均使用GMT Jan 1, 1970 00:00:00 offset(一般秒数绝对值1)来表示游戏时间。这个时间同步到游戏客户端,游戏客户端根据手机设置的时区计算出游戏时间显示在客户端。规格如下图所示。
为什么需要游戏时间同步?
- 为防止客户端修改本地时间混淆游戏逻辑,客户端必须使用服务器时间。
- 基本上所有解决游戏状态同步问题的技术,例如预测拉动或服务器验证同步,都需要时间同步。
- 在游戏中,一些定时事件或与时间相关的玩法特性需要一个标准统一的游戏服务器时间来保证公平竞争。
- 在客户端和服务器通信的过程中,更安全的方法是给每个数据包加上时间戳,这样服务器就可以验证数据包的合法性。
游戏数据同步
解决方案 1:使用缓存进行即时数据回写
在这种方法中,数据集中存储,本地缓存立即将数据写回数据库。具体架构如下图所示。
目前涉及到数据同步的场景主要有两种:
场景1 玩家在本地登录(上图中红字标注的解释)。
- 数据库代理从数据库中读取角色数据。
- 数据库代理将角色数据插入到缓存中。
- 从缓存中读取的角色数据用于计算。
- 当数据发生变化时,缓存数据和数据库数据同步更新。
- 当玩家退出游戏时,缓存中的数据将被删除。
场景二 玩家跨地域登录。
- 首先,系统会检查玩家是否在其他地区登录。如果是,则进入第 2 步。如果否,则进入第 3 步。
- 玩家的角色数据被写回数据库,并在玩家注销时从缓存中删除。
- 数据库代理从数据库中读取角色数据。
数据库代理将角色数据插入到缓存中。 - 从缓存中读取的角色数据用于计算。
- 当数据发生变化时,缓存数据和数据库数据同步更新。
- 当玩家退出游戏时,缓存中的数据将被删除。
方案二:区域数据库实时同步
各区域数据库实时同步。您可以使用 Message Service 或Alibaba Cloud DTS来完成此操作。每个区域数据库都存储所有玩家的数据。
优点:
玩家可以从不同的地区玩游戏,他们的数据不需要迁移。所有区域都支持本地数据读写。
缺点:
异步数据同步会产生数据不一致。如果玩家使用 VPN 访问游戏,则 VPN 暂时断开连接可能会导致玩家在另一个区域重新登录。如果数据同步消息丢失或延迟,玩家再次登录时读取的数据可能不是最新的。
各个区域包含所有玩家数据,因此实时同步可能会给数据库带来很大压力。区域数据库之间的实时同步需要大量的跨区域专线带宽。
方案三:跨区域数据更新
当玩家从不同的区域登录时,玩家的本地服务器必须远程读取战斗数据。战斗结果调用API触发本地服务器数据更新。
优点:
对于同一区域的玩家,角色数据从最近的本地节点读取/写入。
缺点:
实现逻辑复杂。所有的游戏结果都必须抽象到一个接口,数据由原始服务器接口集中更改。
方案四:远程数据迁移
当玩家从不同的区域登录时,玩家数据从玩家之前的服务器远程迁移。每次玩家登录时,系统都要检查是否需要进行数据迁移。
游戏本地化解决方案
游戏本土化是游戏进军海外市场的重要考量因素。游戏无论是在海外发布还是希望扩展到新的地区,都必须注意本地化工作。一般的做法是构建一个标准的客户端安装包,里面包含几个基础素材包,不同语言的美术素材包,以及一些程序素材。这允许根据手机的语言版本动态呈现游戏。
常见的安装策略有以下三种:
- 客户端安装包下载后,用户手动设置语言版本。这么大的包里面包含各种语言包,支持一键选择语言。
- 当游戏在客户端安装时,它会检测移动设备使用的语言以动态选择要安装的语言版本。这些安装包一般都有内置的默认语言,如果需要其他语言,需要从网上下载语言包。
- 不同语言版本的客户端安装包提交到应用商店。然后,不同的安装包版本服务于不同的区域。每个安装包都必须定制。