2016-11-29 102 views
0

我选择使用docker与node-js和mongoDB来制作游戏,并将所有游戏部分(战斗,聊天,资源等)设置到不同的服务器中,以便每个部分都有它的自己的过程,因为例如我的资源服务器将运行很多,因为它会每秒钟完成每个用户的资源计算,并处理来自其他服务器的请求,例如用户有足够的资源来构建建筑物或者太多的资源,玩家将失去如果受到攻击等mongoDB多个实例或多个数据库

对于我的alpha和beta版本,我打算在运行一台服务器,将运行我的比赛的所有部分,但方式我现在,每天做节有它自己的mongodb实例,所以我有resourcesDB,mainDB(用户信息,登录信息和所有的实例不会有很多集合,例如resourcesDB只有两个集合,资源集合,每个用户将有一个文档与资源相关的东西,以及日志集合,将存储所有用户的使用(构建升级,战斗失败等)

我已阅读关于同一台服务器上的多个实例,他们都表示,它不是最好的办法,因为它会影响我的表现,在未来我计划将我的所有部分分开放入不同的服务器中,以便每个部分都有自己的服务器和数据库服务器(如果需要)

  1. 我应该建立1个实例并将它在数据库级别上分开吗?这意味着我将不得不连接到来自多个服务器的相同实例,资源服务器将每秒更新所有用户的资源数量,并将其与战斗服务器结合起来,以更新DB中的部队状态以及每次战争的更多情况上,我也会有聊天数据库,将与每个私人消息或聊天消息更新,会导致任何问题?或者只有当我连接到单个数据库并将其在集合级别上分开时,它才会导致问题?

  2. 是否有一个原因,我不应该继续创建多个实例?我读过如果在同一台服务器上使用多个实例,配置文件可能存在问题,但我认为docker会处理该部分。

更新 - 我已经找到一个很好的答案在这里:https://dba.stackexchange.com/questions/156811/mongodb-in-micro-services-structure/156984#156984

回答

2

使用微服务架构为您的应用程序是好主意,但我没有看到一个很好的理由,以数据库分开。 MongoDB可以为你处理它(Sharding)。另外,当您写入集合B时,MongoDB不会阻止写入集合A.如果您将应用程序分隔到多个数据库,则很难执行备份和维护应用程序。

您可以在这里阅读关于MongoDB的并发选项并查看MongoDB如何处理集合级别锁定。 https://docs.mongodb.com/manual/faq/concurrency/