Pokémon GO 也就是《精灵宝可梦》,任天堂和谷歌 Niantic Labs 合作开发的现实增强(AR)游戏,也是谷歌云罕见的支持的大型的游戏,就目前来看,Pokémon GO目前在线用户可以达到数百万人次,谷歌云平台是如何支持 Pokémon GO 容纳如此多的用户的呢? Pokémon GO 的扩展
Pokémon GO 的扩展性主要是基于 Google Kubernetes Engine(谷歌云上的kubernetes的全面托管工具) 和 Cloud Spanner(全球分布式企业级数据库),前端服务托管在 GKE上,可以通过 GKE 这个托管平台轻松扩展结点,直接使用谷歌云平台上的管理k8s集群所需的工具。目前在流量庞大的时间点,会有数千个专门为 Pokémon GO 运行的 kubernetes 节点,以及运行有助于增强游戏体验的各种微服务的 GKE 节点,在特定时间支撑世界各地的数百万玩家,与其他大型多人在线游戏不同的是, Pokémon GO 上的游戏玩家共享一个“realm”,玩家可以相互交互并共享相同的游戏状态。
除了GKE外,谷歌云平台提供 Goggle Cloud Monitoring来搜索日志、构建仪表板,并在出现紧急情况时发出警报。同时还有大型用户数据库,在 Pokémon GO 刚发行的时候,使用的数据库为 Google Datastore,这是个简单的入门数据库,管理简单。随着游戏的成熟,团队开始使用 Cloud Spanner,方便扩展,且可以提供一致索引,允许团队使用带有主键和辅助键的更复杂的数据库架构,且 Cloud Spanner 是具有完全一致性的关系型数据库。 后台工作流向
当一名用户打开 Pokémon GO 的时候,会通过 Cloud Load Balancing 收到用户请求,收到后存储在 Cloud Storage 中的所有静态媒体都会在应用程序第一次启动时下载到手机。同时 Cloud Load Balancing 会启用 Cloud CDN缓存和提供内容。当来自用户手机的流量到达 Global Load Balancer 后,将请求发送到 NGINX 反向代理,然后反向代理将流量发送到前端游戏服务。
集群中的第三个 pod 是空间查询后端。此服务保留按位置分片的缓存。然后,此缓存和服务决定地图上显示哪些 Pokémon、用户周围有哪些体育馆和 PokéStops、用户所在的时区,以及基本上任何其他基于位置的功能。前端管理玩家及其与游戏的交互,而空间查询后端处理地图。前端从空间查询后端作业中检索信息以发送回用户。