关于分布式一致性

news2024/10/4 12:26:14

一致性(consistency)

说到一致性,我们可能最先想到的数据库里的事务
这里的讨论的是分布式的一致性,事务就简化一下,只考虑Read/Write

先列举一下事务的种类:

  1. 单机的事务:多个复杂事务发生在一个节点上

  2. 分布式的事务a:多个简单事务发生在多个节点上,一个事务只涉及一个节点

  3. 分布式的事务b:多个复杂事务发生在多个节点上,一个事务可能涉及多个节点

这里就考虑2了

参考资料:
http://kaiyuan.me/2018/04/21/consistency-concept/
https://www.codedump.info/post/20220710-weekly-22/
http://zhangtielei.com/posts/blog-distributed-causal-consistency.html
https://qiankunli.github.io/2022/04/06/replica_consistency_level.html

线性一致性(强一致性)

整个系统表现的像一台单机:

  • 只要写成功,所有节点都能读到最新的数据
  • 对所有client而言,仿佛所有操作都是按照实际时间的先后串行化的

怎么实现强一致性?

  1. 写的时候必须等所有节点都同步好了才返回
  2. 读的时候slave去问master要数据

理想的情况:操作的时间域不重叠(P1,P2表示2个发送请求的客户端)

在这里插入图片描述

区间->点:操作成功的时刻就在线段的一个点上,所以我们可以将上图抽象为下面的样子,可以发现系统满足线性一致性(举个反例:如果Read读出来的是2,就不满足了)

在这里插入图片描述

实际的情况:操作的时间域有重叠,但是没关系,因为操作真正成功可以理解为成时间线段里面的一个时间点

也就是说,操作的顺序不是按照提交时的时间来算的,只要时间段有重叠,那么谁先谁后都有可能:比如说下面的情况,可能是W2先完成,也可能是W3先完成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例子1:我们来看看下面这个系统是否满足线性一致性:

在这里插入图片描述

可以的:
在这里插入图片描述

例子2:不满足线性一致性的情况:不管我们怎么调整Write2和Write3的顺序,也不可能让后面的Read操作读出2个不同的值
在这里插入图片描述

顺序一致性

只要保证同一个节点内的操作是按序的即可,节点之间的操作顺序可以随便编排

顺序一致性可以理解成一个特殊的因果一致性:同一个节点内的一系列操作中,前后有因果关系

通俗地讲,虽然你9点吃了饭,但是并不一定能及时的传播到我这边,所以我感知到你吃了饭时,可能已经12点了

但是我观察到的你的事件顺序,必须是跟你真实的情况一致的,我不能先看到你吃中饭,再吃早饭

用这个不满足线性一致性的例子:
在这里插入图片描述

重新编排后可以发现满足顺序一致性
在这里插入图片描述

因果一致性

概括:我不能还没看到你的贴子,就先看到评论了

个人认为因果一致性跟顺序一致性是两个维度的

因果不一定满足顺序:虽然你先吃饭再睡觉,但是我可以观察到你先睡觉再吃饭(只要你的吃饭&睡觉只有时间上的先后,没有因果关系)

顺序不一定满足因果:A在大喊一声导致B醒了,但是C可以观察到B先醒了,然后A大喊一声

举个没有保持因果关系例子:

  1. A发了动态1:东西丢了,真倒霉
  2. A发了动态2:东西找到了,真好
  3. B看到了动态1
  4. B看到了动态2
  5. B对A发表评论1:恭喜
  6. C看到了动态1
  7. C看到了评价1,觉得B太损人了(在这步时因果已经出问题了)
  8. C看到了动态2,发现误会了

画成图,大致如下:

所有的因果关系罗列一下(不考虑8):

A的因果关系:W1 -> W2

B的因果关系:R1 -> R2 -> W6

C的因果关系:

A和B之间的因果关系有:W2 -> R2, W1 -> R1

B和C之间的因果关系有:W6 -> R6

