云计算AWS之Dynamo数据冲突问题 - 新闻中心 - 福州哈唐网络-福建IDC企业!专注云主机及服务器租用托管13年!

新闻中心

首页 > 新闻中心 > 行业新闻 >

云计算AWS之Dynamo数据冲突问题

时间:2016-12-28 11:13:46   阅读:

  分布式系统架构通常需要考虑三个因素:可靠性(Reliability)、可用性(Availability)和一致性(Consistency)。二者不能同时达到,最多只可以实现其中的两个。Dynamo系统选择牺牲一致性来换取系统的可靠性和可用性,这也是由Amazon业务特点决定的。Dynamo要保证完美的用户体验,就必须保证数据总是可写的,但是这样就可能出现数据冲突,如何解决数据冲突呢?Dynamo采用了最终一致性模型(Eventual Consistency),这种模型和强一致性模型(Strong Consistency)的不同点在于:它并不在意数据更新过程中的一致性问题,只要最终的所有数据副本能够保证一致性即可。简单地说就是“只求结果,不看过程”。由于最终一致性模型不保证过程中数据的一致性,在某些情况下(比如说某个存储节点出现故障)不同的数据副本可能会出现不同的版本,如何确保所有的副本最终都会被正确更新是一个很棘手的问题。数据副本可能会以不同的顺序看到更新结果,而不同顺序的更新很可能造成数据的不一致。为此Dynamo利用技术手段推断各个更新的实际发生次序,这种技术就是向量时钟,其原理图如图3-6所示。
 
\
 
  Dynamo中的向量时钟用一个(nodes,counter)对表示。其中nodes表示节点, counter是一个计数器,初始为0,节点每发生一次事件就将计数器加1。首先Sx对某个对象进行一次写操作,产生一个对象版本Dl([Sx,l]),接着Sx再次操作,由于Sx是第二次进行操作,所以counter值更新为2,产生第二个版本D2([Sx,2]);之后,Sy和Sz同时对该对象进行写操作,Sy将自身的信息加入向量时钟产生了新的版本D3([Sx,2], [Sy,l]), Sz同样产生了新的版本信息D4([Sx,2], [Sz,l]),这时系统中就有了两个版本的对象,但是系统不会自行选择,它会将这两个版本同时保存,等待客户端解决冲突。最后Sx再次对对象进行操作,这时它会同时获得两个数据版本,用户根据版本的信息,重新计算或得一个新的对象记做D5([Sx,2], [S3U],[Sz,l]),并将新的对象保存到系统中。需要注意的是,向量时钟的数量是有限制的,当超过限制时需根据时间戳(Timestamp)删除最开始的一个。这种解决一致性问题的方式对Amazon的购物网站来说非常有用。例如购物车模型,用户可以通过它查询曾经浏览的各种商品,而不是仅仅査询最终购买的商品。
 


闽公网安备 35010002000114号