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

前有CAP理论,后有BASE理论,分布式系统理论基石

🧑‍💻作者名称:DaenCode
🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
😎人生感悟:尝尽人生百味,方知世间冷暖。


专栏推荐

  • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
  • SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。链接>>>>>>《SpringBoot实战》

文章目录

  • 专栏推荐
  • 🌟前言
  • 🌟分布式系统
  • 🌟CAP理论
  • 🌟BASE理论
  • 🌟写在最后

🌟前言

最近学习分布式系统,其中有两大理论分别是CAP理论和BASE理论,那么到底该如何理解它们呢?本文就揭晓一下。


🌟分布式系统

在说CAP理论和BASE理论之前,先来简单概括一下分布式系统是什么?分布式系统就是多个计算机或者多个节点通过网络连接起来的一个系统。


🌟CAP理论

首先来介绍一下CAP理论,它是由国外某个大佬提出来的,具体是谁我也忘记了。这个理论最早在2000年提出,最终在2002年被证明。大致意思就是CAP理论中的这三个字母它在分布式系统中是无法被同时满足的。三个字母的具体意思见下方:

  • C(Consistency):一致性。这个一致性就是用户在访问分布式的任意节点中的数据时,都能够访问到最新的结果。
  • A(Availability):可用性。这个可用性就是用户能够正常的访问到系统中的数据。
  • P(Partition Tolerance):分区容错性。这个分区容错性指的是系统即使有节点故障或者网络故障的情况下,它也是可以运行的。

这个根据这个CAP理论来分析,分布式系统的设计方案有以下三种,可以参照下方画的草图:

  1. CA:一致性+可用性的组合。这个组合扔掉了P,这个无法保证系统的扩展性和容错性是违背分布式系统设计的初衷的。
  2. CP:一致性+分区容错性的组合。这个组合扔掉了A:可用性。这个适用于强一致性的场景,对于请求可以有部分延迟。
  3. AP:可用性+分区容错性的组合。这个适用于要求可用性,但是对于一致性不高的场景,数据最终能够达到一致性即可。

在这里插入图片描述


🌟BASE理论

BASE理论可以理解为CAP理论的权衡结果。具体解释见下方:

  • BA(Base Aviliable):基本可用。对可用性的权衡。就是功能不影响正常的使用,允许网络存在一定的时间延迟。比如说静态资源的加载、兜底数据的返回。
  • S(Soft state):软状态。允许系统的数据非强一致性,但是数据最终能够达到一致性。可以理解为数据存在一个中途状态。
  • E(Eventually consisten):最终一致性。系统会逐渐将数据的不一致性解决,最终达到一致性状态
    在这里插入图片描述

🌟写在最后

有关于前有CAP理论,后有BASE理论,分布式系统理论基石到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。

有更好的理解方法,欢迎大家指出!!!


请添加图片描述

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

相关文章:

  • HTTP、TCP、SOCKET三者之间区别和原理
  • flutter项目中常用第三方模块
  • Android 混淆使用及其字典混淆(Proguard)
  • laravel 阿里云短信发送
  • 算法----LRU缓存机制
  • 基于springboot+vue的旅游系统(前后端分离)
  • 什么是堆栈和队列?如何实现它们?
  • 编译器自动生成的构造函数
  • SpringSecurity - 认证与授权、自定义失败处理、跨域问题、认证成功/失败处理器
  • 自定义映射resultMap
  • Android修行手册 - Android Studio去掉方法参数提示、变量类型提示、方法引用Usage提示
  • 【车载开发系列】ECU Application Software程序刷新步骤
  • inject和provide的使用
  • 2023年中国研究生数学建模竞赛D题
  • Unity制作曲线进度条
  • 面试:C++ 11 智能指针
  • 设计模式——3. 抽象工厂模式
  • vscode 无法使用 compilerPath“D:.../bin/arm-none-eabi-g++.exe”解析配置。
  • Vue.js入门模板语法[上] 及Vue.js实现购物车---详细讲解
  • windows下gvim的配置
  • 基于复旦微的FMQL45T900全国产化ARM开发开发套件(核心板+底板)
  • Leetcode Top100(23)环形链表
  • 线性代数基础-行列式
  • RT-Thread(学习)
  • 【MySQL】 MySQL 死锁问题分析优化器特性及优化方案
  • 【C++面向对象侯捷】8.栈,堆和内存管理
  • 在比特币上使用可检索性证明支付存储费用
  • 使用SSE(Server-Sent Events)实现服务端给客户端发消息
  • 【Redis】使用rpm包安装redis
  • 论文阅读-Group-based Fraud Detection Network on e-Commerce Platforms