可扩展的微服务架构中的数据通信

时间:2017-04-03 14:19:01

标签: performance amazon-web-services architecture scalability microservices

我们正在开展一个项目,以获得有关微服务和自动可扩展架构的一些知识。在这个项目中,我们正在构建一个小型游戏,用户可以在亚马逊网络服务上托管飞机并在线击落其他玩家。游戏的持续时间应该是大约10分钟,一百万个游戏应该(理论上)能够同时玩,并且大约一千个玩家应该能够在一个游戏中玩。因此,应用程序必须真正可扩展。

我们现在在架构中遇到了困难。我们希望服务器计算玩家的位置。这意味着服务器获取用于重新计算位置的键输入请求。问题是,因为应用程序是可伸缩的,并且不是只有一个服务器在进行所有计算并保存所有数据,所以输入事件可能最终会在不同的位置。我们希望不断将所有位置写入数据库并将其读回客户端的速度太慢,也不够可扩展。此外,我们也不想为单个游戏提供专用服务器,因为这样可以减少计算能力(和钱)

我们通过其他游戏架构搜索不同的实现,例如消息,但无济于事,我们找不到任何适合的方法。我们想知道是否有任何一种模式可以使这种实现工作?我们真正需要的是对一些可能模式的方向感。

2 个答案:

答案 0 :(得分:1)

尝试使用ElasticCache http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/WhatIs.html

这使得在节点之间共享位置变得容易 他们讨论将其用于评分表,但也可以将其用于位置数据

将ElasticCache与自动扩展http://docs.aws.amazon.com/autoscaling/latest/userguide/WhatIsAutoScaling.html结合使用,您应该能够根据需求扩展环境

答案 1 :(得分:1)

您的示例听起来像Apache Kafka等流媒体平台的主要用例。它本身是一个可扩展的集群,充当一个大型事件队列(您的游戏输入),这些事件被存储并可供流消费者(所有游戏服务器)使用。这具有非常高的性能,并且应该能够以低延迟每秒处理数百万个输入。

您还应该确保将您的游戏世界分成更广泛的“区域”,以确保并非每个服务器都需要来自所有其他服务器的数据。我确信在任何时候都没有玩家在屏幕上拥有所有其他玩家。

查看Kafka examples

performance measurements与传统数据库进行比较。