游戏服务器数据缓存和持久化中间件设计总结

http://blog.csdn.net/herm_lib/article/details/8171196

本文就介绍游戏服务器的数据缓存和持久化的设计策略。基本上各种类型的游戏服务器都适用,包括全区全服、分区分服的SNS类、ACG或者RPG。数据的缓存和持久化从技术角度来讲是比较容易实现?做过几个类似的功能模块后,渐渐地会有一种模块重用的想法,有一个公共的中间件可以容易支持我们游戏服务器各种缓存和持久化需求。目前有类似开源的项目,我们以前的公司有类似的项目。项目组如果利用可靠的中间件,还是可以提高开发效率的。


本文缓存和持久化中间件的设计目标

限定游戏服务器领域,但基本上满足所有类型的游戏需求。我不废话,直接从需求场景引出要支持哪些功能。

缓存和持久化中间件几个元素

(1) 访问中间件的接口

     这块主要在写数据到cache的策略,实时写或者定时写;

     定时写数据的优先级, 比如重要数据立即写,非重要数据,隔很长时间才写;

     分布式的访问策略,取漠或者一致性hash定位cache。


(2) cache

      中间件本身要不要做cache,如果使用cache,有没有某种淘汰策略(如LRU);

      cache持久化或者非持久化;

      实时持久化或者定时持久化;

      定时持久化的优先级;

      分布式策略。

     

(3)  持久化

      数据持久化的格式;

     持久化的目标设备;

     分布式策略。


需求场景一

             logicd [cache] ---------------> storage

logicd就逻辑服务器,storage是我们数据持久化的存储设备(DB,文件之类的)。

有的游戏一个逻辑服务器,玩家在游戏的过程中不会切换服务器。这种情况,cache最好作为一个模块(so/lib)内嵌到游戏逻辑进程中。

因为logicd已经缓存了数据,cache模块就做缓存了,否则就双份缓存。

cache的接口定时写到cache;

没有缓存的话,cache就采用实时持久化策略,只要接口有数据过来,马上持久化,让数据落地。


需求场景二

          logicd1 + logicd2 --------->cahced------>storage

这个场景在实际的游戏服务器设计中是蛮多的,就是玩家可能会在两个逻辑服务器上切换,从logicd1切到logicd2的时候,从cached拉最新的数据。

logicd的访问接口一般是优先级定时写到cahced;

cached要做缓存,采用类似LRU的淘汰算法或者不淘汰,优先级定时地持久化到storage。


需求场景三

         logicd1 + logicd2 + otherd ------->cached

这个场景模型在sns类的游戏中可见,比如sns类的可有可无的好友消息动态之类的内容,某几种服务器产生消息,直接写到cached;其他服务器可能要从cached去读。

logicd的访问接口一般是优先级定时写到cahced,这个定时时间间隔可以开得长一些;

cache肯定做缓存采用类似LRU的淘汰算法或者不淘汰,不持久化,机器重启数据就没了。


就简单地写这些,下篇准备总结一下具体理想化的实现,同时放出herm cached的源码实现。


每个人都要谦卑,都要认为别人比自己强;不断地学习,不断进步。没有足够的时间去细琢,匆忙地把平时的想法尽量地表达出来,希望兄弟们给意见,指正。谢谢。



 

转载于:https://www.cnblogs.com/herm/archive/2012/11/11/2773887.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值