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

cap分布式理论

cap 理论

cap是实现分布式系统的思想。

由3个元素组成。

Consistency(一致性)

在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。

Availability(可用性)

虽然系统内部会出现一些故障,但整体一直会对外提供服务,不至于崩溃。比如有10台 server,其中4台 server 出现了故障,经过特殊处理,把请求交给剩余的6台运行正常的 server,整体还在运行中,没有因为4台出现故障的 server 造成整体失效,实现高可用。

Partition Tolerance(分区容忍性)

有 C 和 D 两台 server,C 在中国,D 在美国,如果发生网络异常,则 C 和 D 在不同网络分区中可以正常运行。

实现分布式理论基本上通过算法 paxos 和 gossip 来作为理论指导

可以分成3种组合:CA、AP、CP

在网络环境中,网络不可能不出现故障,所以 P 一定是存在的,一定要保证 P 的功能是正常的。

在 P 必须存在的情况下,CAP 理论定义出两种组合,AP 和 CP

AP

代表在分区的情况下保证高可用,多台机器出现了问题至少有一个可用。

CP

代表在分区的情况下保障一致性,要么全部同步要么不同步。类似于关系数据库的事务特性ACID,全部sql要么全部执行成功,要么全部不成功,不成功的话需要回滚到之前状态。

为什么当 P 存在时,C 和 A 不能同时存在呢?

有 A 和 B 主从备份分布式系统,当 client1 向 A 写入数据时,为了保证两者的一致性,必须使用锁来避免 client2 从 B 读取出旧的数据,client1 向 A 和 B 写完数据后再释放锁。如果这样做就无法保证 A 的可用性,因为有锁的存在,client2 一直是阻塞状态,B 不能提供服务,所以一致性和高可用不可能同时存在。如果不在一个网络环境中,加锁的操作资源消耗是相当大。

如果发生网络分区(脑裂)的情况,则 A 和 B 的主从架构不能保证数据的一致性,client2 想要读取最新正确的数据是不能实现的,除非放弃高可用特性或放弃一致性特性,所以 C 和 A 不可能同时存在。

很多开源组件能看到这个理念的实践

zookeeper

cp,因为只要一个 leader,所有的写入只能通过 leader 执行,写入完成后同步给 follower。

redis 集群

ap,因为集群保证了是在高可用的基础上增加了分布式的功能,所以能做到ap,可以做到一致性,但是不是强一致性,是最终一致性,因为主从复制的异步导致的。

mysql 集群

ap 和 cp 都支持。

至于选择 ap 还是 cp,需要看实际情况侧重于高可用还是一致性,对于一致性要求是强一致性还是最终一致性,有的组件两种组合都支持。有的只支持一种,具体要看实际情况具体选择。

参考链接

Paxos、Raft、ZAB、Gossip 分布式一致性算法理解 - 简书

相关文章:

cap分布式理论

cap 理论 cap是实现分布式系统的思想。 由3个元素组成。 Consistency(一致性) 在任何对等 server 上读取的数据都是最新版,不会读取出旧数据。比如 zookeeper 集群,从任何一台节点读取出来的数据是一致的。 Availability&…...

asp.net core 如何统一json序列化格式

