分布式理论协议与算法 第三弹 BASE理论

大部分人解释这 CAP 定律时,常常简单的表述为:"一致性、可用性、分区容错性三者你只能同时达到其中两个,不可能同时达到"。实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。

当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。

简而言之就是:CAP 理论中分区容错性 P 是一定要满足的,在此基础上,只能满足可用性 A 或者一致性 C。

因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。


文章目录

    • [一、BASE 理论概述](#一、BASE 理论概述)
        • [1、CAP 的三选二伪命题](#1、CAP 的三选二伪命题)
        • [2、Base 理论简介](#2、Base 理论简介)
    • [二、BASE 理论的内容](#二、BASE 理论的内容)
        • [1、基本可用(Basically Available)](#1、基本可用(Basically Available))
        • [2、软状态(Soft State)](#2、软状态(Soft State))
        • [3、最终一致性(Eventually Consistent)](#3、最终一致性(Eventually Consistent))
    • [三、BASE 理论总结](#三、BASE 理论总结)

一、BASE 理论概述

1、CAP 的三选二伪命题

CAP 理论回顾:CAP 理论,也被称为 CAP 协议,指的是在一个分布式系统中,最多只能同时满足「一致性(Consistency)」、「可用性(Availability)」和「分区容错性(Partition tolerance)」这三项中的两项,不可能三者兼顾。

大部分人解释这 CAP 定律时,常常简单的表述为:"一致性、可用性、分区容错性三者你只能同时达到其中两个,不可能同时达到"。实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。

当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。

简而言之就是:CAP 理论中分区容错性 P 是一定要满足的,在此基础上,只能满足可用性 A 或者一致性 C。

因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。

2、Base 理论简介

BASE 理论是由 eBay 架构师提出的。BASE 是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网分布式系统实践的总结,是基于 CAP 定律逐步演化而来。其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,才用适当的方式来使系统打到最终一致性。

BASE 理论 是 Basically Available(基本可用),Soft State(软状态)和 Eventually Consistent(最终一致性)三个短语的缩写。


二、BASE 理论的内容

1、基本可用(Basically Available)

什么是基本可用呢?假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:

  1. 响应时间上的损失:正常情况下的搜索引擎 0.5 秒即返回给用户结果,而基本可用的搜索引擎可以在 2 秒作用返回结果。
  2. 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
2、软状态(Soft State)

什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种"硬状态"。

软状态指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。

3、最终一致性(Eventually Consistent)

上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性。这个时间期限取决于网络延时、系统负载、数据复制方案设计等等因素。

而在实际工程实践中,最终一致性分为5种:

  • 因果一致性:如果节点 A 在更新完某个数据后通知了节点 B,那么节点 B 之后对该数据的访问和修改都是基于 A 更新后的值。于此同时,和节点 A 无因果关系的节点 C 的数据访问则没有这样的限制。
  • 读己之所写:节点 A 更新一个数据后,它自身总是能访问到自身更新过的最新值,而不会看到旧值。其实也算一种因果一致性。
  • 会话一致性:将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现 "读己之所写" 的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。
  • 单调读一致性:如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧的值。
  • 单调写一致性:一个系统要能够保证来自同一个节点的写操作被顺序的执行。

在实际的实践中,这 5 种系统往往会结合使用,以构建一个具有最终一致性的分布式系统。

实际上,不只是分布式系统使用最终一致性,关系型数据库在某个功能上,也是使用最终一致性的。比如备份,数据库的复制过程是需要时间的,这个复制过程中,业务读取到的值就是旧的。当然,最终还是达成了数据一致性。这也算是一个最终一致性的经典案例。

总体来说BASE理论面向的是大型高可用、可扩展的分布式系统。与传统 ACID 特性相反,不同于 ACID 的强一致性模型,BASE 提出通过牺牲强一致性来获得可用性,并允许数据段时间内的不一致,但是最终达到一致状态。同时,在实际分布式场景中,不同业务对数据的一致性要求不一样。因此在设计中,ACID 和 BASE 理论往往又会结合使用。


三、BASE 理论总结

总体来说 BASE 理论面向的是大型高可用、可扩展的分布式系统。与传统 ACID 特性相反,不同于 ACID 的强一致性模型,BASE 提出通过牺牲强一致性来获得可用性,并允许数据段时间内的不一致,但是最终达到一致状态。同时,在实际分布式场景中,不同业务对数据的一致性要求不一样。因此在设计中,ACID 和 BASE 理论往往又会结合使用。

相关推荐
Aloudata1 分钟前
NoETL 自动化指标平台如何保障数据质量和口径一致性?
大数据·数据分析·数据质量·noetl
点点滴滴的记录13 分钟前
Java的CompletableFuture实现原理
java·开发语言·javascript
xiaolingting14 分钟前
Java 引用是4个字节还是8个字节?
java·jvm·引用·指针压缩
一只傻小白,19 分钟前
JAVA项目中freemarker静态模板技术
java·开发语言
袁庭新19 分钟前
Spring Boot项目接收前端参数的11种方式
java·springboot·袁庭新·如何接收前端数据·boot接收数据
机跃21 分钟前
递归算法常见问题(Java)
java·开发语言·算法
程序员-小李41 分钟前
餐厅下单助手系统(Java+MySQL)
java·开发语言·mysql
SelectDB技术团队43 分钟前
Apache Doris 创始人:何为“现代化”的数据仓库?
大数据·数据库·数据仓库·数据分析·doris
开心工作室_kaic1 小时前
springboot496基于java手机销售网站设计和实现(论文+源码)_kaic
java·开发语言·智能手机
像少年啦飞驰点、1 小时前
SpringBoot + HttpSession 自定义生成sessionId
java·开发语言