分布式——BASE理论

简单来说:

BASE(Basically Available、Soft state、Eventual consistency)是基于CAP理论逐步演化而来的,核心思想是即便不能达到强一致性(Strong consistency),也可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。

BA基本可用,就是一种妥协,在节点故障或系统过载,通过牺牲非核心功能可用性,保障核心功能的稳定运行。(流量削峰,延迟响应异步处理,体验降级,过载保护熔断/限流,故障隔离)

S软状态,允许系统中的数据存在中间状态,允许系统存在数据延迟

E最终一致性,不能一直处于软状态,一定时间期限后,保证所有副本一致性

  • 有点BA对应AP,S对应P,E对应CP意味

1. 理论内容

BASE 理论是对 CAP 理论的一种延伸和补充,它是基于 Basically Available(基本可用)、Soft state(软状态)和 Eventually Consistent(最终一致性)这三个特性来描述分布式系统的。

  • 基本可用:意味着系统在出现故障或者高负载等异常情况下,虽然不能像正常情况那样提供完整的服务,但仍然能够提供部分服务,以满足用户的基本需求。就是不断妥协一些方面来保证基本可用。例如,在电商大促期间,由于订单量暴增,系统可能会限制某些非关键功能的使用,如商品评论功能可能会暂时关闭,或者降低图片的分辨率以节省网络资源,这样虽然系统的服务有所缺失,但仍然可以让用户完成基本的购物流程,即实现了基本可用。

  • 软状态:指的是系统中的数据存在一种介于已完成和未完成之间的中间状态,这种状态是可以被接受的。比如,在一个分布式存储系统中,当用户上传一份文件时,可能在某个瞬间,系统中的某些节点已经接收到了文件的部分内容,而其他节点还没有接收到,这就是一种软状态。这种状态在系统运行过程中是正常存在的,并且会随着时间的推移逐步趋向于完成状态。

  • 最终一致性:表示尽管在系统运行过程中可能会出现数据不一致的情况,但经过一段时间后,系统中的所有数据副本最终会达到一致状态。例如,在一个分布式数据库系统中,不同节点上的数据可能会因为网络分区、并发操作等原因出现不一致,但随着网络分区的恢复、并发操作的完成等,经过一定的时间,所有节点上的数据最终会变得一致。

2. 设计理念

BASE 理论的设计理念是接受分布式系统中存在的不确定性和不完善性,不强求在任何时刻都保持数据的一致性,而是通过允许系统存在软状态和最终实现一致性的方式,来提高系统的灵活性和可用性。它与 CAP 理论中的 AP 系统有一定的相似性,都是在一定程度上放弃了严格的一致性要求,但 BASE 理论更强调系统在面对各种复杂情况时如何通过自身的调整和发展来实现最终的一致性,而不是简单地放弃一致性。

区别总结

  • 特性描述:

    • CAP 理论主要关注的是一致性、可用性和分区容错性这三个关键特性,并且指出在分布式系统中这三个特性之间存在着不可调和的矛盾,必须在三者之间进行权衡取舍。

    • BASE 理论则围绕基本可用、软状态和最终一致性这三个特性来描述分布式系统,它是对分布式系统在实际运行过程中可能出现的各种情况的一种描述,强调系统可以存在软状态并通过自身的发展来实现最终一致性。

  • 设计理念:

    • CAP 理论的设计理念是基于对分布式系统特性的严格定义和权衡取舍,根据不同的应用场景选择放弃其中一个特性来满足其他两个特性。

    • BASE 理论的设计理念是接受分布式系统中的不确定性和不完善性,通过允许系统存在软状态和最终一致性的方式来提高系统的灵活性和可用性,而不是像 CAP 理论那样进行严格的权衡取舍。

  • 应用场景:

    • CAP 理论在选择设计方案时,更适合用于对数据一致性要求非常高的系统(如金融交易系统)或者对可用性要求非常高的系统(如社交网络系统)等,根据具体需求选择 CP 或 AP 方案。

    • BASE 理论更适合用于那些在运行过程中可能会出现各种复杂情况(如高负载、网络分区等)的分布式系统,如电商平台、内容分发系统等,通过实现基本可用、软状态和最终一致性来应对这些复杂情况。

综上所述,CAP 理论和 BASE 理论从不同的角度对分布式系统进行了描述和分析,它们在特性描述、设计理念和应用场景等方面存在着明显的区别,在实际的分布式系统设计和开发中,需要根据具体的需求和情况选择合适的理论作为指导。

