如何扩展NodeJS状态应用程序

Telokis

我目前正在开发基于Web的MMORPG游戏,并希望基于Docker和DigitalOcean Droplet设置自动缩放策略。

但是,我想知道如何才能做到这一点:

我的游戏服务器必须可以在不同的Docker容器中拆分,每个游戏服务器实例的行为都应该像是一个巨大的游戏服务器一样。这意味着在一个游戏中进行的每个修改(角色移动)也应该在其他所有游戏服务器中进行镜像。

我试图使它工作(至少在概念上),但是找不到正确同步所有实例的方法。我应该只使用主机广播事件还是有替代方法?

我在想关于我的MySQL数据库的同一件事:由于每个游戏服务器都必须从数据库读取数据/向数据库写入数据,因此随着游戏变得越来越大,我如何使其正确缩放?我能想到的最好的解决方案是将数据库保留在非常强大的单个服务器上

我知道,如果所有游戏服务器不必“共享”它们的状态,这可能很容易,但这主要是为了让我能够在活动突然增加的情况下快速扩展。

(将有不同的“全局”游戏服务器,如A,B,C ...,但每个全局游戏服务器在后台应由运行“真实”游戏服务器的1-X docker容器组成,这样, “全球”游戏服务器只是一个概念)

马里奥

您指出的问题过于笼统,很难给出具体的答案。但是,请允许我鲁re,并为您提供一些通用的缩放建议:

  • 从数据库中删除计数器。而是使用自动递增ID的主键,尝试分配随机UUID。

  • 更改必须通过一个自包含的数据针对一个中心点进行验证的数据。例如,对于身份验证,请使用可被任何主机验证的JSON Web令牌,而不是在数据库中包含用户凭据。

  • 使用诸如“一致性哈希”之类的技术来平衡负载,而无需负载均衡器。当然,请使用散布良好的散列函数,以避免/最大程度地减少冲突。

以上建议基本上是关于从尽可能多的方面将设计更改为从有状态迁移到无状态的建议。无论如何,如果您需要提供有状态部分,请尝试猜测哪些实体将有更多机会共享有状态数据并在相同(或接近服务器)中分配它们。例如,如果您的游戏中有城市,请尝试在同一服务器上分配同一城市中的用户,因为与不同城市中的用户相比,他们更愿意在它们之间进行交互(并共享有状态数据)。

当然,如果城市太大并且非常拥挤,您可能需要将城市划分为更多服务器,以避免服务器超负荷。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过应用内评论扩展 TWA 应用程序?

如何使用Spring MVC扩展具有Tomcat和无状态J2EE架构的应用程序?

基于现有应用程序的iOS Build应用程序扩展。如何避免代码重复?

如何在Rails应用程序中扩展Time类?

如何扩展(或启用云)我的Android应用程序

如何在Xamarin Android中扩展应用程序类

如何使用pip处理python应用程序的C扩展?

如何垂直自动扩展 Web 应用程序

如何编写通过插件可扩展的ruby应用程序

如何使用Docker正确部署和扩展应用程序

如何在WatchKit扩展应用程序中实现SpriteKit?

如何创建React Native iOS共享扩展应用程序

如何为较低的ios版本禁用应用程序扩展?

如何从应用程序中删除iOS Today扩展

如何扩展CPU绑定的Twisted应用程序?

如何删除应用程序菜单 GNOME 扩展?

如何在extjs应用程序中配置可扩展

如何从 iOs 中的扩展打开基础应用程序

IBM wsadmin-如何获取每个应用程序服务器的应用程序状态

我如何知道要显示或不显示通知的Android应用程序的应用程序状态?

在 Xamarin.Forms 中导航或关闭应用程序时如何保存应用程序的状态?

当android系统杀死应用程序时,如何保存我的应用程序状态?

如何检测黑莓应用程序何时处于活动状态?

如何监视C#Windows应用程序的状态?

Spring Boot如何决定应用程序的活动状态?

退出后如何设置GTK应用程序的状态代码?

Redux - 如何从子组件访问应用程序状态?

如何在AJAX调用中查询应用程序状态?

如何禁用特定应用程序的状态栏