LollipopGo游戏服务器-数据一致性设计

本期课程给大家谈谈数据一致性,因为经常有同学问到,今天就给大家讲讲,数据一致性大致可分为三类:

  1. 时间点一致性。 时间点一致性指数据在任意时刻都是一致的。
  2. 事务一致性。 事务一致性指的是再一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。
  3. 应用一致性。 应用一致性指的是应用一致性可以看做是约束一致性中的一种。上面的事务一致性代表的是单一数据源,如果数据源是多个,比如数据源有多个数据库,文件系统,缓存等。那么就需要我们应用一致性,这里也看做是分布式事务一致性。

针对于游戏服务器数据一致性可能与目前我们所知道的分布式数据一致性有所不同,游戏服务器数据更新多以玩家数据更新为主,同时大多数游戏服务器框架都设计有DBserver,游戏架构设计与分布式或者微服务的设计就避免了不一致的风险。

LollipopGo X2.5架构

LollipopGo架构本身就设计有DBserver,玩家的数据缓存更新都是以DB更新成功为主,如果存在以下情况:

玩家在游戏服或者战斗服导致金币变化,通过协议更新到大厅或者主场景服务器,主场景服务器再更新到DBserver进行数据保存到数据库。如下图:

如果大厅服或者主场景服更新数据到DB服更新失败这种情况下,大厅服或者主场景服及DB服会将更新失败的log发送给Logserver,同时大厅服或者主场景服不会更新玩家金币变化的缓存,同时会同步给游戏服,金币进行回滚操作。本期视频会在B站:Golang语言社区,近期更新。

如果大家有不同的观点可以在文章下面留言,同时说说你对游戏服数据一致性的一些看法。