我正在使用 docker 构建一个具有微服务结构的游戏。
我开始构建服务的方式是为每个服务提供一个 mongoDB 实例,因此为 mongoDB 实例提供 OneToOne 服务,
Resources ---> resourcesDB (mongoDB instance 1)
Chat ---> chatDB (mongoDB instance 2)
Buildings ---> buildingsDB (mongoDB instance 3)
Battle ---> battleDB (mongoDB instance 4)
...
Run Code Online (Sandbox Code Playgroud)
这在开始时确实有意义,因为例如这些服务没有任何共同点,并且不需要连接到同一个 mongo 实例,当它们确实有共同点(构建 <-> 资源)时,它们只需发送一个调用到所需的服务,并处理其余的(更新他的数据库)。
但我开始认为这不是正确的方法,因为以下几点:
1 - 例如,resourcesDB 只有 2 个集合,
Logs ---> logging every resources change (building built, war lost etc.)
Resources ---> 1 document per user holding how much he have.
Run Code Online (Sandbox Code Playgroud)
这意味着这个数据库不会保存任何大量数据(一段时间后日志将被删除),因此为这两个集合设置一个实例看起来像是一个巨大的杀戮,即使这个实例没有自己的服务器并且将共享服务器与服务。
2 - 维护和备份需要一些额外的工作,我不确定在我的情况下是否需要。
每个服务都会经常更新他的数据库,资源每秒都在计算每个用户有多少,所以它会'users amount'每秒更新数据库,除了其他请求,比如建造建筑物(减少资源)和其他更新,聊天服务将在每条私人消息或聊天消息中更新数据库,战斗服务将每秒更新部队位置和统计数据以及正在进行的每场战斗的更多内容。
我正在考虑将该结构用于下一个结构:
可能只有 1 …