对跨服玩法中的分布式一致性问题进行简单抽象

💡 原文中文,约3800字,阅读约需9分钟。
📝

内容提要

文章探讨了跨服游戏中的数据一致性问题,提出了三种工作模式及其处理策略:模式一为跨服奖励发放,模式二为玩家请求处理,模式三为复杂的跨服PVP事务。作者设计了Mq和UserSync组件,以确保消息顺序和低延迟,实现分布式事务的最终一致性。

🎯

关键要点

  • 文章探讨了跨服游戏中的数据一致性问题。
  • 提出了三种工作模式及其处理策略:跨服奖励发放、玩家请求处理、复杂的跨服PVP事务。
  • 模式一和模式二的数据一致性实现相对简单,主要依靠消息重发机制和去重逻辑。
  • 模式三涉及复杂的跨服PVP事务,处理难度较大。
  • 策略一:先扣资源再请求跨服处理,可能导致玩家损失。
  • 策略二:先请求跨服处理再扣除资源,可能导致恶意刷资源漏洞。
  • 倾向于采用先请求跨服处理再扣除资源的方式,尽量避免恶意利用。
  • 消息队列中间件不适用于游戏场景,因其增加消息延迟。
  • 设计了Mq和UserSync组件以确保消息顺序和低延迟,实现分布式事务的最终一致性。
  • Mq组件保证消息按顺序送达,需在游戏服实现去重逻辑。
  • UserSync组件对每个玩家的每个命令仅保留最新消息,确保低延迟。
  • 跨服PVP场景是最复杂的,涉及分布式事务的处理。
  • 结合Mq和UserSync组件,设计了跨服PVP的资源扣除流程。
  • 实现了最终一致性的分布式柔性事务,处理逻辑可复用。

延伸问答

跨服游戏中的数据一致性问题是什么?

跨服游戏中的数据一致性问题主要涉及在不同服务器之间同步玩家操作和奖励发放的准确性和及时性。

文章中提到的三种工作模式是什么?

三种工作模式分别是跨服奖励发放、玩家请求处理和复杂的跨服PVP事务。

如何处理复杂的跨服PVP事务?

复杂的跨服PVP事务通过结合Mq和UserSync组件,先扣除资源,再发送消息进行处理,以确保最终一致性。

为什么消息队列中间件不适用于游戏场景?

消息队列中间件会显著增加消息延迟,而在游戏中,延迟几秒是不可接受的,尤其是在玩家集中操作时。

UserSync组件的作用是什么?

UserSync组件确保每个玩家的每个命令仅保留最新消息,以降低延迟并保证消息不丢失。

在跨服游戏中,如何避免恶意刷资源漏洞?

通过在请求跨服处理前先扣除资源,并使用逻辑锁确保资源消耗操作不并行执行,可以避免恶意刷资源漏洞。

➡️

继续阅读