您的位置:首页 > 理论基础 > 计算机网络

MMO网络游戏数据访问层的设计设想

2010-08-01 14:51 218 查看
对于大多数互联网应用,数据的存储和访问都是不可或缺的一环。从早前的文件存储,到目前广泛使用的数据库,再到曙光初现的NoSQL,归根结底都是提供了数据的存储和访问功能。但是,面对不同的应用,对于数据的安全级别,存储和访问的效率,一致性的支持,扩展的能力和使用的成本,要求都是不一样的。

对于所有的软件开发人员,都希望能用最低的成本,实现最高的数据安全级别,最快的访问效率和始终的数据一致性。在目前看来,这就是妄想。于是,我们的需求就成为只要能使用最低的成本,能满足业务增长的需要,和良好的用户体验就行。

于是,数据的安全,效率,一致性和扩展性,就必须折中。权衡,如何权衡,就成为了软件架构师的艺术。

当前MMO网络游戏中,对于数据的存储和访问的性能要求其实是很低的。一个游戏(甭管什么游戏)的区,基本上,一台数据库就可以满足需求;

对于安全性,有钱的公司,买UPS应对断电,使用备份应对磁盘损坏。没钱的公司,将服务器放在北京的机房托管(北京的机房,断电的可能性真的非常低,价格要高一些),也不做备份(磁盘损坏的概率太小了,就像坐飞机不买保险大多数情况下一点问题也没有)。

一台数据库,大多数情况下,也就不存在数据一致性的问题。

大多数网络游戏,一般也就运营那么个3-5年就寿终正寝,一台数据库,从头用到尾,一点问题也没有,没有扩展的需求。优秀的网络游戏,也有7-8年的寿命,这也好办,到了空间不够时,停机个半天一天的,换台更大容量的数据库服务器。相对于优秀的网络游戏的高额利润,服务器的价格不过是九牛一毛而已。

就这样,一年又一年,都十年了,MMO网络游戏的数据存储这一块,就没有进步过……

什么是悲哀?这就是悲哀。

那么,可不可以这样?

我们设计一个专门给MMO网络游戏的数据访问层,让一款网络游戏所有的区都是用同一个数据访问层,同一款网络游戏的数据都存储在这样的一个数据访问层中。这个数据访问层,对于所有的游戏服务器都是透明的,就像通过这个数据访问层访问一台巨大的,无限空间的,数据库服务器。这个数据访问层的好处有:

1.统一接口,内部无论使用多少台数据库,使用何种数据库,甚至是NoSQL,甚至多种数据库混杂在一起,都是可以的。

2.无限水平扩展能力,面对数据增量存储的需求,这个平台可以无限制的水平扩展,而无需游戏服务器大量代码更新。实现上,可以考虑双级的一致性Hash,或者所谓的BigTable;保证数据扩展时,迁移的数据量最小,不出错。

3.多种安全级别统一规划,对存储的数据,根据用户的需求,判断数据的安全级别,然后,直接指定安全即可,实现对内存级别,磁盘级别,断电无忧,磁盘损坏无忧,断电和磁盘损坏无忧。在数据访问层内部,构建整套数据安全机制和数据恢复机制,根据用户的指定级别,分别存储在不同的数据库中,大机Oracle安全级别最高,MySQL多机同时存储安全级别其次,单机MySQL存储再次,NoSQL甚至是直接存储在磁盘上安全级别再差一些,最后直接写在内存上,级别只有Cache那个层次,而所有这些,对用户透明;

4.统一强大的数据分析工具,统一的数据平台,能够提供统一的分析工具,将所有的数据汇总分析,更快速的提供当前游戏的一些运营分析数据,供运营人员参考。

当然,为了更加简单的运维这个数据访问层,我们还必须要考虑一套监控系统,能够通过短信,IM短消息,Email等形式,发布报警信息,并记录报警信息。

目前,正是由于MMO网络游戏使用数据的效率要求不高,所以是数据访问层的一个良好的切入点。

在这个数据平台访问层做好后,我觉得,如果有需求的话(当然,对于网络游戏,可以完全没有这个需求),下一步可以考虑7*24小时数据服务和更高级别数据安全性的问题,可以考虑做同城容灾,然后,再考虑异地容灾,达到银行的两地三备的级别要求。这个容灾的问题,根据我以前的经验,难点在降低通讯时间消耗上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: