我正在做一个简单的网络游戏,它将在一个彩带和他们的观众之间播放。游戏会话将由彩带发起,他们创建游戏,然后共享一个链接供所有观众连接。一场比赛将持续10分钟。
我的前端是一个SPA,它将使用REST与后端对话。
我想把它部署到AWS,因为他们有吸引力的按需计算选项和定价。但是,我想在维护可伸缩性选项的同时,利用我对前端后端预期交互的先验知识,为低成本进行优化。
假设
在单个游戏过程中,需要维护以下状态:
架构
我正试图找出这样一个应用程序的最佳架构。
最初,我计划有一个节点服务器,并将状态保存在内存中,但这是不可伸缩的,如果游戏不玩,也可能会很昂贵。如果我尝试在弹性豆杆上部署这个,我相信没有办法保证游戏会话中的所有玩家都会被路由到同一个服务器上。
因此,从我收集到的信息来看,最佳的方法可能是将所有状态存储在DynamoDB中,使用lambda函数实现完整的REST,然后有一个周期性的lambda函数调用(例如每秒1次),它将更新查看者的投票统计数据,并在进行转弯时更新游戏状态(这个周期性任务可能也可以在单个EC2实例上处理,您喜欢这样做吗?)
所以我要问你的问题是:
发布于 2021-01-09 17:02:18
服务器:Rest可以使用Api + Lambda构建,而不是ECS/ElasticBeanStack上的节点服务器,同时考虑到成本和规模。即使在ECS中设置简单的节点服务器,存储状态也必须从服务器卸载到外部数据存储,尽管使用弹性负载平衡器粘性会话,您可以将请求从一个游戏/用户转发到同一台服务器。
数据存储:用于存储状态和统计数据,考虑到不需要长期存储,我可以看到两个选项。
大多数情况下,解决方案都是DynamoDb和Redis的结合。
https://stackoverflow.com/questions/65644577
复制相似问题