服务
关于
CloudProse博客

在AWS中为PokémonGo构建架构

查理·古斯(Charlie Guse)精选
查理·古斯 | 2016年8月9日

2016年8月9日,星期二

如果您住在公园附近的任何地方,那么过去几周您可能突然开始看到人们像这样站在附近。

现在已经不是什么大问题了,但是当我拍摄照片时,他们都在等待游戏加载。或者其中一些人可能一直在等待PokéStop工作!

确实,神奇宝贝Go已经实现了几乎所有玩过神奇宝贝的人都想做的事情: 真实世界 赶上神奇宝贝。

您可能已经注意到,《神奇宝贝Go》由于其疯狂的流行而出现了很多性能问题。现在它是如此流行,甚至亚马逊的CTO Werner Vogels也在玩游戏。

让我们考虑一下如何使用AWS来构建易于扩展的架构。 AWS Lambda可能对此类架构有很大的帮助。如果您还没有听说过,Lambda是无服务器计算平台。这意味着作为开发人员,您无需担心服务器,除了:

  • 您希望函数在调用超时之前运行多长时间
  • 您要分配给该函数多少内存

您需要支付调用运行的时间(以100毫秒为增量),分配的内存量以及发出的请求数。很棒的是,如果没有人遇到Lambda,您将无需为此付费!

Lambda被构建为无服务器计算范例的“平台”,而不是用于构建应用程序的完整服务。有帮助的框架,每天都在创建更多框架。我们一直在使用 无服务器{:target =““ _ blank”}”作为Lambda项目的goto框架。

Lambda如何帮助神奇宝贝Go之类的游戏?好吧,由于Lambda的本质,您无需担心实例大小是否足够大或用户数量是否会随机增加(假设Lambda函数调用的任何API都可以处理)。让我们为《神奇宝贝Go》这样的游戏制定一个计划。

以上是一个 Cloudcraft{:target =“ _ blank”}图显示了基本基础结构的外观。

您将在API Gateway上设置端点,并根据发出的请求将它们路由到不同的Lambda函数。这些请求将击中DynamoDB以获取并设置播放器或播放器周围状态的状态。您可以在DynamoDB中使用地理空间索引来查找现实世界中的可收集对象。然后可以通过以下任一方式保护请求 Auth0{:target =”空白”}或 亚马逊Cognito{:target =”空白”}。如果您不希望将任何静态内容存储在应用程序中(想到有关游戏和公司的新闻),则可以将其与CloudFront和S3一起交付。

关于此基础架构的最好之处在于,Lambda会随着更多用户的使用而自动扩展。您将需要 采取措施扩展DynamoDB{:target =“ _ blank”},您将需要注意对API或其他基础架构的任何其他依赖关系,这些依赖关系无法像Lambda那样按请求进行扩展。我们构建的架构每秒支持数百至数千个请求,而无需担心“它会扩展”或“尖峰负载是什么”问题。真正释放!

根据我作为玩家所见过的《PokémonGo》,几乎可以肯定它是基于与 入口{:target =“ _ blank”}(另一个Niantic游戏)已建立。这个堆栈比Lambda早了几年,但是新游戏的问世可以考虑这个框架。这样就可以降低成本,因为只有在有人在玩时才需要付费,并且当您手里拿着下一本神奇宝贝Go时,您的服务器(或缺少服务器)将能够应对任何高峰。

赶上快乐!

作者
查理·古斯(Charlie Guse)精选
查理·古斯