分布式系统之CAP定理与BASE理论转载本文请联系码农私房公众号。最近采访了腾讯财付通,调查了一下注册中心的知识点再总结,但是发现功能点很多需要基础的理论基础,所以决定先总结一下分布式系统中常用的理论,以便方便后续面谈检查点。理解。什么是上限?CAP理论作为分布式系统的基础理论,描述了一个分布式系统具有以下三个特征:一致性、可用性和分区容忍度,至多满足其中的两个。一个特性,如下图所描述的:分布式系统要么满足CA,要么满足CP,要么满足AP,但不能同时满足CAP。分区容错:当分布式系统中的某个节点或网络分区发生故障时,整个系统仍然可以对外提供满足一致性和可用性的服务,即局部故障不影响整体使用。可用性:系统始终可以正常进行读写操作。简单的说就是客户端可以一直正常访问,得到系统的正常响应。从用户的角度来看,不会出现系统运行失败或访问超时等问题。一致性:分布式系统在完成某个写操作后,任何一个读操作都应该获取到写操作写入的最新值。相当于要求分布式系统中的每个节点时刻保持数据的一致性。如何理解CAP?首先,在保证分区容错的前提下,意味着如果一个节点出现故障,用户可以继续访问,但是这时候,用户会出现一致性和可用性无法同时满足的情况。访问过程,如下图所示:场景一:假设分布式系统有两个节点S0和S1,节点中变量的初始值为v0。现在客户端向系统写入一个新值v1。这里假设节点直接写入S0,客户端写入后读取这个值,但此时读取的是S1节点的值。由于S1节点与S0节点失去通信,此时S0节点的数据还没有同步到S1节点,所以客户端读取的是旧值v0,不满足一致性,即可用性很满意。失去一致性。场景二:同理,如果系统保证强一致性,客户端向S0节点写入数据后,从S0到S1节点同步数据出现问题。此时如果客户端再次读取S1节点的数据,客户端会一直处于等待状态,因为系统中各个节点的数据还没有同步,需要等到同步完成才可以使用,即满足了一致性,失去了可用性。场景三:多客户端访问时,一致性和可用性可以这样理解:假设客户端1修改了一个值给S0,但是写操作还没有完成,客户端2发起了对该值的更新读操作,但是读取节点S1的值。这时候如果要满足一致性,就必须让client1暂时不可用。如果客户端2要可用,获取到的数据不是最新的,系统会认为不满足一致性。CAP不能同时拥有这三个。如何选择?CA:优先考虑一致性和可用性,放弃分区容错。这也就意味着放弃了系统的可扩展性,系统不再是分布式的,违背了设计的初衷。CP:优先考虑一致性和分区容错性,放弃可用性。在对数据一致性要求高的场合,如:Zookeeper、Hbase等是比较常见的做法。一旦出现网络故障或消息丢失,将牺牲用户体验,恢复后用户将逐渐可以访问。AP:优先考虑可用性和分区容忍度,放弃一致性。SpringCloud系统中使用的Eureka注册中心就是这种架构,但是放弃一致性只是意味着放弃强一致性来保证最终的一致性。什么是BASE理论?BASE的全称是基本可用(BasicallyAvailable)、软状态(SoftState)和最终一致性(FinalConsistency)三个词组的缩写,由ebay的架构师提出。Base理论是CAP中一致性和可用性之间权衡的结果。它来源于大规模互联网分布式实践的总结,并基于CAP定理逐渐演化而来。其核心思想是:既然无法实现强一致性,各个应用可以根据自己的业务特点采用合适的方法使系统达到最终一致性。BasicallyAvailable(基本可用)是假设系统的某个模块发生不可预知的故障,但其他模块仍然可用。例如商城双十一期间,评论模块失效,但不会影响交易、商品等核心模块。过程使用。软状态(SoftState)软状态是指允许系统中的数据以一种中间状态存在,并认为这种状态不影响系统的整体可用性,即允许系统存在数据延迟在多个不同节点的数据副本中。用户在商城下单时,由于网络超时等因素,订单处于“支付中”状态,最终数据一致后状态会变为“已关闭”或“成功”。EventuallyConsistent(最终一致性)上面说的软状态不能一直是软状态,必须有时间限制。在截止时间之后,要保证所有的副本保持数据的一致性,从而达到数据的最终一致性,所以所有客户端访问系统的数据最终都能得到最新的值,而这个时间限制取决于网络延迟、系统负载、数据复制方案等因素。CAP中的一致性要求每个节点的数据在任何时候都必须保持一致。它强调的是强一致性,最终一致性是让每个节点的数据在一段时间内不一致,但是一段时间后每个节点的数据都必须一致,强调的是最终数据的一致性。在实际场景中,最终一致性有五种类型:1.因果一致性(Causalconsistency)如果节点A在更新某个数据后通知节点B,那么节点B后续对该数据的访问和修改将基于更新后的值的,但与节点A没有因果关系的节点C的数据访问不受此限制。2.Readyourwrites(Readyourwrites)节点A更新一条数据后,总是可以访问自己更新的最新值,看不到旧值。3、会话一致性(Sessionconsistency)会话一致性将对系统数据的访问过程限制在一个会话中:系统可以保证在同一个有效会话中“读什么写”的一致性,也就是说,在执行一次更新操作后,客户端始终可以在同一个会话中读取数据项的最新值。4.单调读一致性(Readconsistency)单调读一致性是指如果一个节点从系统中读取了某个数据项的某个值,系统不应该为该节点的任何后续数据访问返回一个更旧的值。价值。5.单调写一致性(Writeconsistency)是指系统必须能够保证来自同一节点的写操作是顺序执行的。对于以上五种最终一致性,在实际系统中往往会结合使用,构建具有最终一致性的分布式系统。事实上,不仅分布式系统使用了最终一致性,关系数据库的某些功能也使用了最终一致性。比如数据备份、数据库主从复制等过程都需要时间。在复制过程中,业务从从服务器读取的值是旧的。一定时间后,主从服务器会达到数据一致性,这也是最终一致性的经典案例。最后,总的来说,BASE理论针对的是大规模高可用和可扩展的分布式系统。它与传统交易的ACID相反。它完全不同于ACID的强一致性模型,而是牺牲了强一致性。获得可用性并允许数据随时间不一致。
