Java essay Java essay
首页
  • Java基础
  • Java进阶
  • 设计模式
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Zookeeper
  • Nginx
  • RabbitMQ
  • RocketMQ
  • Docker入门到精通
  • 性能分析工具
  • 数据库性能优化
  • 性能优化
  • Java基础面试必问
  • JavaWeb面试必问
  • Java框架面试必问
  • 数据库面试必问
  • 中间件面试必问
  • 分布式微服务面试必问
  • Linux面试必问
  • 计算机网络面试必问
  • 开放性问题面试问必问
  • 简介
  • 联系我

Mr.Fire

后端程序员一枚
首页
  • Java基础
  • Java进阶
  • 设计模式
  • Java你不知道的小事
  • Spring初识
  • Spring进阶
  • SpringBoot基础
  • SpringBoot进阶
  • 什么是微服务
  • SpringCloud全家桶
  • Dubbo
  • SpringCloud Alibaba
  • Zookeeper
  • Nginx
  • RabbitMQ
  • RocketMQ
  • Docker入门到精通
  • 性能分析工具
  • 数据库性能优化
  • 性能优化
  • Java基础面试必问
  • JavaWeb面试必问
  • Java框架面试必问
  • 数据库面试必问
  • 中间件面试必问
  • 分布式微服务面试必问
  • Linux面试必问
  • 计算机网络面试必问
  • 开放性问题面试问必问
  • 简介
  • 联系我
  • 微服务概述

    • 微服务是什么?
    • 分布式系统核心理论CAP和BASE理论
      • CAP
      • 分布式系统为什么不能同时满足CAP
      • BASE理论
  • SpringCloud全家桶

  • SpringCloudAlibaba

  • 分布式锁

  • 分布式微服务
  • 微服务概述
Mr.Fire
2023-03-05
目录

分布式系统核心理论CAP和BASE理论

# CAP

CAP是Consistency、Availablity、Partition-tolerance的缩写,由计算机科学家埃里克·布鲁尔在2000年提出的,所以又称布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点。

  • Consistency(一致性):如果对任意一个节点的数据就行修改成功后,所有其他节点都能读取到最新的值,那么这个系统就被认为具有严格的一致性。
  • Availability(可用性):每次请求都能获取到非错的响应,即单节点宕机可从其他节点获取到响应,但是不能保障获取到的数据为最新的数据,即和一致性互斥
  • Partition tolerance(分区容错性):当节点间出现网络分区(不同节点处于不同的子网络,子网络之间是联通的,但是子网络之间是无法联通的,也就是被切分成了孤立的集群网络),照样可以提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。

# 分布式系统为什么不能同时满足CAP

  1. 首先分布式系统一定需要容错性,即CAP中P,分布式系统是多节点,多网络分区的,而存在网络分区,当某个分区的服务出行故障,我们仍需要对外提供服务,保证可用 因此分区容错性必不可少。
  2. 满足分区容错性,还能同时满足一致性和可用性吗,加入A、B两个节点之前网络通讯中断,有以下两种情况:
    • 保证可用性:不阻塞用户请求,返回B系统的旧数据,保证服务可用
    • 保证一致性:阻塞用户请求,等待AB节点网络恢复,返回新数据

所以在分布式系统中,是不可能同时满足一致性,可用性,分区容错性的,我们只能在满足两者的同时,尽最大努力的去满足第三者

# BASE理论

BASE 是由 Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)缩写而来的。BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性,让CAP三者同时基本实现。

  • Basically Available:基本可用,就是在某个节点宕机或者发生网络分区的情况,可以让所有请求都强制走主节点,这样保证了数据的一致性可可用性,如果主节点压力比较大可以触发降级熔断机制等,或者限流等,让原先0.5秒响应的请求以更长的时间去相应
  • Soft state:软状态相对原子性来说各个要求都有所降低,原子性(硬状态),要求多个节点的数据副本都是一致的,这是一种"硬状态"。软状态(弱状态)允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延迟
  • Eventually consistent:最终一致性,一致性也分强一致性和弱一致性,而最终一致性属于弱一致性,就是系统并不保证连续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。但会尽可能保证在某个时间级别(比如秒级别)之后,可以让数据达到一致性状态。
最后更新时间: 2023/03/05, 17:02:25
微服务是什么?
SpringCloud之服务注册与发现

← 微服务是什么? SpringCloud之服务注册与发现→

最近更新
01
分布式锁的几种实现方式
03-05
02
一文详解ThreadLocal是什么
03-01
03
Alibaba Nacos配置中心动态感知原理
02-25
更多文章>
Theme by Vdoing | Copyright © 2021-2023 Mr.Fire | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式