当前位置: 代码迷 >> Java相关 >> 自个儿做个游戏服务器,关于数据服和逻辑服之间通信的疑问
  详细解决方案

自个儿做个游戏服务器,关于数据服和逻辑服之间通信的疑问

热度:65   发布时间:2016-04-22 21:03:12.0
自己做个游戏服务器,关于数据服和逻辑服之间通信的疑问
    我所遇到的问题是这样的:逻辑服务器主要是是对vo对象进行逻辑操作,数据服对vo对象进行存储操作,两个服务器之间该怎样交互呢?我想到的方法有:
     方案1:数据服和逻辑服都缓存相同的vo对象,每当逻辑服中vo的属性发生改变,则将Map<属性名,新值>发送给数据服,数据服修改对应的vo的值,然后进行持久化,这样的方案,两个服务器交互会太频繁了。
     方案2:逻辑服只管进行逻辑操作(修改vo属性),然后把这些修改了属性的vo放入一个缓存,定时的(如:5分钟)将这些缓存发送到数据服,数据服进行持久化操作。
      给位能不能给些建议呢?非常感谢!
------解决方案--------------------
感觉如果是按照功能分服的话,方案2稍微好一点,减少数据库写的压力,读取的话,最好在数据库持久层再加一个二级缓存,ehcached或者memcached。但是感觉现在主流的手游页游服务器,都不是按照业务来分服的,一个服务器就有所有的功能,然后再做负载均衡。不知道说的对不对,仅供参考
------解决方案--------------------
引用:
    我所遇到的问题是这样的:逻辑服务器主要是是对vo对象进行逻辑操作,数据服对vo对象进行存储操作,两个服务器之间该怎样交互呢?我想到的方法有:
     方案1:数据服和逻辑服都缓存相同的vo对象,每当逻辑服中vo的属性发生改变,则将Map<属性名,新值>发送给数据服,数据服修改对应的vo的值,然后进行持久化,这样的方案,两个服务器交互会太频繁了。
     方案2:逻辑服只管进行逻辑操作(修改vo属性),然后把这些修改了属性的vo放入一个缓存,定时的(如:5分钟)将这些缓存发送到数据服,数据服进行持久化操作。
      给位能不能给些建议呢?非常感谢!


你应该没有仔细分析过游戏服务器。
分服以后,每个服能撑的人数是有限的,所以写操作只存在于当前活跃用户。

方案2的想法很好,但是你要做容灾的话是非常复杂的。比如你写缓存,如果缓存挂了,你的数据就丢了,你怎么和你的用户解释?如果刚好游戏在做活动,或者他刚好打出一个好装备,你把他数据弄丢了,他会每天打投诉电话骚扰你的客服的(这种用户真的很多,相信我)

这种要求保证数据安全的场景,你想都不要多想,先用最简单的方案1,数据库撑不住了再想办法。
一般都是限制服务器人数上限、换个更好的硬件来解决。
  相关解决方案