详解分布式系统核心概念——CAP、CP和AP

news2025/1/16 2:44:25

最近研究Sykwalking,当调研 oap如何进行集群部署时发现:skywalking oap 之间本身不能搭建集群,需要一个集群管理器来组建集群,它支持nacos、zookeeper、Kubernetes、Consul、Etcd 五种集群管理器。我重点比较了nacos和zookeeper,发现二者最大的区别是Zookeeper采用了CP架构,nacos既支持CP架构又支持AP架构。关于CP 和AP属于CAP理论的东东,而CAP理论作为分布式系统的基石,所以在这里我对分布式系统和CAP理论做一个总结。

分布式系统

目前的互联网应用用户数量越来越多,产生的数据规模也越来越大,应用系统必须支持高并发访问和海量数据处理的需求,显然这是集中式架构无法解决的问题,于是分布式系统成为了主角,在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。

布式系统的核心是可扩展性,通过对服务、存储的扩展,来提高系统的处理能力,通过对多台服务器协同工作,来完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。另外不出现单点故障,单点不影响整体,也是分布式系统的设计目标之一。

由于分布式系统的特点,所以在分布式环境中更容易出现问题,例如节点之间通信失败、网络分区故障、多个副本的数据不一致等,为了更好地在分布式系统下进行开发,专家们提出了一系列的理论,其中具有代表性的就是 CAP 理论。

什么是CAP

  • CAP

CAP 理论可以表述为,一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三项中的两项。

在分布式中P是必须要有的,所以分布式有CP和AP两种模式。AP的就是可用性强,一致性弱;CP就是一致性强,可用性弱。我们可以把强弱理解成优缺点。

  • 一致性

指“所有节点同时看到相同的数据”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,等同于所有节点拥有数据的最新版本。我们可以更深入的理解一致性,它是指任何的读写都应该看起来是“原子”的,或串行的,写后面的读一定能读到前面写的内容,所有的读写请求都好像被全局排序;

  • 可用性

指“任何时候,读写都是成功的”,即服务一直可用,而且是正常响应时间。我们平时会看到一些公司的对外说自己系统稳定性已经做到 3 个 9、4 个 9,即 99.9%、99.99%,这里的 N 个 9 就是对可用性的一个描述,叫做 SLA,即服务水平协议。比如我们说年度 99.99% 的 SLA,则计算公式如下:

1年 = 365天 = 8760小时

99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟

是不是很牛逼,系统一年里只有52.6分钟不能提供服务。

  • 分区容忍性

指“当部分节点出现消息丢失或者分区故障的时候,分布式系统仍然能够继续运行”,即系统容忍网络出现分区,并且在遇到某节点或网络分区之间网络不可达的情况下,仍然能够对外提供满足一致性和可用性的服务。

  • 分区容忍性和可用性的区别

分区容忍性和可用性二者很像,在这里我们做一下简单的总结:

分区容错性:因为网络等硬件引起的问题,一台服务器崩溃了,保证能在其他服务器上也能顺利完成业务。

可用性:因为软件代码层面的问题,一台服务器上的服务崩溃了,保证能在其他服务器上完成该业务。

二者主要区别是:分区容错性更偏向于硬件引起的问题;可用性更偏向于软件代码层面的问题。

在分布式系统中,由于系统的各层拆分,P 是确定的,CAP 的应用模型就是 CP 架构和 AP 架构。分布式系统所关注的,就是在 Partition Tolerance 的前提下,如何实现更好的 A (系统可用性)和更稳定的 C(数据一致性)。

CP和AP的典型应用

CP典型应用就是电商的产品价格,商家修改价格后要实时生效。

AP的典型应用就是各大内容网站的点赞和评论功能,用户不太在意点赞和评论的实时性,更在意的时查看感兴趣内容的可访问性

原创不易,如果文章帮到了您,劳烦点赞转发!

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

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

相关文章

python中的闭包和装饰器

目录 一.闭包 1.闭包的用途和用法 简单闭包 2.nonlocal关键字的作用 ATM闭包实现 注意事项 小结 二.装饰器 装饰器的一般写法(闭包写法) 装饰器的语法糖写法 一.闭包 1.闭包的用途和用法 先看如下代码: 通过全局变量account_amount来…

【Python学习】条件和循环

前言 往期文章 【Python学习】列表和元组 【Python学习】字典和集合 条件控制 简单来说:当判断的条件为真时,执行某种代码逻辑,这就是条件控制。 那么在讲条件控制之前,可以给大家讲一个程序员当中流传的比较真实的一个例子…

CUDA规约算法(加和)

1.block内相邻元素规约(线程不连续) 上图为1个block内的16个线程的操作示意: 第0个线程会和第1,2,4,8发生关系 第2个线程会和第3个线程发生关系 第4个线程会和第5,6个线程发生关系 ... 以上…

这7个网络设备配置接口基本参数要牢记,从此接口相关配置不用怕!

本文给大家介绍网络设备配置接口基本参数,包括接口描述信息、接口流量统计时间间隔功能以及开启或关闭接口。 进入接口视图 背景信息 对接口进行基本配置前,需要进入接口视图。 操作步骤 执行命令system-view,进入系统视图。执行命令inte…

Widget小组件

