如何实现服务器游戏数据同步?

如何实现服务器游戏数据同步?,第1张

l 当出现同步异常的游戏,可以通过同步日志查看,并可通过重新执行失败任务功能再次同步。%26Oslash; 自动触发游戏同步l 当服务器游戏升级(或者通过手动更新游戏版本号)后,自动触发服务器同步功能。l 相应游戏会自动按照分组方式同步到指定服务器。

审核中服务器同步意思是:
正在同步的意思是数据正在同步到服务器,同步到云端,这样才可以登入软件服务器,服务器才可以接收到你的指令。
服务器是计算机的一种,它比普通计算机运行更快,负载更高,价格更贵,服务器在网络中为其它客户机,如PC机,智能手机,ATM等终端甚至是火车系统等大型设备,提供计算或者应用服务。

整个集群完成Leader选举后,Leader会向Leader服务器进行注册。当Leader向Leader服务器完成注册后,就进入主从数据同步环节。也就是Leader会将自己的数据同步给从服务器。

根据ZXID来判断同步策略

这里有三个ZXID

四种数据同步策略:

场景
peerLastZxid 介于 minCommittedLog 和 maxCommittedLog 之间。

leader向从服务器发送一个DIFF指令,告诉从服务器进入DIFF同步阶段,leader将要把一些proposal同步给从。针对每个proposal,leader都会发送两个数据包,分别是proposal内容数据包和commit指令数据包。

假如某个时刻leader服务器的建议缓存队列对应的ZXID依次是:
0x500000001、0x500000002、0x500000003、0x500000004、0x500000005

而从服务器最后处理的ZXID为0x500000003。

那么leader就会依次将0x500000004、0x500000005两个proposal同步给从服务器。

场景:
假设有A、B、C三台机器,加入某一时刻B是leader,此时的epoch为5,ZXID包括0x500000001、0x500000002。此时leader正要处理ZXID:0x500000003,并且已经将该事务写入到了自己机器的事务日志中了,就在将该proposal发给从服务器的时候,B挂了,也就是leader挂了,proposal没有同步出去。
此时zk集群会进行新一轮的leader选举,A成为leader,epoch为6。并又提交了两个事务0x600000001、0x600000002。此时B重启,并开始同步数据。

leaderA发现B中的ZXID:0x500000003自己没有,那么就会让B先回滚到和自己ZXID一样的最近的ZXID。再DIFF同步。

此时B,先回滚到0x500000002,再DIFF同步0x600000001、0x600000002
(这里是6开头了啊,不是5开头)

场景:
peerLastZxid 大于 maxCommittedLog
TRUNC + DIFF同步的第一步。
也就是A成为leader后,还没有新的事务0x600000001、0x600000002进来,B就起来了。这个时候,B直接回滚就好了。

场景1:
peerLastZxid 小于 minCommittedLog

场景2:
leader服务器上没有proposal缓存队列。

在这两种场景下,leader服务器都无法直接使用建议缓存队列进行数据同步,没办法了,只能全量同步了。

所谓全量同步就是leader服务器将本机上的全量内存数据都同步给从服务器。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13428369.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-03
下一篇 2023-08-03

发表评论

登录后才能评论

评论列表(0条)

保存