资讯
展览资讯 大型展会 灯光节 大型盛典 赛事 中标捷报 产品快讯 热门话题 艺术节 活动 演出 新闻 数艺报道 俱乐部签约
观点
大咖专访 观点洞察 书籍推荐 吐槽 设计观点 企业访谈 问答 趋势创新 论文 职场方法 薪资报价 数艺专访
幕后
幕后故事 团队访谈 经验分享 解密 评测 数艺访谈
干货
设计方案 策划方案 素材资源 教程 文案资源 PPT下载 入门宝典 作品合集 产品手册 电子书 项目对接
  • 0
  • 0
  • 0

分享

每秒百万次访问,每天10TB数据,AR游戏《精灵宝可梦Go》的背后

原创 2021-12-02

Esther|编辑 

据Statista统计数据,截止今年1月,风靡全球的LBS AR游戏《精灵宝可梦Go》仅在iPhone端,日活用户就有大约82.7万人。而在一些活动期间,该作的同时在线人数甚至可达数百万级,自上线以来持续吸引了大批忠实玩家。

与吃鸡等MMORPG游戏不同,《精灵宝可梦Go》不仅需要解决同时多人在线的问题,还需要确保基于线下场景的实时AR内容能在多台设备上同步。考虑到该作在全球的大规模覆盖率,大量的LBS AR数据为游戏背后的技术带来很大挑战。那么,《精灵宝可梦Go》的服务器是如何同时承载数百万用户的呢?

据青亭网了解,《精灵宝可梦Go》基于谷歌云服务,因此数据的处理、传输、渲染等流程在云端平台完成,保证稳定性的同时,也允许LBS AR应用场景足够灵活。

近期,为了了解这款游戏背后的技术,谷歌采访到Niantic高级工程经理James Prompanya,在采访中James为我们详细讲述了游戏后台是如何使用Google Cloud工具来支持大量用户流量,包括管理和维护大规模用户端所采用的系统架构,以及其背后发生的故事等等。

Pormpanya表示:在“社区日”和“精灵宝可梦Go Fest 2021”等活动期间,游戏的流量从40万人/秒上升至近100万人/秒。为了承载不断增加的同时在线玩家,Niantic采用了GKE(谷歌容器引擎)、谷歌全球分布式资料托管服务/资料库Cloud Spanner等技术,而且在线上获得了谷歌工程师的技术支持。

注:GKE是谷歌旗下的一个Kubernetes管理平台,主要在谷歌云平台上运行。而Kubernetes最初由谷歌工程师开发,后来在2014年开源,它是一种容器编排平台,用于调度、自动部署、管理和扩展容器化应用。谷歌Spanner是一个分布式数据库,专为游戏状态储存而设计,可支撑全球规模的多人游戏。

谷歌:请介绍一下《精灵宝可梦Go》?

James:这是一款鼓励玩家去户外活动的LBS AR游戏,与传统的手游有很大区别,除了在游戏中互动外,玩家还可以通过线下的社区活动来社交。在相同的地理位置,多名玩家可以一起抓同一个宝可梦,体验共享的AR场景。

Niantic会定期举办社区日、GO Fest、限时突袭等活动。通常,活动上线的区域会同时涌入大量玩家,访问量从每秒40万次上升至每秒100万次。

谷歌:在GO Fest期间,游戏开发团队如何扩展后端规模,以处理流量高峰?

James:我们采用多种托管服务来处理增加的计算流量,主要包括GKE和谷歌Cloud Spanner。《精灵宝可梦Go》的前端服务托管在GKE上,GKE基于谷歌云服务(Google Cloud),管理/扩展节点足够简单。

此外,谷歌工程团队还会在线上为Niantic提供帮助,共同监控和解决《精灵宝可梦Go》在大规模活动期间可能产生的问题。

实际上,在任何时间《精灵宝可梦Go》都有可能涌入大量用户,甚至需要约5000个Spanner节点来处理。除此之外,我们还采用了数千个专门运行《精灵宝可梦Go》的Kubernetes节点。同时,还使用额外的GKE节点来支持游戏的微服务,提升体验感。

这些节点同时运行,可支持全球数百万在线玩家,让他们实时共享同样的LBS AR游戏内容。

谷歌:《精灵宝可梦Go》从一开始就在使用Spanner服务吗?还是在广受用户欢迎后,才开始在游戏架构中加入Spanner服务?

James:最初,《精灵宝可梦Go》的数据托管在Google Cloud Datastore(谷歌云数据仓库)中,这项云服务的优势在于简单易入门,不需要开发者去管理额外的架构。