A和C之间也有因果关系:W1 -> R1

你会发现,刚到第7步时,虽然因果关系图还是没有产生环的,但是此时因果已经出问题了(产生误会了)

W1
R1
R2
W6
R6
W2

所以为了保证因果一致性,必须:当我看到别人的果时,我必须要看到该果之前的所有因;而不是傻傻地检测新的事件会不会造成环

在这里插入图片描述

最终一致性

最终总能到达一个完全一致的阶段,大家手里的数据都是一样的

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

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

相关文章

React组件化开发

1.组件的定义方式 函数组件Functional Component类组件Class Component 2.类组件 export class Profile extends Component {render() {console.log(this.context);return (<div>Profile</div>)} } 组件的名称是大写字符开头&#xff08;无论类组件还是函数组件…

ElementUI之登录与注册

目录 一.前言 二.ElementUI的简介 三.登录注册前端界面的开发 三.vue axios前后端交互--- Get请求 四.vue axios前后端交互--- Post请求 五.跨域问题 一.前言 这一篇的知识点在前面两篇的博客中就已经详细详解啦&#xff0c;包括如何环境搭建和如何建一个spa项目等等知识…

【二叉树魔法:链式结构与递归的纠缠】

本章重点 二叉树的链式存储二叉树链式结构的实现二叉树的遍历二叉树的节点个数以及高度二叉树的创建和销毁二叉树的优先遍历和广度优先遍历二叉树基础oj练习 1.二叉树的链式存储 二叉树的链式存储结构是指&#xff0c;用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑…

GitHub Copilot Chat

9月21日&#xff0c;GitHub在官网宣布&#xff0c;所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉&#xff0c;GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成&#xff0c;整体使用方法与ChatGPT类似。例如&…

帆软BI开发-Day2-趋势图的多种变形

前言&#xff1a; 在BI数据展示中&#xff0c;条形图、趋势图无疑是使用场景非常多的两种图形。与条形图不同的是&#xff0c;趋势图更能反馈出一定的客观规律和未来的趋势走向&#xff0c;因此用于作为预警和判异的业务场景&#xff0c;但实际业务场景的趋势图可没你想的那么简…

代码随想录算法训练营 动态规划part14

