本文共 2094 字,大约阅读时间需要 6 分钟。
CAP理论:一个分布式系统不可能同时满足一致性,可用性和分区容错性,最多只能同时满足其中的两项。
(1)一致性
对于一个将数据副本分布在不同分布式节点上的系统来说,如果对第一个节点的数据进行了更新操作并且更新成功后,却没有是的第二个节点上的数据得到相应的更新,于是在第二个节点上的数据进行读取操作时,获取的依然是旧数据(脏数据),这就是典型的分布式数据不一致的情况。在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到更新后的值,那么这样的系统就被认为具有严格的一致性(强一致性)。
(2)可用性
可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。
其中“有限的时间内”是指,对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超出这个时间范围,系统则被认为是不可用的。 “返回结果”是可用性的一个重要指标,要求系统在完成对用户请求的处理后,返回一个正常的相应结果。正常的响应结果通常能够明确的反应出对请求的处理结果,即成功或失败。(3)分区容错性
分区容错性约束了一个分布式系统需要具有如下特性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性的可用性的服务,除非整个网络环境都发生故障。
放弃CAP定理 | 说明 |
---|---|
放弃P | 放弃p的同事也就意味着放弃了系统的可扩展性,即尽可能的将所有的数据(或者仅仅是那些与事务相关的数据)都存放在一个分布式节点上。 |
放弃A | 相对于放弃P,放弃可用性则正好相反,其做法是一旦系统遇到网络分区或其他故障,那么受到影响的服务需要等待一定的时间,因此在等待时间内,系统不可用。 |
放弃C | 事实上,放弃一致性指的是放弃数据的强一致性,而保留数据的最终一致性。即虽然数据不能保证实时一致性,但能保证数据最终会达到一个一致的状态。 |
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)的简写。BASE是对CAP中一致性和可用性权衡的结果,契合性思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使得系统达到最终一致性。
(1)基本可用
基本可用是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性。 a、相应时间上的损失:正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户的查询结果,但由于出现故障,查询结果的响应时间增加到1-2秒。 b、功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利的完成每一笔订单,但是在一些节日大促购物高峰的时候(比如双十一),由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
(2)弱状态
弱状态也称为软状态,和硬状态相对应,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同的节点之间的数据副本进行数据的同步过程存在延迟。
(3)最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质就是需要系统最终数据达到一致,而不需要实时保证系统数据的强一致性。在没有发生故障的前提下,数据达到一致状态的时间延迟,取决于网络延迟、系统负载和数据复制方案设计等因素。
在时间工程实践中,最终一致性存在以下五类主要变种。 a、因果一致性 b、读己之所写 c、会话一致性 d、单调读一致性 e、单调写一致性所谓ACID指的是事务操作的四个基本特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称事务的ACID特性。
原子性
事务的原子性是指事务必须是一个原子的操作序列单元,事务的各项操作在一次执行过程中,要么全部成功执行,要么全部不执行。即任何一项操作失败都将导致整个事务失败,同时其他已经执行的操作都将会被撤销回滚到最初状态。
一致性
事务的一致性就是说,事务的执行结果必须是使数据库从一个一致性状态转变到另一个一致性状态,当数据库只包含成功事务提交的结果时,就能说数据库处于一致性状态。
隔离性
事务的隔离性是指在并发环境当中,并发的事务相互不受干扰,不同的事务并发操作相同的数据是时,每个事务都有各自完整的数据空间。
持久性
事务的持久性是指一个事务一旦被提交,他对数据库中对应的数据状态变更就必须被永久的保存下来,即使发生宕机等故障,只要数据库能够被重新启动,数据状态依旧是被更新后的状态。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统事务的ACID特性是相反的,完全不同于ACID的强一致性模型,而是提出通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。
【转载】