oldconfig.AllFields Newtonsoft.Json.JsonConvert.SerializeObject(sqlParameters.AllFields);在start.cs文件中 JsonConvert.DefaultSettings new Func<JsonSerializerSettings>(() >{JsonSerializerSettings jsonsetting new JsonSerializerSettings(){Formatt…...

DALL·E 3 ChatGPT-4的梦幻联动

核心内容&#xff1a;DALLE 3 & ChatGPT-4的梦幻联动 hello&#xff0c;我是小索奇&#xff0c;最近DALL结合ChatGPT4的话题逐渐上升了起来&#xff0c;今天就带大家探索一下~ DALLE的主要功能是根据文本描述来生成图片。你可以告诉它一个穿着皮草的西瓜&#xff0c;它就能…...

linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04

write&#xff1a;xxx has messages disabled 问题 被这问题折磨了好久&#xff0c;搜都搜不到&#xff0c;还是灵机一动想到的。 很多 帖子说&#xff0c;要使用 mesg y用了还是没有用&#xff0c;后面我登录了很多用户&#xff0c;发现只有root用户可以给别的用户使用write…...

ffmpeg批量转换ape/wav为mp3 (linux, mac适用)

在保存了ape文件的文件夹下建一个mp3子目录&#xff0c;打开终端并进入ape目录&#xff0c;然后执行脚本&#xff08;直接粘贴到终端上面&#xff0c;回车键执行&#xff09;&#xff1a; for i in *.apedo ffmpeg -i "$i" -y -acodec libmp3lame -aq 0 "./mp3…...

自动生成JPA bean及repository生成简陋工具

因为工具不太灵活&#xff0c;手写了一个&#xff0c;没啥技术难度&#xff0c;纯堆代码量 import java.io.File; import java.io.FileOutputStream; import java.nio.charset.Charset; import java.sql.*; import java.util.*;/*** JPA dao自动生成工具*/ public class JpaGe…...

vue3+vite+uniapp 封装一个省市区组件

一、预览图 二、使用前的一些注意事项 只支持在 uniapp vue3 项目中使用支持微信小程序和h5 (app端没有测试过)ui库用的 uview-plus省市区数据用的是 vant-ui 提供的一个赖库 vant/area-data 三、组件代码 <template><u-popup :show"show" type"botto…...

OpenCV报错:AttributeError: module ‘cv2.cv2‘ has no attribute ‘SIFT_create‘

报错位置&#xff1a; sift cv2.SIFT_create()报错原因&#xff1a;opencv将SIFT等算法整合到xfeatures2d集合里面了。 改为&#xff1a; sift cv2.xfeatures2d.SIFT_create()...

通用监控视频web播放方案

业务场景 对接监控视频&#xff0c;实现海康大华等监控摄像头的实时画面在web端播放 方案一&#xff0c;使用 RTSP2webnode.jsffmpeg 说明&#xff1a;需要node环境&#xff0c;原理就是RTSP2web实时调用ffmpeg解码。使用单独html页面部署到服务器后&#xff0c;在项目中需要播…...

C++基础知识3

1、为什么构造函数不能是虚构造&#xff1f; 虚函数对应一个虚表vtale&#xff0c;这个表的地址是存储在对象的内存空间的。如果将构造函数设置为虚函数&#xff0c;就需要到虚表中调用&#xff0c;但这时候对象没有实例化&#xff0c;没有内存分配&#xff0c;虚表就不存在&am…...

【配置vscode编写python代码并输出到外部控制台】

配置vscode编写python代码并输出到外部控制台 1、扩展中添加python插件 2、打开一个文件夹&#xff0c;在里面新建一个.py文件&#xff0c;粘贴print(‘你好啊&#xff01;’)并运行 运行结果如下: 3、点击调试点击如下图 生成launch.json&#xff0c;将console后面改成exte…...

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

目录 前言 一、RK3588 MIPI接口介绍 二、xs9922B视频解码芯片介绍 三、原理图连接...

DVWA -xss

什么是XSS 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击&#xff0c;攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时&#xff0c;就会发生XSS。 跨站脚本攻击&#xff0c;XSS(Cross Site S…...

C语言编程实现只有一个未知数的两个多项式合并的程序

背景&#xff1a; 直接看题目把&#xff01;就是C语言写两个多项式多项式合并 题目要求&#xff1a; 1. 题目&#xff1a; 编程实现只有一个未知数的两个多项式合并的程序。如&#xff1a; 3x^26x7 和 5x^2-2x9合并结果为8x^24x16。 2. 设计要求 &#xff08;1&#xff09…...

C# .net创建一个MVC框架工程

二、C# .net创建一个MVC框架工程 1.步骤 首先打开VS &#xff0c;然后点击创建新项目 在三个选项框中输入我们需要的项目条件 最后一步创建完毕 创建会在资源解决方案生成如图&#xff1a;...

Deep learning of free boundary and Stefan problems论文阅读复现

Deep learning of free boundary and Stefan problems论文阅读复现 摘要1. 一维一相Stefan问题1.1 Direct Stefan problem1.2 Inverse Type I1.3 Inverse Type II 2. 一维二相Stefan问题2.1 Direct Stefan problem2.2 Inverse Type I2.3 Inverse Type II 3. 二维一相Stefan问题…...

LeetCode 1277. 统计全为 1 的正方形子矩阵【动态规划】1613

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。 这不&#xff0c;前段时间我们公司来了个00后&#xff0c;工作都没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…...

360 G800行车记录仪,不使用降压线如何开机,8芯插头的定义。

G800记录仪的插头是这样的&#xff0c;图中标出了线的颜色。其中红色为常电V&#xff0c;黑色为GND负极&#xff0c;黄色为ACC受车是否启动控制。 这个记录仪原装的电源线没有降压功能&#xff0c;所以这里的V是12V。 记录仪内部有电源板&#xff0c;负责将12V降压为5V。 如果…...

vue2踩坑之项目:Swiper轮播图使用

首先安装swiper插件 npm i swiper5 安装出现错误&#xff1a;npm ERR npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm ERR! node_modules/esl…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...