分布式系统理论基础
文章目录
- 介绍
- 目标
- 正文
- CAP
- Consistency
- Availability
- Partition tolerance
- BASE
- Basically Available
- Soft State
- Eventually Consistent
- ACID
- atomicity
- consistency
- isolation
- durability
- 参考文档
介绍
分布式系统面临的场景往往是众口难调,“这也要,那也要”,最后可能啥都得不到,这就是分布式系统的常态,没有灵丹妙药都是妥协和退无可退;
其实类似金融中的不可能三角(固定汇率、自由市场、独立货币政策不能都得到),仔细思考会发现非常有趣;
目标
温习分布式系统的基础理论,尤其是常见的设计思想和理论,温故而知新。
正文
分布式系统的基础理论有CAP、BASE;本文主要介绍它们,以及做下diff,顺带对比ACID;
CAP
强一致性和可用性都比较好理解,最不好理解的就是分区容错性;
分区容错更多说的是一种系统(出现分区时)该如何继续下去;也就是常说的保证了P的时候,此时关注A还是C;
目前大多数互联网公司,包括个人工作过的公司基本都是AP,毕竟给老板画饼,定OKR的时候都是SLA xx个9,目前没见过人说为了一致性系统全年停服一半以上时间,没有可用性其他都没有意义,用户就是上帝;听说金融系统CP较多,但是细琢磨也够呛,毕竟数据进来了可以通过日志做清洗,停服没用户、流量进来,公司都活不下去谈其他似乎也不合理(参考铁路的抢票系统);
曾经在国内top级的电商公司做分布式存储,为了保证可用性,在流量最大的那几天默认是忽视一致性的, “池塘先修大点,鱼进来了就跑不了,不行我们再下水去捞呗”,通过日志的形式把所有流量都兜住,然后扩容上大规模计算集群异步做流量回放,降噪、聚合、汇总保证最终一致性,熔断、降低更是闻所未闻,毕竟没人会承认自己服务扛不住了,要在双11掉链子(毕竟在誓师大会上亲眼见过老板们赌咒发誓承诺100%没问题);迫于现实的无奈实践了BASE理论,想来也是”得道多助,天助我也“。
Consistency
(强)一致性 注意国内翻译的原因往往忽略了强一致性,而是翻译为一致性;
指的是请求分布式系统任意一节点拿到的数据都是一致且是最新版本的;也就意味着所有节点上的数据都是完全一致(版本也一致,且是最新的),节点/数据不存在中间状态;
Availability
可用性
指的是每次请求收到的响应都是非异常;
Partition tolerance
分区容错性
指的是当通信故障时,系统发生了分区,此时系统能否继续运行,按照何种方式对外提供服务(A还是C);
BASE
现有的,或者说大多数系统基本都是BASE的最佳实践者,系统的第一目标是可用,一致性可通过其他手段“慢慢”实现,或者说当系统可以承担一定时间内的数据不一致造成的损失那么就没有必要花费更多成本去实现强一致性;
比如消息队列领域Kafka通过Zookeeper实现强一致性约束,导致服务可用性相较于RocketMQ等差了很多,反观RocketMQ等对于强一致性的约束更为宽泛,甚至变成可配置项,如果要求走强一致性那么就需要开启同步刷盘且ALLACK,否则可以通过异步等方式提高可用性,降低一致性,按需索取;
最终一致性的范例就是Consul(协议Gossip),原理类似八卦,一传十,十传百,理论上总归所有人都能知道;
Basically Available
基本可用
参考CAP的可用性
Soft State
软状态
数据的状态不是不可修改的,允许数据/节点存在中间状态;
Eventually Consistent
最终一致性
数据/节点经过一定时间后,从中间状态最终变成一致,实现所有数据/节点的状态一致;
ACID
atomicity
原子性(atomicity,或称不可分割性)
consistency
一致性(consistency)
isolation
隔离性(isolation,又称独立性)
durability
持久性(durability)
参考文档
数据密集型应用系统
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
分布式系统理论基础
文章目录 介绍目标 正文CAPConsistencyAvailabilityPartition tolerance BASEBasically AvailableSoft StateEventually Consistent ACIDatomicityconsistencyisolationdurability 参考文档 介绍 分布式系统面临的场景往往是众口难调,“这也要,那也要”…...
![](https://www.ngui.cc/images/no-images.jpg)
mfc 编辑框限制
DoDataExchange由框架调用,作用是交互并且验证对话框数据,主要由(DDX) 和 (DDV)宏实现。 永远不要直接调用这个函数,而是通过UpdateData(TRUE/FALSE)实现控件与变量之间值的传递。 当然你也可以不使用DoDataExchange而完成控件与变量之间值…...
![](https://img-blog.csdnimg.cn/c7939fedd203484e881e58970cfde6cd.png)
web基础与tomcat环境部署
一. 简述静态网页和动态网页的区别。 请求响应信息,发给客户端进行处理,由浏览器进行解析,显示的页面称为静态页面。处理文件类型如.html、jpg、.gif、.mp4、.swf、.avi、.wmv、.flv等 请求响应信息,发给事务端进行处理࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
Go 变量
在Go中,有不同的变量类型,例如: int 存储整数(整数),例如123或-123float32 存储浮点数字,带小数,例如19.99或-19.99string - 存储文本,例如“ Hello World”。字符串值用…...
![](https://img-blog.csdnimg.cn/9d3779ae973a43d587c56ee650440dc5.png)
【雷达通信】非相干多视处理(CSA)(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://img-blog.csdnimg.cn/09a2c6bb9fd24f4d8a222a45bd7debc0.png)
73. 矩阵置零
题目链接:力扣 解题思路: 方法一:比较容易想到的方向,使用两个数组row和col保存有0的行或者列,然后将有0的那一行或那一列的所有元素都设置为0 AC代码 class Solution {public void setZeroes(int[][] matrix) {in…...
![](https://www.ngui.cc/images/no-images.jpg)
‘大数据技术与应用’和‘数据科学与大数据技术’有什么区别
一、侧重点不同 ‘大数据技术与应用’主要侧重于大数据的存储、处理和分析技术、包括数据挖掘、机器学习、数据仓库、分布式计算等方面的研究,旨在开发大数据相关的应用程序和系统,以满足商业和企业的需求。 ‘数据科学与大数据技术’则更加注重数据本…...
![](https://www.ngui.cc/images/no-images.jpg)
没有jsoup,rust怎么解析html呢?
在 Rust 中,你可以使用各种库来解析网页内容。一个常用的库是 reqwest ,它提供了一个简单的方式来发送 HTTP 请求并获取网页内容。另外,你可以使用 scraper 或 select 等库来解析 HTML 或 XML 格式的网页内容。 下面是一个使用 reqwest 和 sc…...
![](https://img-blog.csdnimg.cn/75cdf47cdb274013aca883c215af2ac0.png)
【C高级】Day4 shell脚本 排序
1. 整理思维导图 2. 写一个函数,获取用户的uid和gid并使用变量接收 #!/bin/bash function getid() {uidid -ugidid -g }getid echo "uid$uid" echo "gid$gid"3. 整理冒泡排序、选择排序和快速排序的代码 #include <myhead.h>void Inp…...
![](https://img-blog.csdnimg.cn/img_convert/26e0f2248b32339b3a4eefcd347a9559.png)
大模型开发(十六):从0到1构建一个高度自动化的AI项目开发流程(中)
全文共1w余字,预计阅读时间约40~60分钟 | 满满干货(附代码),建议收藏! 本文目标:通过LtM提示流程实现自动构建符合要求的函数,并通过实验逐步完整测试code_generate函数功能。 代码下载点这里 一、介绍 此篇文章为…...
![](https://www.ngui.cc/images/no-images.jpg)
【深入了解pytorch】PyTorch强化学习:强化学习的基本概念、马尔可夫决策过程(MDP)和常见的强化学习算法
【深入了解pytorch】PyTorch强化学习:强化学习的基本概念、马尔可夫决策过程(MDP)和常见的强化学习算法 PyTorch强化学习:介绍强化学习的基本概念、马尔可夫决策过程(MDP)和常见的强化学习算法引言强化学习的基本概念状态(State)动作(Action)奖励(Reward)策略(Pol…...
![](https://img-blog.csdnimg.cn/fc711854d5764fb69322ef527326e7b8.png)
尚硅谷张天禹Vue2+Vue3笔记(待续)
简介 什么是Vue? 一套用于构建用户界面的渐进式JavaScript框架。将数据转变成用户可看到的界面。 什么是渐进式? Vue可以自底向上逐层的应用 简单应用:只需一个轻量小巧的核心库 复杂应用:可以引入各式各样的Vue插件 Vue的特点是什么? 1.采…...
![](https://img-blog.csdnimg.cn/d4e6665cffbd4a93afdb5d22f70b9f4f.png)
深度学习(35)—— StarGAN(2)
深度学习(34)—— StarGAN(2) 完整项目在这里:欢迎造访 文章目录 深度学习(34)—— StarGAN(2)1. build model(1)generator(2&#…...
![](https://img-blog.csdnimg.cn/img_convert/1cab64cc4c49a76eee6bc448c0423ed5.png)
连续四年入选!三项荣耀!博云科技强势上榜Gartner ICT技术成熟度曲线
日,全球知名咨询公司Gartner发布了2023年度的《中国ICT技术成熟度曲线》(《Hype Cycle for ICT in China, 2023》,以下简称“报告”)。令人瞩目的是,博云科技在报告中荣获三项殊荣,入选云原生计算ÿ…...
![](https://img-blog.csdnimg.cn/b171e53666e24009a888910a799db4a1.png#pic_center)
Docker实战-操作Docker容器实战(一)
导语 在之前的分享中,我们介绍了关于如何去操作Docker镜像,下面我们来看看如何去操作容器。 简单来讲,容器是镜像运行的一个实例,与镜像不同的是镜像只能作为一个静态文件进行读取,而容器是可以在运行时进行写入操…...
![](https://img-blog.csdnimg.cn/d3bf084a0add40198fd8efd7fd3c5c84.png)
c#设计模式-行为型模式 之 观察者模式
定义: 又被称为发布-订阅(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者 对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自 …...
![](https://img-blog.csdnimg.cn/31adc79e643a4dea87ef7ede8492399c.png)
开窗积累之学习更新版
1. 开窗使用1之 count range between current row and current row 将相同排序字段的值进行函数计算 selectsku_id,substr(create_date,1,7) date_month,order_id,create_date,sku_num*price,sum(sku_num*price) over (partition by sku_id order by substr(create_date,1,7)…...
![](https://img-blog.csdnimg.cn/c41c23e7b1574a658ac2b9b4c697a100.png#pic_center)
ffplay简介
本文为相关课程的学习记录,相关分析均来源于课程的讲解,主要学习音视频相关的操作,对字幕的处理不做分析 ffplay播放器的意义 ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。 ffplay实现了播…...
![](https://www.ngui.cc/images/no-images.jpg)
mysql之limit语句详解
一、介绍 LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。 二、使用 1. 语法格式 LIMIT [位置偏移量,] 行数 其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
4.while循环
1、while语句的语法结构如下: while语句可以在条件表达式为真的前提下,循环执行指定的一段代码,直到表达式不为真时结束循环。 1.1while语法结构 while(条件表达式){// 循环体} 执行思路: 1、执行思路 当条件表达式结果为tru…...
![](https://img-blog.csdnimg.cn/c73d0b0c92c94b4ebee235112127ed68.jpeg#pic_center)
【雕爷学编程】 MicroPython动手做(35)——体验小游戏2
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...
![](https://www.ngui.cc/images/no-images.jpg)
mouseover 和 mouseenter
mouseover 和 mouseenter 事件是 JavaScript 中常用的两个鼠标事件,它们有一些区别: 触发条件: mouseover 事件在鼠标指针从元素外部进入元素内部时触发,包括子元素。换句话说,只要鼠标进入元素或其子元素,就会触发 mo…...
![](https://img-blog.csdnimg.cn/72eb640e48414ad1b229141284bc3d43.png)
[JavaScript游戏开发] 绘制Q版地图、键盘上下左右地图场景切换
系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 第二章 跟随人物二维动态地图绘制、自动寻径、小地图显示(人物红点显示) 第三章 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测 第四章 绘制Q版地图、键盘上下左右地图场景切换 文章目录 系列文章目录前言一、本章节…...
![](https://img-blog.csdnimg.cn/b58aa9fd984b4e8cb43438529e2c20ff.png)
CI/CD持续集成持续发布(jenkins)
1.背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…...
![](https://img-blog.csdnimg.cn/19f7e8e515cd4eada3d3c67fbeddce92.png)
Qt5.14.2+QtCreator+PDB 查看源码
1. 在Creator添加源码 2. 安装PDB文件 Qt下载时没有整合最新的PDB文件下载,如果没有安装PDB文件,即使安装了src也无法调试。 双击MaintenanceTool.exe->设置->资料档案库->临时资料档案库->添加按钮,添加如下下载源:…...
![](https://img-blog.csdnimg.cn/d2372fdafe1a4d6399bb9a8fe0549d31.png)
DOM基础获取元素+事件基础+操作元素
一.DOM简介 DOM,全称“Document Object Model(文档对象模型)”,它是由W3C定义的一个标准。 在实际开发中,我们有时候需要实现鼠标移到某个元素上面时就改变颜色,或者动态添加元素或者删除元素等。其实这些效…...
![](https://www.ngui.cc/images/no-images.jpg)
MATLAB——感知神经网络学习程序
学习目标:从学习第一个最简单的神经网络案例开启学习之路 感知器神经网络 用于点的分类 clear all; close all; P[0 0 1 1;0 1 0 1]; %输入向量 T[0 1 1 1]; %目标向量 netnewp(minmax(P),1,hardlim,lea…...
![](https://img-blog.csdnimg.cn/51a3aceb2ba84aa5a5a2d7b8ce28a09f.png#pic_center)
SpringBoot中事务失效的原因
SpringBoot中事务失效的原因 文章目录 SpringBoot中事务失效的原因一、事务方法非public修饰二、非事务方法调用事务方法三、事务方法的异常被捕获四、事务异常类型不对五、事务传播行为不对六、没有被Spring管理6.1、暴漏代理对象6.2、使用代理对象 常见的事务失效原因包括如下…...
![](https://www.ngui.cc/images/no-images.jpg)
Webstorm的一些常用快捷键
下面是Webstorm的一些常用快捷键: ctrl shift n: 打开工程中的文件,目的是打开当前工程下任意目录的文件。ctrl j: 输出模板ctrl b: 跳到变量申明处ctrl alt T: 围绕包裹代码(包括zencoding的Wrap with Abbreviation)ctrl []: 匹配 {}[]ctrl F1…...
![](https://img-blog.csdnimg.cn/547c02267e3e4411947290f0c10864dd.jpeg)
系统集成项目成本管理
在项目中,成本是指项目活动或其组成部分的货币价值或价格,包括为实施、完成或创造该活动或其组成部分所需资源的货币价值。具体的成本一般包括直接工时、其他百接费用、间接工时、其他间接费用以及采购价格。 项目全过程所耗用的各种成本的总和为项目成本…...
![](/images/no-images.jpg)
东台专业做网站/株洲网站设计外包首选
5.1 Laravel中的文件上传 文件系统 Laravel 的文件系统是基于 Frank de Jonge 的 Flysystem 扩展包 提供了简单的接口,可以操作本地端空间、Amazong S3、Rackspace Clound Storage 可以非常简单的切换不同的保存方式,但仍使用相同的api操作 配置文件…...
![](https://yqfile.alicdn.com/9f9a1a4103f441be24cf9f979a1edb5cb13967b9.png)
山西人工智能建站系统软件/淘宝店铺怎么引流推广
本节书摘来自异步社区《Android 应用案例开发大全(第二版)》一书中的第6章,第6.6节Android源代码与过滤器,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.6 Android源代码与过滤器Android开发权威指…...
![](https://img-blog.csdnimg.cn/2021011308564938.png)
wordpress 又拍/什么是交换链接
php中用cmd执行命令 关于cmd中执行命令路径包含空格的解决办法 1)最简单的方法就是给路径名上加上“” 然后cd或执行即可; 2)用缩写。比如c:\Program Files缩写为c:\Progra~1,再来刨根问底查查这个命名是否有规则,…...
![](/images/no-images.jpg)
哪些人做数据监测网站/天津的网络优化公司排名
//典型后中省树,这种方法必须有 中序序列来确定根的位置,然后二分建树; //因为用的vc,之前用序列位置建树通不过,用坐标建树通过了,怀疑vc的功能限制,有时间再来测试,眼下感觉还是坐…...
![](/images/no-images.jpg)
做外贸一般用哪些网站好/饥饿营销案例
这两年少儿编程教育如火如荼,科技和政策的推动让家长越来越意识到编程的重要性。随着人工智能的发展和应用深入,编程也慢慢将成为每一个孩子的必备基础技能。但与此同时,也有很多国内家长对少儿编程这个词比较陌生,很多家长对少儿…...
![](https://img-blog.csdnimg.cn/20181202093301534.png)
网站建设上的新闻/中山seo推广优化
1.修改网卡,修改配置文件/etc/network/interfaces之后,重启network出现错误:Unit network.service failed to load。 不用service network restart 用service network-manager restart重启,不会报错。如果没有用,只…...