—— 青亭网

分享
原创 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)

* 文章为作者独立观点,不代表数艺网立场转载须知
广告 欺诈 淫秽 色情 侵权 骚扰、辱骂、歧视 敏感 违法 犯罪 反动、政治 其它
数艺网是一个信息获取、分享及传播的平台,我们尊重和鼓励数艺网用户创作的内容,认识到保护知识产权对数艺网生存与发展的重要性,承诺将保护知识产权作为数艺网运营的基本原则之一。
本条款原则如下:
1. 用户在数艺网上发表的全部原创内容(包括但不仅限于文章、案例/项目和评论),著作权均归用户本人所有。用户可授权第三方以任何方式使用,不需要得到数艺网的同意。
2. 数艺网上可由多人参与编辑的内容,包括但不限于案例/作品的认领、企业/机构的认领,所有参与编辑者均同意,相关知识产权归数艺网所有。
3. 数艺网提供的网络服务中包含的标识、版面设计、排版方式、文本、图片、图形等均受著作权、商标权及其它法律保护,未经相关权利人(含数艺网及其他原始权利人)同意,上述内容均不得在任何平台被直接或间接发布、使用、出于发布或使用目的的改写或再发行,或被用于其他任何商业目的。
4. 为了促进知识的分享和传播,用户将其在数艺网上发表的全部内容,授予数艺网免费的、不可撤销的、非独家使用许可,数艺网有权将该内容用于数艺网各种形态的产品和服务上,包括但不限于网站以及发表的应用或其他互联网产品。
5. 第三方若出于非商业目的,将用户在数艺网上发表的内容转载在数艺网之外的地方,应当在作品的正文开头的显著位置注明原作者姓名(或原作者在数艺网上使用的帐号名称),给出原始链接,注明「发表于数艺网」,并不得对作品进行修改演绎。若需要对作品进行修改,或用于商业目的,第三方应当联系用户获得单独授权,按照用户规定的方式使用该内容。
6. 数艺网为用户提供「保留所有权利,禁止转载」的选项。除非获得原作者的单独授权,任何第三方不得转载标注了「禁止转载」的内容,否则均视为侵权。
7. 在数艺网上传或发表的内容,用户应保证其为著作权人或已取得合法授权,并且该内容不会侵犯任何第三方的合法权益。如果第三方提出关于著作权的异议,数艺网有权根据实际情况删除相关的内容,且有权追究用户的法律责任。给数艺网或任何第三方造成损失的,用户应负责全额赔偿。
8. 如果任何第三方侵犯了数艺网用户相关的权利,用户同意授权数艺网或其指定的代理人代表数艺网自身或用户对该第三方提出警告、投诉、发起行政执法、诉讼、进行上诉,或谈判和解,并且用户同意在数艺网认为必要的情况下参与共同维权。
9. 数艺网有权但无义务对用户发布的内容进行审核,有权根据相关证据结合《侵权责任法》、《信息网络传播权保护条例》等法律法规及数艺网社区管理规定对侵权信息进行处理。
侵权举报
1.处理原则
数艺网作为新媒体艺术领域的分享交流平台,高度重视自由表达和个人、机构正当权利的平衡。依照法律规定删除违法信息是数艺网社区的法定义务,数艺网社区亦未与任何中介机构合作开展此项业务。
2.受理范围
受理数艺网社区内侵犯机构或个人合法权益的侵权举报,包括但不限于涉及个人隐私、造谣与诽谤、商业侵权。
a.涉及个人隐私:发布内容中直接涉及身份信息,如个人姓名、家庭住址、身份证号码、工作单位、私人电话等详细个人隐私;
b.造谣、诽谤:发布内容中指名道姓(包括自然人和机构)的直接谩骂、侮辱、虚构中伤、恶意诽谤等;
c.商业侵权:泄露机构商业机密及其他根据保密协议不能公开讨论的内容。
3.举报条件
用户在数艺网发表的内容仅表明其个人的立场和观点,并不代表数艺网的立场或观点。如果个人或机构发现数艺网上存在侵犯自身合法权益的内容,可以先尝试与作者取得联系,通过沟通协商解决问题。如您无法联系到作者,或无法通过与作者沟通解决问题,您可通过点击内容下方的举报按钮来向数艺网平台进行投诉。为了保证问题能够及时有效地处理,请务必提交真实有效、完整清晰的材料,否则投诉将无法受理。您需要向数艺网提供的投诉材料包括:
a. 权利人对涉嫌侵权内容拥有商标权、著作权和/或其他依法可以行使权利的权属证明,权属证明通常是营业执照或组织机构代码证;
b. 完整填写的通知书;附供下载的:侵权投诉通知书;
c. 举报人的身份证明,身份证明可以是身份证或护照;
d. 如果举报人非权利人,请举报人提供代表权利人进行举报的书面授权证明。
e. 为确保投诉材料的真实性,在侵权举报中,您还需要签署以下法律声明:
(1) 我本人为所举报内容的合法权利人;
(2) 我举报的发布在数艺网社区中的内容侵犯了本人相应的合法权益;
(3) 如果本侵权举报内容不完全属实,本人将承担由此产生的一切法律责任,并承担和赔偿数艺网因根据投诉人的通知书对相关帐号的处理而造成的任何损失,包括但不限于知乎因向被投诉方赔偿而产生的损失及数艺网名誉、商誉损害等。
4.处理流程
出于网络平台的监督属性,并非所有申请都必须受理。数艺网自收到举报的七个工作日内处理完毕并给出回复。处理期间,不提供任何电话、邮件及其他方式的查询服务。 出现数艺网已经删除或处理的内容,但是百度、谷歌等搜索引擎依然可以搜索到的现象,是因为百度、谷歌等搜索引擎自带缓存,此类问题数艺网无权也无法处理,因此相关申请不予受理。您可以自行联系搜索引擎服务商进行处理。 此为数艺网社区唯一的官方侵权投诉渠道,暂不提供其他方式处理此业务。 用户在数艺网中的商业行为引发的法律纠纷,由交易双方自行处理,与数艺网无关。
免责申明
1.数艺网不能对用户发表的回答或评论的正确性进行保证。
2.用户在数艺网发表的内容仅表明其个人的立场和观点,并不代表数艺网的立场或观点。作为内容的发表者,需自行对所发表内容负责,因所发表内容引发的一切纠纷,由该内容的发表者承担全部法律及连带责任。数艺网不承担任何法律及连带责任。
3.数艺网不保证网络服务一定能满足用户的要求,也不保证网络服务不会中断,对网络服务的及时性、安全性、准确性也都不作保证。
4.对于因不可抗力或数艺网不能控制的原因造成的网络服务中断或其它缺陷,数艺网不承担任何责任,但将尽力减少因此而给用户造成的损失和影响。
协议修改
1.根据互联网的发展和有关法律、法规及规范性文件的变化,或者因业务发展需要,数艺网有权对本协议的条款作出修改或变更,一旦本协议的内容发生变动,数艺网将会直接在数艺网网站上公布修改之后的协议内容,该公布行为视为数艺网已经通知用户修改内容。数艺网也可采用电子邮件或私信的传送方式,提示用户协议条款的修改、服务变更、或其它重要事项。
2.如果不同意数艺网对本协议相关条款所做的修改,用户有权并应当停止使用数艺网。如果用户继续使用数艺网,则视为用户接受数艺网对本协议相关条款所做的修改。
阅读并同意此认领协议方可认领案例
*认领案例的操作记录无法自行删除,请务必确保您参与该案例身份的真实性