📜  分布式数据库的最终一致性与强一致性

📅  最后修改于: 2021-08-29 02:37:22             🧑  作者: Mango

1.最终一致性:
最终一致性是一种一致性模型,它使数据存储具有高可用性。它也被称为乐观复制,是分布式系统的关键。那么,它到底是如何工作的呢?让我们在用例的帮助下了解这一点。

实际使用案例:

  • 想想一个流行的微博网站,该网站遍布全球,分布在亚洲,美洲,欧洲等不同的地理区域。此外,每个地理区域都有多个数据中心区域:北,东,西,南。
  • 此外,每个区域都具有多个群集,这些群集具有正在运行的多个服务器节点。因此,我们有许多分布在世界各地的数据存储节点,微博客站点使用这些节点来存储数据。由于运行的节点太多,因此不会出现单点故障。
  • 数据存储服务是高度可用的。即使有几个节点出现故障,持久性服务仍然会启动。假设有名人在网站上发布帖子,全世界每个人都开始喜欢。
  • 在某个时间点,日本的用户喜欢该帖子,该帖子的“赞”计数从100个增加到101个。同时,在不同地理区域的美国用户点击该帖子,他认为“喜欢”计数为100,而不是101。

出现上述用例的原因:

  • 简而言之,因为Post“ Like”计数器的新更新值需要一些时间才能从日本转移到美国并更新在日本运行的服务器节点。尽管此时的计数器值为101,但美国的用户看到的是旧的不一致的值。
  • 但是,当他在几秒钟后刷新网页时,“ Like”计数器值显示为101。因此,数据最初是不一致的,但最终在全球部署的服务器节点上保持一致。这就是最终的一致性。

2.强大的一致性:
高度一致性只是意味着数据必须始终保持高度一致性。世界各地的所有服务器节点在任何时间点都应包含与实体相同的值。而实现此行为的唯一方法是在更新节点时锁定它们。

现实世界中的用例:

  • 让我们继续上一课中的“最终一致性”示例。为了确保系统中的强一致性,当日本的用户喜欢发帖时,必须锁定不同地理区域内的所有节点,以防止任何并发更新。
  • 这意味着在某个时间点,只有一个用户可以更新帖子“赞”计数器值。因此,一旦日本的用户将“赞”计数器从100更新为101,该值就会在所有节点上全局复制。一旦所有节点达成共识,锁就会解除。现在,其他用户可以顶帖子。
  • 如果节点需要一段时间才能达成共识,则必须等到那时。好吧,对于社交应用程序,这当然是不希望的。但是考虑一下股票市场应用程序,在该应用程序中,用户在同一时间看到同一股票的不同价格,并同时进行更新。这会造成混乱。因此,为了避免这种混乱,我们需要我们的系统具有高度一致性。
  • 必须锁定节点以进行更新。对所有请求进行排队是使系统高度一致的一种好方法。强大的一致性模型可以使系统具有“高可用性”功能并执行并发更新。这就是实施强一致的ACID事务的方式。

ACID交易支持:

像NoSQL数据库这样的分布式系统在运行时可以水平扩展,因此不支持全局ACID事务,这是由于其设计所致。 NoSQL技术发展的全部原因是具有高可用性和可扩展性的能力。如果我们每次都必须锁定节点,则它就像SQL。因此,NoSQL数据库不支持ACID事务,那些声称拥有其条款和条件的ACID事务也是如此。通常,交易支持仅限于地理区域或实体层次结构。技术开发人员确保所有强一致性实体节点都位于同一地理区域中,以使ACID交易成为可能。

结论 :
对于事务性事务,MySQL可以使用,因为它提供了锁定功能并支持ACID事务。