如何简化过程或启动分布式媒体

时间:2011-07-05 13:47:10

标签: erlang mnesia

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

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

我在http://code.google.com/p/schemafinder/检查了schemafinder项目,我想实现它的工作方式,但看起来很复杂。

如果有任何身体愿意给我一些启示,我会更加感激。

提前致谢

1 个答案:

答案 0 :(得分:2)

您希望在一组计算机上使用相同的游戏服务器。您采取的第一步是可以的:通过在远程计算机上进行复制来使其数据库可用。然而,重要的是你要在层中设计整个游戏服务器。让游戏服务器自己成为自己的应用程序,自己的包。然后将其数据库分开设计。这个数据库可以分段,在多台机器上复制。
通过这种方式,您可以为您的游戏服务器创建一个数据访问层,在该层中,它将使用数据访问层API在远程计算机上访问您的数据库或本地运行时不会中断服务。将每个游戏服务器实例作为自己的Mnesia架构并不好,除非您确定将驻留在这些数据库中的数据不相关:{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.)。在数据访问层中,构建了容错数据库节点访问。您在此处放置的方法将从处理连接问题中抽象出应用程序(业务逻辑)层,从而对数据库节点进行远程过程调用e.t.c.此外,这些方法应该能够检测“节点无法访问”错误,并且可以在运行时重试对另一个数据库副本节点的调用,而游戏服务器不会注意到这种干扰。 数据访问层可以通过在数据库节点之间有效地复用应用程序到数据库调用来在数据库节点上进行负载平衡(取决于可用性和故障切换机制)。 这个讲话够了....
无论如何,我总结的一点是,将Mnesia与游戏服务器区分开来很重要。通过这样做,您可以单独管理服务器应用程序,稍后还可以单独担心数据访问。将数据库物理和逻辑布局与项目的其他部分分离将提高灵活性和可用性。将来,您可以在不更改数据访问层的情况下更改数据库设计和内容。您甚至可以在未来更改游戏逻辑时切换其他DBMS,例如 Riak Membase Server

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