背景
为了是数据更靠近用户位置,一般大公司会在不同的地理位置部署多个数据中心,然而每个数据中心内的数据需要复制到其他的数据中心,一般会有使用多主节点的数据部署方式
多主节点数据分布架构
无论采取哪种具体的多主数据库系统,都需要把一个节点的数据同步到另一个节点,这里最明显会导致的问题是写冲突导致的数据不一致问题
从上图可以看出这种架构导致的最常见的写冲突导致的数据库状态不一致问题,
除此之外还有其他比如
1.读回溯问题,也即某个用户从某个副本读到了数据的最新值,由于复制滞后的问题,当这个用户从另外的副本读数据时,那个副本还没有更新到最新值,导致读取到了旧值,用户会很迷惑
2.写后读问题,当用户写到某个副本后,读取时从其他副本获取数据,而那个副本还没有同步到最新数据时,就会发生写的数据查询时找不到数据的问题.
3.数据因果关系错乱:插入/更新数据在某个副本节点上变成先更新后才是插入的,插入/删除数据在某个副本节点上变成了先删除后才插入数据.
解决方案
1.对于采用多主复制方案架构来说,最好的解决冲突的方式是避免产生数据冲突,也就是每个数据中心单独处理某个用户区域的数据,互不相关,互相之间也没有数据依赖,如果能做到数据的完全隔离,这是最理想和最好的冲突解决方式
2.对于多个数据写入冲突采用最后写入者获胜,也即LWW,但是如果是采用时间戳来确定先后顺序的话,由于不同的副本时间戳不完全一致,所以这种方式还是有概率导致数据不一致的问题
3.没法解决的数据因果关系顺序错乱问题