公司:Niantic
行业:移动游戏
Niantic 是一家移动游戏开发公司,以开发增强现实游戏而闻名,例如 Ingress 和 Pokémon GO。
当数千名 Pokémon GO 玩家参与热门突袭战斗时,Niantic 的 Google Cloud 服务器在玩家组队和加入队伍的准备阶段不堪重负,导致延迟。Niantic 需要一个快速、响应迅速的数据库,能够快速扩展以适应 Pokémon GO 活动的激增。
为了支持玩家活动的激增,Niantic 在 Redis Enterprise 集群中缓存了大量游戏数据。所有 Pokémon GO 服务器都可以访问这些共享数据,从而降低延迟并提高多人突袭活动的性能。
Redis Enterprise 比基于磁盘的数据库管理系统所需的开销少得多,这使 Niantic 能够平衡服务器负载并为玩家提供出色的体验。突袭准备阶段的平均延迟下降了 75%。
即时响应时间和超快性能对于享受电子游戏至关重要。即使在高峰期,例如玩家组队进行突袭战斗时,延迟也是不可接受的,这些突袭战斗已经成为 Pokémon GO 社区的热门活动。
在这些战斗中,玩家在 Pokémon 道馆联手对抗强大且通常稀有的 Pokémon。无论何时,只要玩家靠近拥有活跃突袭的道馆,他们就可以加入突袭大厅,为即将到来的战斗做好准备。
当 Pokémon GO 用户为战斗做准备时,Niantic 的技术团队(游戏的开发人员)必须为这些活动背后的服务器的巨大流量激增做好准备。Pokémon GO 在多服务器环境中运行。在正常的游戏活动中,玩家均匀分布在所有服务器上。但是,在突袭期间,同一道馆中的玩家需要在同一服务器上才能访问存储在该服务器内存中的游戏数据。
“需要在玩家组之间共享大量数据,”Niantic 软件工程师大星解释说。“一旦小组组建完成,小组中的所有成员都需要被转移到一个能够为该小组提供服务的服务器。”
热门道馆会吸引更多玩家,导致托管这些道馆的服务器的流量增加。在某些情况下,这会导致同一突袭中的玩家以及不在突袭但位于同一服务器上的玩家出现严重延迟,最终导致游戏无法玩。“没有单个服务器能够处理如此高的流量负载,这使得很难提供正面的玩家体验,”兴补充道。
最初,Niantic 设计的 Pokémon GO 游戏围绕着有状态架构,这使得服务器的扩展和重启变得困难。兴和 Niantic 架构团队的其他成员确定,如果他们能够使 Pokémon GO 服务器无状态,他们将能够更快地进行扩展和缩减。“在之前的架构中,为了扩展集群,我们必须逐个隔离服务器,并等待现有的多人游戏会话过期,”他解释说。“这可能需要长达 30 分钟才能重启服务器并添加更多玩家。对每个服务器都这样做会带来更高的运营成本。”
Niantic 需要一个快速、响应迅速且能够快速扩展以适应 Pokémon GO 活动激增的数据库平台。兴和他的团队选择了 Google Cloud 上的 Redis Enterprise,因为它能够实现低延迟和高可用性,并提供零停机时间扩展。标准功能包括持久性、内存中复制、即时故障转移、备份和灾难恢复。
“最初,我们为现有的 Google Cloud 服务器考虑了内存中解决方案,”兴继续说道。“然而,Google Cloud Memorystore 存在一些缺点,并且增加更多 Google Cloud 服务器来处理突袭小组的成本很高。添加 Redis 集群比部署额外的 Google Cloud 服务器便宜。我们可以以合理的价格部署一个大型集群。”
在 Niantic 的新突袭架构中,游戏集群中的所有服务器都可以访问存储在集中式 Redis 缓存中的数据——这是一个临时存储位置,用于重复访问相同的信息。同一道馆中的玩家无需位于同一服务器上即可访问共享数据。
当玩家聚集在突袭大厅时,Niantic 会记录谁加入了哪个小组,加入时间,以及玩家之间通过之前的社交互动建立的联系。这些信息以及关键时间戳作为 JavaScript 对象表示法 (JSON) 键存储在 Redis Enterprise 中。缓存还维护有关每个游戏社交功能的数据,以及有关玩家位置、倾向和表现的统计数据。
内存中缓存是一种技术,将频繁访问的数据存储在内存中,而不是从磁盘或远程存储中检索。这种技术通过减少从存储设备获取数据所需的时间来提高应用程序性能。在游戏行业中,缓存是一种高效的方式,可以快速有效地提供内容,例如图形、图片、缩略图、音乐、标签、元数据和标签。
内存中缓存非常适合 Pokémon GO 突袭准备阶段,因为客户端设备和服务器之间交换的实时数据仅在突袭游戏的 10 或 15 分钟内有意义。“一旦游戏结束,玩家获得奖励,数据就会过期,”兴说。“无需持久数据存储。”
这种方法还确保了更好的规模经济。玩家可以连接到任何服务器,无论道馆托管在何处,这使服务器能够在热门突袭活动期间保持更高的查询性能。
“将突袭活动迁移到 Redis Enterprise 效率更高,”兴总结道。“Redis Enterprise 非常可靠,并且具有非常快速的读写访问速度。此外,通过将数据分成多个分片,多台机器可以线性地处理请求。”
自从部署 Redis Enterprise 以来,服务器热点已大大减少。在突袭准备阶段,大多数服务器承载着相对稳定的流量。记录的最大延迟从超过 1 秒降至约 250 毫秒——降低了 75%。
由于服务器更加可靠,突袭活动期间烦人的延迟和服务器“故障”已大大减少。Redis Enterprise 为这些活动提供了更稳定的体验,并节省了运营和维护成本,这些成本可以投入到其他领域以改善整体游戏体验。
“凭借其出色的缓存功能,Redis Enterprise 为我们提供了一个高性能、高可靠性和经济高效的替代方案,”兴总结道。“Redis 是缓存领域的领导者。高吞吐量、低延迟和内置分析使我们能够为 Pokémon GO 社区提供丰富的游戏体验。”