当前位置: 首页 > news >正文

分布式理论

CAP和BASE

CAP

  • C一致性(Consistency)

在分布式环境下,一致性是指数据在多个副本之间能否保持一致性的特征。
在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致性的状态。

  • A可用性(Availability)

可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果
有限的时间:指尽可能短的时间内返回处理结果。
返回结果:指在有限的时间内返回正常的结果,不保证返回的是最新的结果。

  • P分区容错性(Partition)

如果是分布式系统,那么就会存在多个节点,就会存在节点故障或网络故障,所以P是不可避免的。

CAP不能同时满足:
分布式系统中,如果要保证C一致性,那么就要执行节点数据同步,同步就存在网络请求故障、逻辑执行耗时等问题,此时就不能保证节点的可用性了。如果要保证A可用性,系统尽可能的快,此时就不能保证网络请求一定成功、逻辑是否执行完成,此时就不能保证节点的一致性了。所以,在分布式系统中,只能同时满足AP或者CP。

BASE

  • BA(Basically Available)基本可用

牺牲高一致性,获得可用性和可靠性。
在分布式系统中出现不可预知故障时,允许损失部分可用性(注意,这里不等价于系统不可用)。
比如:
响应时间上的损失:系统故障时请求响应时间由原来的0.5s延长到1s,此时系统仍然可用。
系统功能上的缺失:在系统流量洪峰时为了保证核心功能稳定,将部分消费者引导到一个降级页面。

  • S(Soft state)软状态

软状态指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统的整体可用性,即允许系统各节点数据同步存在延时。

  • E(Eventually consistent)最终一致性

系统各节点一定时间后数据最终达到一致状态。

BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP理论逐步演化而来的。
BASE理论和传统的事务ACID特性是相反的,它完全不同于ACID的强一致性模型,在实际的分布式场景中,不同业务和组件对数据一致性要求是不同的,因此在具体的分布式系统中BASE理论和ACID特性是结合一起使用的。

一致性分类

  • 强一致性

又称线性一致性。
任何时刻,任何用户或节点都可以读到最近一次成功更新的副本数据,强一致性是程度要求最高的一致性要求。
一个集群要对外提供强一致性,某一个节点数据发生改变,要等到最新数据同步到其他所有节点后,才能对外提供服务。
保证强一致性,务必不能满足可用性。

  • 弱一致性

一旦某个更新成功,用户无法在一个确定的时间内读到这次更新的值,且即使在某个副本上读到了新的值,也不能保证在其他副本上可以读到新的值。

  • 最终一致性

一旦数据更新成功,各个副本上的数据最终达到完全一致的状态,但达到完全一致状态所需要的时间不能保证。

  • 顺序一致性

任何一次读,都能读到某个数据的最近一次写的数据。
对其他节点之前的修改是可见(已同步)且确定的,并且新的写入建立在已经达成同步的基础上。

http://www.lryc.cn/news/125450.html

相关文章:

  • Excel设置某列或者某行不某行不可以编辑,只读属性
  • vue elementui v-for 循环el-table-column 第一列数据变到最后一个
  • 宝塔部署阿里云盘webdav
  • Ceph分布式存储系统优化分析
  • supOS APP开发者课程练习册创建服务(命名:getPropertiesHistory)
  • 认识excel篇3之数据的有效性(数据验证)
  • adb 命令行执行单元测试
  • Ceph入门到精通-Linux下Ceph源码编译和GDB调试
  • 【c语言】动态内存管理(超详细)
  • Linux/centos上如何配置管理NFS服务器?
  • Element组件浅尝辄止5:Empty 空状态组件
  • 【华为Datacom 综合拓扑案例—分享篇】
  • springcloud3 使用openfegin实现getpost请求调用
  • 【JVM】类装载的执行过程
  • FreeRTOS(独立看门狗监测任务执行与低功耗Tickless模式)
  • 预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks
  • Python实现透明隧道爬虫ip:不影响现有网络结构
  • 并发编程系列-CompletableFuture
  • 锁粒度的粗细与时空损耗互换
  • [Android 11]使用Android Studio调试系统应用之Settings移植(七):演示用AS编译错误问题
  • MyBatis面试题
  • Lorenz系统最大lyapunov exponent的求解
  • c#实现策略模式
  • 家纺行业小程序商城搭建指南
  • Python语法基础--条件选择
  • visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)
  • 亚马逊feedback和review有什么区别
  • 新疆大学841软件工程考研
  • Vue: el-form 自定义校验规则
  • 8.14 ARM