目录 技能点 Widget背调 a. 设计定位 b. Widget小组件限制 c. Widget小组件 开发须知 d. 什么是 SwiftUI App Group 数据共享 a. 配置 App Groups 1、开发者账号配置,并更新pp证书 2、Xcode配置 b. 缓存数据共享-代码实现 1、文件存储 2. 沙盒存储&…

【MySQL】运算符及相关函数详解

序号系列文章3【MySQL】MySQL基本数据类型4【MySQL】MySQL表的七大约束5【MySQL】字符集与校对集详解6【MySQL】MySQL单表操作详解文章目录前言MySQL运算符1,算术运算符1.1,算术运算符的基本使用1.2,常用数学函数的基本使用2,比较…

vulnhub DC系列 DC-7

总结:社工尝试 目录 下载地址 漏洞分析 信息收集 ssh webshell 命令执行 提权 下载地址 DC-7.zip (Size: 939 MB)Download: http://www.five86.com/downloads/DC-7.zipDownload (Mirror): https://download.vulnhub.com/dc/DC-7.zip漏洞分析 信息收集 这里还…

代码随想录算法训练营第13天 239.滑动窗口最大值、347. 前 K 个高频元素

代码随想录算法训练营第13天 239.滑动窗口最大值、347. 前 K 个高频元素 滑动窗口最大值 力扣题目链接(opens new window) 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只…

YonBuilder 应用构建教程之移动端扩展

YonBuilder 移动端扩展 在上一篇文章中,我们通过对员工信息实体的移动端页面构建来对 YonBuilder 移动端配置的基础流程进行了简单的介绍,本篇文章则通过之前搭建的出入库实体来进行扩展,主要介绍如何在移动端中添加跳转页面的功能以及通过函…

大连理工大学(开发区校区)2023年新生赛(验题人题解)

难度分布 根据排行榜情况,大致分布如下: Easy:AIDE Middle:CJF Hard:GBH 题解 A. Hello World.(题意实现) 直接输出Hello world. I. lgl想签到(题意实现) 统计周…

组件优化 - 多project方案

背景 经销商项目目前是混合项目,有oc、swift、flutter,并对应各自的一些三方库,并随着需求的增加,项目代码体积也越来越大,编译速度也相应的慢了很多,这也严重影响了开发速度,故目前的期望是可…

Linux:git工具

文章目录一.git的下载二.如何使用git将代码传到远端仓库2.1在gitee上新建一个仓库2.2克隆仓库到本地git clone2.3将文件添加到本地仓库git add2.4将代码提交到本地仓库git commit -m2.5将本地仓库的内容传到远端仓库中git push三.git的一些其它使用3.1git log查看日志3.2git rm…

【魅力开源】第5集:通过Odoo实现将EXCEL表费用明细,快速导入到ERP总账系统生成凭证

文章目录前言一、拿到这样的一张表二、实现过程1. 控制器(Controller)2. 模型(Model)3. 视图(View)4. 返回生成的凭证号最后前言 这是一个小功能。 财务小姐姐每个月需要不少的时间去手录费用凭证,这个功能可以实现将半天一天时间内完成的事情,在1小时内…

204:vue+openlayers 学习Attribution各种API,示例展示自定义版权信息

第204个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中个性化修改版权信息,这里主要涉及到Attribution各种属性的设置,所以这里先列出属性的信息,然后用示例来展示如何使用。 名称类型说明classNamestring (默认为“ol-attribution”)CSS 类名。targetH…

Acwing---1219.移动距离

移动距离1.题目2.基本思想3.代码实现1.题目 X星球居民小区的楼房全是一样的,并且按矩阵样式排列。 其楼房的编号为 1,2,3… 当排满一行时,从下一行相邻的楼往反方向排号。 比如:当小区排号宽度为 6 时,开始情形如下&#xff1a…

使用Anaconda(3-5.1.0对应 python3.6.3)搭建OpenCV(3.5.1.15)环境和Jupyter Notebook

使用Anaconda搭建python和OpenCV环境1、 Anaconda3-5.1.0下载Anaconda3-5.1.0下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/下载 Anaconda3-5.1.0-Windows-x86_64.exe 对应 python3.6.32、安装Anaconda全程下一步,修改了一下默认安装…

如何学习C++图像处理?

学习C图像处理前首先的明确图像处理是什么,它是如何定义的?它能给我们带来哪些便利?之后根据需求选择合适的编程语言,C or python?图像处理(image processing),用计算机对图像进行分析,以达到所…

你还不知道怎么实现财富自由吗?一篇文章手把手教你入门!

程序猿作为互联网行业的翘楚,压力多多收获也多多。 如果想在上班之余还有外快拿,最好的方法就是利用业余时间做做兼职赚外快,不仅可以充实自己的钱包,还可以磨练自己的技术,一举两得。 找外快可是一门技术活&#xf…

三万秃发人群撑起一个IPO,大麦植发能成功上市吗?

不断壮大的“脱发”大军正撑起植发这一条黄金赛道。据弗若斯特沙利文报告,2020年中国毛发医疗服务的市场规模已达到184亿元,预计到2030年将达到1381亿元,CAGR为22.3%。 由于市场规模增长较快,资本也加强了对植发行业的关注&#…

python实现给pdf文件加骑缝章效果

骑缝章是在合同上经常看到的一种盖章方式,如下图所示。现在电子合同的应用已经越来越广泛,合同上如何实现骑缝章的效果 ,也是有必要研究一下的。本文几乎Python的方式,讲述了如果对印章图片进行处理,然后,实…