2

目前我正在开发一个游戏服务器,我的架构是每个游戏服务器在第一次启动时都会实例化一个 mnesia db。假设我想创建第二个节点,我的计划只是将相同的游戏服务器部署到第二个节点。

我的问题是:我希望我的游戏服务器的第二次部署将自动检测第一个节点上的 mnesia 实例,复制其数据库模式并成为第一个节点的集群。

我在http://code.google.com/p/schemafinder/上检查了 schemafinder 项目,我想实现它是如何做到的,但它似乎很复杂。

如果有人愿意给我一些启发,我将不胜感激。

提前致谢

4

1 回答 1

2

您希望在机器集群中使用相同的游戏服务器。您采取的第一步是好的:通过远程机器上的复制使其数据库可用。然而,分层设计整个游戏服务器很重要。让游戏服务器自己成为自己的应用程序,自己的包。然后将其数据库也单独设计。该数据库可以分段,在多台机器上复制。
通过这种方式,您可以为您的游戏服务器创建一个数据访问层,在该层中,它将使用数据访问层 API 来访问您的数据库,无论是在远程机器上还是在运行时本地访问,而不会中断服务。让每个游戏服务器实例都有自己的 Mnesia Schema 是不好的,除非您确定将驻留在这些数据库中的数据不会相关:{local_content,true}.

在多台机器上复制相同的 Mnesia Schema(这是在您的数据存储层中)更安全。然后你的桌子设计得很好。在模块中公开操作您的游戏数据的 API。从这里开始构建数据访问层( NOTE: Am talking of the 3-tier Logical Architecture, the Physical Architecture can take any form as long as it caters for Hardware and Network Failures.)。在数据访问层,构建了容错数据库节点访问。您在此处放置的方法将从处理连接问题、对数据库节点进行远程过程调用等抽象应用程序(业务逻辑)层此外,这些方法应该能够检测“节点不可达”错误,并且可以在运行时重试调用另一个数据库副本节点没有游戏服务器注意到这种干扰。数据访问层可以通过在数据库节点之间有效地多路复用应用程序到数据库的调用来在数据库节点上进行负载平衡(取决于可用性和故障转移机制)。话不多说……
无论如何,我总结一下,将 Mnesia 与游戏服务器分开很重要。通过这样做,您可以单独管理服务器应用程序,以后还可以单独担心数据访问。将数据库物理和逻辑布局与项目的其他部分分开将增加灵活性和可用性。将来,您可以在不更改数据访问层的情况下更改数据库设计和内容。您甚至可以在将来切换到另一个 DBMS,例如RiakMembase Server,而无需更改游戏逻辑。

另一件事:避免在这里和那里复制模式。从一开始就设计您复制/分布式的数据库架构。不要让你的游戏服务器为了成为一个集群而从一个节点到另一个节点复制 mnesia 模式。让游戏服务器担心游戏逻辑和其他东西,让数据访问层担心游戏数据。那里有一些启示,我希望它有所帮助。成功!

于 2011-07-06T07:17:25.783 回答