再理解

BASE(Basically Available、Soft state、Eventual consistency)是基于CAP理论逐步演化而来的,核心思想是即便不能达到强一致性(Strong consistency),也可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。


(1) BASE的主要含义:

BASE是Basically Available(基本可用)、**Soft state(软状态)和Eventually consistent(最终一致性)**三个短语的简写。

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

两个对冲理念:ACID和BASE
ACID是传统数据库常用的设计理念,追求强一致性模型。
BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

(2) Basically Available(基本可用)
基本可用本质是一种妥协,也就是出现节点故障或者系统过载时,通过牺牲非核心功能的可用性,保障核心功能的稳定运行。
实现基本可用的几个策略:

1、流量削峰(不同地区售票时间错峰出售)
以订票系统设计为例,在春运期间,开始售票前后会出现及其海量的请求峰值。
可以在不同的时间,出售不同区域的票,将访问请求错开,削弱请求峰值。

2、延迟响应,异步处理(买票排队,基于队列先收到用户买票请求,排队异步处理,延迟响应)
还以订票系统为例。用户提交购票请求后,往往会在队列中排队等待处理,可能几分钟或十几分钟后,系统才开始处理,然后响应处理结果。

3、体验降级(看到非实时数据,采用缓存数据提供服务)
以互联网系统为例,若出现网络热点事件,产生了海量的突发流量,系统过载,大量图片因为网络超时无法显示,那么可以用小图片代替原始图片,降低图片的清晰度和大小,提升系统处理能力。

4、过载保护熔断/限流,直接拒绝掉一部分请求,或者当请求队列满了,移除一部分请求,保证整体系统可用)
把接收到的请求放在指定的队列中排队处理,如果请求等待时间超时,这时直接拒绝超时请求;如果队列满了之后,就清除队列中一定数量的排队请求,保护系统不过载,实现系统基本可用。

5、 故障隔离(出现故障,做到故障隔离,避免影响其他服务)


(3) Soft state(软状态)
原子性(硬状态) -> 要求多个节点的数据副本都是一致的,这是一种"硬状态"


软状态(弱状态) -> 允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延迟。


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

image.png

稍微官方一点的说法就是:
系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。

(5) BASE总结
总的来说,BASE 理论面向的是大型高可用可扩展的分布式系统,和传统事务的 ACID 是相反的,它完全不同于 ACID 的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间是不一致的。

参考:图灵课堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5.4 PCG 获取地形Layer

使用AttributeFilter:属性过滤器 节点 设置地形Layer名称和权重 效果:

使用wordpress搭建简易的信息查询系统

背景 当前有这样的一个需求,要实现让客户能够自助登录系统查询一些个人的信息,市面上没有特别符合我的需求的产品,经过一段时间的研究,想出了一个用wordpress实现简易信息查询系统,有两种方式。 方式一:使…

EasyUI弹出框行编辑,通过下拉框实现内容联动

EasyUI弹出框行编辑,通过下拉框实现内容联动 需求 实现用户支付方式配置,当弹出框加载出来的时候,显示用户现有的支付方式,datagrid的第一列为conbobox,下来选择之后实现后面的数据直接填充; 点击新增:新…

ssm079基于SSM框架云趣科技客户管理系统+jsp(论文+源码)_kaic

毕 业 设 计(论 文) 题目:客户管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本客户管理系统就是在这…

PICO+Unity 用手柄点击UI界面

如果UI要跟随头显,可将Canvas放置到XR Origin->Camera Offset->Main Camera下 1.Canvas添加TrackedDeviceGraphicRaycaster组件 2.EventSystem移动默认的Standard Input Module,添加XRUIInputModule组件 3.(可选)设置射线可…

apt镜像源制作-ubuntu22.04

# 安装必要的软件 sudo apt-get install -y apt-mirror # 编辑/etc/apt/mirror.list,添加以下内容 set base_path /var/spool/apt-mirror # 指定要镜像的Ubuntu发布和组件-null dir jammy-updates main restricted universe multiverse # 镜像的Ubuntu发布和组件的URL-n…

springboot初体验

目录 环境 controller 修改端口号 更改banner图标 运行结果 最核心的:自动装配 环境 jdk17springboot3.3.5maven3.8.2 controller controller层和启动类同级 package com.example.demo.controller; ​ import org.springframework.web.bind.annotation.RequestMapping;…