随着玩家规模逐渐增长,我们希望进一步控制游戏数据库的大小和规模,于是便采用谷歌Cloud Spanner服务。同时,我们也很喜欢Spanner提供的连贯索引功能,它让运行更加复杂的数据库模式变得足够方便。

谷歌:加入我是一名游戏玩家,正在玩《精灵宝可梦Go》。当我打开该应用,开始捕捉宝可梦,这一过程中背后都发生了什么?

James:当玩家捕捉到一只宝可梦,游戏服务器会通过Cloud Load Balancing(全分布式负载平衡解决方案,用于避免拥塞、降低延迟、提升安全性、降低成本)收到相关请求。

此外,《精灵宝可梦Go》首次启动后,储存在Cloud Storage中的全部静态媒体都会载入到玩家手机中。而且,Cloud Load Balancing方案还启动了云内容分发网络(CDN),用于缓存和运行游戏内容。

当玩家手机的访问流量到达Global Load Balancer后,系统会向NGINX(高性能HTTP和反向代理web服务器)反向代理发送请求。接着,反向代理将流量发送到游戏服务器的前端。

Kubernetes还有一个重要部分是空间查询后端(Spatial Query Backend),这项服务会保存基于共享空间的缓存,并用这些缓存来计算地图上显示哪些宝可梦、道馆和补给站(PokeStops)、玩家的时区等任何基于地理位置的内容。

简单来讲,大概是前端负责管理玩家,以及玩家和游戏之间的交互,而空间查询后端则负责地图。同时,前端从空间查询后端获取信息,并发送给用户。

谷歌:那在抓宝可梦时又发生了什么?

James:玩家抓住宝可梦后,系统会通过API从GKE前端向Spanner发送事件。当你更新道馆和补给站地图时,系统请求会发送更新的缓存,并转发至空间查询后端。

Spanner中储存的数据是连贯的,因此在收到缓存更新后,内存中的空间数据也会更新,用于处理之后前端发送的请求。然后,前端再次从空间查询后端获取信息,发送回用户。

谷歌:那么,如何确保统一地理位置的玩家,能够看到相同的宝可梦数据,并保持相对同步呢?尤其是在活动期间。

James:《精灵宝可梦Go》服务器中的一切数据都是确定的,因此,多个客户端在同一个物理位置可以查看到相同的数据,即使这些玩家使用不同型号的手机。而在在线人数多的活动期间,游戏将处理大量缓存和时间同步,所以全部服务器需要同步更新设置变化和事件发生时间,为多名玩家提供共享AR的体验。

谷歌:玩家在玩《精灵宝可梦Go》时,服务器一定产生了大量数据,那么Niantic的数据分析流程是怎样的,都分析哪些数据?

James:是的,这款游戏每天可生成5-10TB数据,我们会将这些数据储存在BigQuery和BigTable中。

团队中的数据科学团队会关注游戏中的事件数据,用于分析玩家行为,以及验证宝可梦地图布局的效果符合预期,或用于市场报告等等。

除了BigQuery外,我们还会使用Dataflow作为数据处理引擎,批量处理储存在Bigtable中的玩家日志。

同时,还会处理一些串流数据,包括检测作弊、寻找和相应不正常玩家信号。

为了获取全球地理位置和生态信息(用于在地图上设置补给站和道馆),我们从OpenStreetMap、美国地质调查局、Niantic Wayfarer地理数据众包平台等数据库中获取信息,未来还将构建一个实时动态更新的全球地图。

谷歌:未来,《精灵宝可梦Go》的活动规模可能会继续扩大,如果流量高达数百万用户/秒,那么系统服务器将如何扩展?

James:随着活动规模扩大,系统中数据管道(pub sub、BigQuery Streaming等等)的负载也将增加,我们需要做的就是确保留出预期的配额。

参考:

https://cloud.google.com/blog/topics/developers-practitioners/how-pok%25C3%25A9mon-go-scales-millions-requests

( END)

 
每天五分钟,轻松了解前沿科技。    
         —— 青亭网  
阅读原文

* 文章为作者独立观点,不代表数艺网立场转载须知

本文内容由数艺网收录采集自微信公众号青亭网 ,并经数艺网进行了排版优化。转载此文章请在文章开头和结尾标注“作者”、“来源:数艺网” 并附上本页链接: 如您不希望被数艺网所收录,感觉到侵犯到了您的权益,请及时告知数艺网,我们表示诚挚的歉意,并及时处理或删除。

数字媒体艺术 新媒体艺术 科技艺术 作品分享 科技前沿

14295 举报
  0
登录| 注册 后参与评论