一、最长公共子序列 1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int longestCommonSubsequence(String s1, String s2) {int n s1.length(), m s2.length();char[] cs1 s1.toCharArray(), cs2 s2.toCharArray();int[][] f n…

精华回顾:Web3 前沿创新者在 DESTINATION MOON 共话未来

9 月 17 日&#xff0c;由 TinTinLand 主办的「DESTINATION MOON: Web3 Dev Summit Shanghai 2023」线下活动在上海黄浦如约而至。 本次 DESTINATION MOON 活动作为 2023 上海区块链国际周的 Side Event&#xff0c;设立了 4 场主题演讲与 3 个圆桌讨论&#xff0c;聚集了诸多…

[python 刷题] 42 Trapping Rain Water

[python 刷题] 42 Trapping Rain Water 题目&#xff1a; Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining. 这题的前置我觉得至少还是得做过 11 Container With Most Wat…

神经辐射场(Neural Radiance Field,NeRF)的简单介绍

参考文章&#xff1a;https://arxiv.org/abs/2210.00379 1. 概述 神经辐射场&#xff08;NeRF&#xff09;模型是一种新视图合成方法&#xff0c;它使用体积网格渲染&#xff0c;通过MLP进行隐式神经场景表达&#xff0c;以学习3D场景的几何和照明。   应用&#xff1a;照片…

浅谈双指针算法

目录 算法概述 案例分析 1、删除有序数组中的重复项 2、环形链表 3、盛最多水的容器 4、有效三角形的个数 5、三数之和 6、1089. 复写零 内容总结 算法概述 双指针指的是在遍历元素的过程中&#xff0c;不是使用单个指针进行访问&#xff0c;而是使用两个指针进行访问…

Linux启动过程详解 Xmind导图笔记

参考大佬博客&#xff1a; 简要描述linux系统从开机到登陆界面的启动过程 Linux启动过程详解 Bootloader详解 来源&#xff1a;从BIOS开始画图了解Linux启动过程——老杨Linux

WBS字典解释和举例

定义 WBS词典通常包括&#xff1a;编码、工作包描述&#xff08;内容&#xff09;、成本预算、时间安排、质量标准或要求、责任人或部门或外部单位&#xff08;委托项目&#xff09;、资源配置情况、其他属性等。 实例

Qt5开发及实例V2.0-第十五章-Qt单元测试框架

Qt5开发及实例V2.0-第十五章-Qt单元测试框架 第15章 Qt 5单元测试框架15.1 QTestLib框架15.2 简单的Qt单元测试15.3 数据驱动测试15.4 简单性能测试 本章相关例程源码下载1.Qt5开发及实例_CH1501.rar 下载2.Qt5开发及实例_CH1502.rar 下载3.Qt5开发及实例_CH1503.rar 下载4.Qt5…

【李宏毅 | 深度学习】自注意力机制(Self-attention)

这里写目录标题 引言Sequence LabelingSelf-attention矩阵乘法Muti-head Self-attention&#xff08;多头注意力机制&#xff09; 引言 以往我们遇到的深度学习问题中&#xff0c;对于神经网络的输入一般都是一个向量&#xff0c;输出可能是一个类别。如果增加输入的复杂度&am…

基于open CV实现YOLOv3复现_预测阶段和后处理阶段

基于open CV实现YOLOv3复现_预测阶段和后处理阶段 1.导入所需的库&#xff1a;2.对输入的图像进行resize3.将图像输入yolov3的网络中进行预测&#xff0c;对三个特征层进行解码。4.非极大值抑制来去除多余的预测框完整代码 当训练好了模型后&#xff0c;用训练好的权重文件进行…

tftpd文件传输工具的学习记录

1.目的&#xff1a;在SOC板上的linux系统和本地电脑的windows系统进行文件的传输。 2.在windows中安装tftp服务器,其下载的文件如下&#xff1a; 链接: https://pan.baidu.com/s/1YN5WxcjqCJLHTtjhUtKbjg 提取码: 3cg9 3.打开软件&#xff0c;在当前目录下选择windows传输的…

TCP协议中常见的问题

文章目录 TCP协议中常见的问题谈一谈对OSI七层模型和TCP/IP四层模型的理解&#xff1f;谈谈TCP协议的3次握手过程&#xff1f;TCP协议为什么要3次握手&#xff1f;2次&#xff0c;4次不行吗&#xff1f;谈谈TCP协议的四次挥手过程&#xff1f;什么是流量控制&#xff1f;什么是…

报错处理:Error: Redis server is running but Redis CLI cannot connect

嗨&#xff0c;读者朋友们&#xff01;今天我来跟大家分享一个我在运维过程中遇到的一个关于Linux上运行Redis服务时的报错及解决方法。 报错信息如下&#xff1a; Error: Redis server is running but Redis CLI cannot connect 这个报错信息表明Redis服务器已经运行&#xff…

stm32之GPIO库函数点灯分析

stm32官方为了方便开发者&#xff0c;利用CubeMX 生成HAL库有关的C代码。HAL库就是硬件抽象层(hardware abstraction layer)&#xff0c;生成一系列的函数帮助我们快速生成工程&#xff0c;脱离复杂的寄存器配置。stm32相对于51来功能强大&#xff0c;但是寄存器的数量也不是一…

动手吧,vue数字动画

数字动画&#xff0c;有数字的地方都能用上&#xff0c;拿去吧&#xff01; 效果&#xff1a; 1、template部分 <template><div class"v-count-up">{{ dispVlaue }}</div> </template> 2、js部分 export default {data() {return {timer…