Q:警告无法解释导入PIL Pylance(reportMisssingIMports)

问题显示: 解决方法: 1.确认安装 Pillow:在 VS Code 的终端中运行以下命令,以确保环境中安装了 Pillow pip install pillow2.选择正确的解释器:在 VS Code 中,按下 CtrlShiftP,输入并选择 “P…

python中常见的8种数据结构之一数组的应用

在Python中,数组是一种常见的数据结构,用于存储一系列相同类型的元素。在实际应用中,数组可以用于解决各种问题。 以下是数组在Python中的一些常见应用: 1. 存储和访问数据:数组可以用于存储和访问一组数据。可以通过…

网络安全——下载并在kali虚拟机上启动Cobalt Strike

目录 一、下载 二、上传文件到kali虚拟机 三、启动服务端 四、启动客户端 一、下载 CobaltStrike4.8汉化版带插件-CSDN博客 下载并解压后 二、上传文件到kali虚拟机 1、打开并运行kali虚拟机,查看kali的ip地址 2、打开xshell,新建连接,连…

用 Python 从零开始创建神经网络(四):激活函数(Activation Functions)

激活函数(Activation Functions) 引言1. 激活函数的种类a. 阶跃激活功能b. 线性激活函数c. Sigmoid激活函数d. ReLU 激活函数e. more 2. 为什么使用激活函数3. 隐藏层的线性激活4. 一对神经元的 ReLU 激活5. 在隐蔽层中激活 ReLU6. ReLU 激活函数代码7. …

22.oop-strust与class

OOP是什么:oop 是面向对象编程,面向对象编程是一种计算机编程架构, OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或 对象组、合而成。 OOP有什么特性: 1、封装性:也称为信息隐藏,就是将一个类的使用和实现分开…

【Linux】ubuntu安装图形化界面步骤

一、ubuntu 安装桌面环境 1、更新软件包列表(命令↓) sudo apt update 2、安装桌面环境GNOME(命令↓) sudo apt install ubuntu-desktop 3、安装完成后需要重启服务器(服务器重启命令↓) sudo reboot 二、…

【Android】轮播图——Banner

引言 Banner轮播图是一种在网页和移动应用界面设计中常见的元素,主要用于在一个固定的区域内自动或手动切换一系列图片,以展示不同的内容或信息。这个控件在软件当中经常看到,商品促销、热门歌单、头像新闻等等。它不同于ViewPgaer在于无需手…

Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览

Vue2 doc、excel、pdf、ppt、txt、图片等在线预览 安装使用目录结构直接上代码src\components\FileView\doc\index.vuesrc\components\FileView\excel\index.vuesrc\components\FileView\img\index.vuesrc\components\FileView\pdf\index.vuesrc\components\FileView\ppt\index…

[OpenGL]使用OpenGL实现硬阴影效果

一、简介 本文介绍了如何使用OpenGL实现硬阴影效果,并在最后给出了全部的代码。本文基于[OpenGL]渲染Shadow Map,实现硬阴影的流程如下: 首先,以光源为视角,渲染场景的深度图,将light space中的深度图存储…

微服务是什么 SpringCloud是什么

微服务是什么 SpringCloud是什么 一、微服务概述二、微服务架构三、单体架构四、分布式架构五、SpringCloud概述六、SpringBoot和 SpringCloud的区别与联系七、SpringCloud版本选择 一、微服务概述 微服务(MicroServices)最初是由 Martin Fowler 于 2014…

K8S node节点没有相应的pod镜像运行故障处理办法

查看从节点状态 kubectl describe node k8s-node1以下是报错提示 解决办法 需要处理node1节点上的磁盘空间,磁盘空间需要在85%内 处理后的状态 处理正常

CSS教程(四)- 字体

1、尺寸单位 px 像素单位% 百分比,参照父元素对应属性的值进行计算em 字体尺寸单位,参照父元素的字体大小计算,1em16pxrem字体尺寸单位,参照根元素的字体大小计算,1rem16px 2、字体属性 介绍 CSS Fonts (字体)属性用于定义字体…

使用storcli工具配置RAID,收藏这一篇就够了

正文共:1888 字 28 图,预估阅读时间:2 分钟 前文(怎么把银河麒麟系统装进U盘?)提到,因为国产服务器固件暂不支持直接配置RAID,所以需要使用storcli这个工具来操作。今天就从RAID配置…