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