美文网首页
数据复制--无主架构下的并发写入

数据复制--无主架构下的并发写入

作者: MontyOak | 来源:发表于2018-05-06 20:07 被阅读7次

Dynamo模式支持并发写入同一个键,这可能会导致写冲突的发生。在多主架构中,写冲突一般在写操作同步的时候;在无主架构中则是在读修复或者是数据回传的时候。
问题主要在于,对于不同的节点,由于网络等原因,经常看到不同的事件发生顺序。


不同节点看到不同的事件发生顺序

如果每个节点都采用简单的最后写入获胜的策略,就有可能出现上面图示的情况:不同节点对于事件发生的顺序无法达成一致。对此,有以下应对策略:

最后写入原则

对于节点本身,保留最后写入的数据去覆盖相对比较旧的数据,关键点在于对于可能冲突的写入操作,如何确定他们的发生顺序。事件顺序有时真的很难确定,甚至在很多情况下是并发的请求。这时需要一些机制来确定事件顺序,比如为每次写操作加上时间戳,对于冲突操作只保留最大时间戳的数据(这就是最后写入原则)。
由于在读修复或者数据回传的时候,冲突操作才能被检测到,这会出现一种情况:写操作时返回操作成功,过一段时间(发生了读修复或者数据回传)这个写操作被覆盖了。

happens-before和并发

如何确定两个时间是否是并发的?
有些场景下两个请求必然存在先后顺序,比如创建和更新,创建和删除等等。有些场景则没有逻辑上的先后顺序,比如不同客户端对于同一个键的修改。前者中,有happens-before关系,逻辑上的依赖;后者则没有逻辑上的先后顺序,叫做并发请求。
下面以一个购物车为例来说明并发与happens-before请求的确定:

购物车
对于这个图示,下图说明了happens-before和并发的关系:
购物车请求关系
  • 数据库保留版本号概念,为每次写入操作进行版本号递增。
  • 读操作时返回所有没有被覆盖的数据和版本号,规定写操作进行之前必须先进行读操作,并针对最新的版本数据进行写操作。
  • 写操作进行时必须说明是基于某一版本的数据进行更新写入。

这里有冲突自动解决策略的介绍。
Vector clock
Happens-before

相关文章

  • 数据复制--无主架构下的并发写入

    Dynamo模式支持并发写入同一个键,这可能会导致写冲突的发生。在多主架构中,写冲突一般在写操作同步的时候;在无主...

  • 数据复制--无主架构

    之前提到的架构都是有制定的一个(单主)或多个(多主)节点来处理所有写入请求并同步到其他节点。但是还有一种不对写入节...

  • MongoDB/主从/副本集

    主从复制:主节点写入数据,从通过读取主的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。...

  • 无标题文章

    大并发写入案例: 高并发,大数据量写入:先把数据写入到内存,积累到一定的量后,在定时或者定量的写入到磁盘(减少磁盘...

  • 当写入数据增加时,如何实现分库分表?

    数据库优化--当写入数据增加时,如何实现分库分表? 高并发下数据库的一种优化方案:读写分离。就是一老主从复制的技术...

  • 实时数据并发写入 Redis 优化

    01 背景 当前架构的逻辑是将并发请求数据写入队列中,然后起一个单独的异步线程对数据进行串行处理。这种方式的好处就...

  • 时序数据库特点与对比

    时序数据库的特点 数据写入时序数据会按照指定的时间粒度持续写入,支持实时、高并发写入,无须更新或删除操作。 数据读...

  • 关于缓存的一些总结(6)

    缓存中的数据如何和数据库保持一致性1、双写模式双写模式就是先写入数据库再写入缓存。但在高并发情况下容易出现脏数据,...

  • redis高并发高可用

    redis 实现高并发主要依靠主从架构,一主多从. 对于性能来说,单主用来写入数据,单机几万QPS,多从用来查询数...

  • redis 的高并发高可用

    redis 实现高并发主要依靠主从架构,一主多从. 对于性能来说,单主用来写入数据,单机几万QPS,多从用来查询数...

网友评论

      本文标题:数据复制--无主架构下的并发写入

      本文链接:https://www.haomeiwen.com/subject/oenurftx.html