【分布式计算】七、同步 synchronization 重难点

news2025/7/8 0:58:40

两个协议:

  1、NTP(Network Time Protocal)–>广泛使用
   机器周期向时间服务器获取准确时间
  2、没有协议名称 − > -> >没有广泛使用
   时间服务器周期扫描所有机器,计算时间平均值;导致时间服务器负载大,不广泛使用

逻辑时钟(logical clock)

是一种次序时间,而非准确物理时钟(an ordering time,not exact time)
   a.happened-before relation
     假设a,b是同一进程(process)的两个事件(event),a在b前到达:a–>b
      a 发送, b 接收 a发送,b接收 a发送,b接收 a − > b a->b a>b
      a − > b , b − > c a->b,b->c a>bb>c a − > c a->c a>c
   b.若无法判断 a − > b a->b a>b还是 b − > a b->a b>a(即先后顺序未知):a,b是平行事件(concurrent)

逻辑时刻(logical timestamp)

记事件event的逻辑时刻(logical timestamp)为 C ( e v e n t ) C(event) C(event)。若 a − > b , 则 C ( a ) < C ( b ) a->b,则C(a)<C(b) a>b,C(a)<C(b)

如果没有中心结点如何计算逻辑时刻??:
  1、对于进程 i i i,有事件发生时 C i = C i + 1 C_i = C_i + 1 Ci=Ci+1
  2、有消息(message)发送时,消息中带有 t s ( m ) = C i ts(m) = C_i ts(m)=Ci
  3、对于收到消息的进程 j j j,更新本地 C j = m a x { C j , t s ( m ) } C_j=max\{C_j,ts(m)\} Cj=max{Cj,ts(m)},然后 C j = C j + 1 C_j = C_j+1 Cj=Cj+1
例子:

在这里插入图片描述

会产生问题:冲突
完全有序多播(totally ordered multicast)
  对于员工奖励,是先增加1000元、再提成1%?还是先提成1%、再增加1000元?假如员工和经理都会向自己的服务器(员工服务器、经理服务器)发送更新。由于顺序的原因,员工服务器是先增加1000元、再提成1%,经理服务器是先提成1%、再增加1000元。最终两个服务器数据同步时,会发生冲突,怎么解决?
  解决方案:根据公司规章制度来(业务逻辑),对于特殊员工,特殊接口对待

不同机器上时间戳不同,用逻辑时钟??
  1、 a − > b ,则推导出 C ( a ) < C ( b ) a->b,则推导出C(a)<C(b) a>b,则推导出C(a)<C(b)
  2、但是 C ( a ) < C ( b ) ,不能推导出 a − > b C(a)<C(b),不能推导出a->b C(a)<C(b),不能推导出a>b
# 矢量时钟(Vector clock)
结论:???没有拍到
运行步骤:
  1、对于每个进程 P i P_i Pi,有向量 V C i [ 1 , . . . . . n ] VC_i[1,.....n] VCi[1,.....n] n n n为总的进程数,所有元素初始化为0
  2、 P i P_i Pi发送消息 m m m,则 V C i [ i ] + 1 VC_i[i]+1 VCi[i]+1,以及发送的消息 m m m带上 V C i VC_i VCi作为消息的矢量时钟 V t ( m ) Vt(m) Vt(m)
  3、进程 P j P_j Pj P i P_i Pi接收消息 m m m和矢量时间戳 t s ( m ) ts(m) ts(m) =Vt(m)???
    1.更新 V C j VC_j VCj,对于 V C j VC_j VCj的每个元素 V C j [ k ] = m a x { V C j [ k ] , t s ( m ) [ k ] } VC_j[k] = max\{VC_j[k],ts(m)[k]\} VCj[k]=max{VCj[k],ts(m)[k]}
    2. V C j [ j ] + 1 VC_j[j]+1 VCj[j]+1
举例:
在这里插入图片描述
解释:P0,P1,P2初始均为(0,0,0)。
首先 P 1 P_1 P1发生事件 a a a,更新 V C 0 [ 0 ] = 0 + 1 VC_0[0] = 0+1 VC0[0]=0+1,且发送消息 t s ( m ) = ( 1 , 0 , 0 ) ts(m) = (1,0,0) ts(m)=(1,0,0),同时 P 1 P_1 P1发生事件 c c c,更新 V C 1 [ 0 ] = 0 + 1 VC_1[0] = 0+1 VC1[0]=0+1,没有发送消息;然后 P 1 P_1 P1发生事件 d d d,接收来自 P 0 P_0 P0的消息 m m m,更新 V C 1 [ k ] = m a x { V C 1 [ k ] , t s ( m ) [ k ] } VC_1[k] = max\{VC_1[k],ts(m)[k]\} VC1[k]=max{VC1[k],ts(m)[k]},然后 V C 1 [ 1 ] + 1 VC_1[1]+1 VC1[1]+1。接下来是一个道理

讨论:在大型网络中,那种时钟合适(物理、逻辑、矢量)??
解答:同步是为了进行数据同步,保证数据一致性,在超大型网路中,数据同步需求低(Oracle最多支持9个数据副本同步);在小批量网络中,矢量时钟最合适,逻辑时钟具有发生冲突的根本矛盾。

mutual exclusion

三大要求:
  1.safety:只有一个进程在给定时间进入临界区工作
  2.liveness:请求进入与退出都会成功—即每个进程不会一直待在临界区内
  3.fairness:先来后到,先请求先服务
进程根据token进入临界区工作

有中心结点

由中心结点进行调度,
在这里插入图片描述

无中心结点

基于逻辑环ring-based solution

谁有token令牌谁进入工作

RA算法(Ricart-Agrawala)基于多播(muticast)

·进程 P i P_i Pi想进入临界区时,向其它所有进程发送REQUEST广播消息
·进程 P j P_j Pj收到进程 P i P_i Pi的请求。
  若进程 P j P_j Pj没有请求临界区、也没有正在执行临界区,则立即返回REPLY消息。
  若进程 P j P_j Pj正在请求临界区,但其时间戳大于进程 P i P_i Pi的请求,则立即返回REPLY消息。
  否则,进程 P j P_j Pj延迟返回REPLY)消息,并设置〖RD】[风=1,其中RD数组记录了所有被延迟发送返回消息的进程;直至 P j P_j Pj自己完成后再发送
在这里插入图片描述

选举算法election algorithms

有一个leader或coordinator(尽管存在单点故障(single point of failure)、瓶颈(bottleneck)等问题。
如何动态选举出一个特殊进程作为leader (选举算法解决了单点故障问题)
  没有前领导人,谁触发选举不重要
假设:
  1、每个进程均有相应的优先级(权值),一般按照编号来)
  2、优先级最高的成为leader

暴力枚举(Bully)

思想:谁的 ID 最大或最小谁来当老大(一般选择 ID 大的)。
规则:1.leader不响应或相应超时,则触发选举
   2.从ID小的开始向上选举
   3.故障结点复活了,是否抢回leader位---->否,可以容忍一些
优先级大的结点一直当leader,持续高负荷工作,内存碎片增加,工作效率降低

Ring(基于环)

message绕环一圈,就有了全局的信息,知道有哪些结点,将最大编号的作为leader

RA算法参考:https://blog.csdn.net/happy990/article/details/95032371

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

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

相关文章

Mac使用sz/rz

从使用体验上说,sz/rz要比scp要好得多.但Mac上使用这两个命令需要进行相应配置. sz&#xff1a;将选定的文件发送&#xff08;send&#xff09;到本地机器 rz&#xff1a;运行该命令会弹出一个文件选择窗口&#xff0c;从本地选择文件上传到Linux服务器 下载安装lrzsz brew i…

小红书“不误正夜”指南丨2023夜间营销数据报告

对于当代年轻人来说&#xff0c;白天的 8 小时需要献给工作、学习和社交&#xff0c;夜晚时光才真正属于自己。“下班后开始新的一天”&#xff0c;越来越多人开始认同这个概念&#xff0c;告别“报复性熬夜”&#xff0c;重新掌握晚间生活的方向盘&#xff0c;多样化的生活方式…

芯片核数造假,华为不装了,网友直呼这一波赚翻了!

首先说一下之前以为华为是青岛新恩制作的芯片&#xff0c;但是在最新的一个消息中发现&#xff0c;麒麟芯片其实是华为子公司自主研发生产的。 2个重量级消息&#xff0c;华为突破芯片封锁后&#xff0c;美国科技界惊出一身冷汗&#xff01; 华为麒麟9000s是中芯国际做的吗&…

Linux-Nginx安装

一、Nginx下载 官网下载地址&#xff1a; https://nginx.org/en/download.html 国内镜像地址&#xff1a; https://mirrors.huaweicloud.com/nginx 二、Nginx安装 1. 将下载的Nginx安装包上传到Linux服务器指定安装盘符下&#xff0c;解压zip包 tar -zxvf nginx-1.23.3.ta…

使用亚马逊云服务器在 G4 实例上运行 Android 应用程序

随着 Android 应用程序和游戏变得越来越丰富&#xff0c;其中有些甚至比 PC 上的软件更易于使用和娱乐&#xff0c;因此许多人希望能够在云上运行 Android 游戏或应用程序&#xff0c;而在 EC2 实例上运行 Android 的解决方案可以让开发人员更轻松地测试和运行 Android 应用程序…

京东商品详情数据采集接口

使用京东商品详情接口的具体流程如下&#xff1a; 注册账号并登录。填写应用相关信息&#xff0c;包括应用名称、应用描述、应用回调地址等&#xff0c;然后提交申请。审核通过后&#xff0c;进入应用管理页面&#xff0c;点击“应用信息”&#xff0c;获取应用Key和应用Secre…

Kubernetes(k8s)上搭建一主两从的mysql8集群

Kubernetes上搭建一主两从的mysql8集群 环境准备搭建nfs服务器安装NFS暴露nfs目录开启nfs服务器 安装MySQL集群创建命名空间创建MySQL密码的Secret安装MySQL主节点创建pv和pvc主节点的配置文件部署mysql主节点 安装第一个MySQL Slave节点创建pv和pvc第一个从节点配置文件部署my…

Python实现Redis缓存MySQL数据并支持数据同步

简介 本文讲讲如何用Redis做MySQL的读缓存&#xff0c;提升数据库访问性能。 MySQL是一种很常用的关系型数据库&#xff0c;用于持久化数据&#xff0c;并存放在磁盘上。但如果有大数据量的读写&#xff0c;靠MySQL单点就会捉襟见肘&#xff0c;尽管可以在MySQL本身做优化&am…

【Python大纲】S0 系列博文大纲

系列博文大纲 Python 环境建议系列博文相关书籍系列博文大纲阶段进展 Python 环境建议 “工欲善其事、必先利其器”&#xff0c;“三分手艺、七分家伙”&#xff0c;选择一个好用的开发环境对于编程而言至关重要。博主不过多赘述&#xff0c;提出的建议是&#xff1a;Anaconda…

Invalid prop: custom validator check failed for prop “percentage

在使用element 进度条时出现如下报错&#xff1a; Invalid prop: custom validator check failed for prop “percentage 这是因为percentage的取值范围为0-100 检查下自己的值是否超出这个范围了

eclipse svn插件安装

1.进入eclipse的help->Eclipse Marketplace,如下图所示&#xff1a; 2.输入“svn”,再按回车&#xff0c;如下图&#xff1a; 3.这我选择的是 Subversive,点击后面的“install”按钮&#xff0c;如下图 Eclipse 下连接 SVN 库有两种插件 —— Subclipse 与 Subversive &…

想要精通算法和SQL的成长之路 - 预测赢家

想要精通算法和SQL的成长之路 - 预测赢家 前言一. 预测赢家二. 石子游戏&#xff08;预测赢家的进阶版&#xff09;2.1 博弈论 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 预测赢家 原题链接 主要思路&#xff1a; 我们定义dp[i][j]&#xff1a;在区间 [i, j] 之间先…

QT 6.5下载安装及配置教程

一、下载 今天打算换一个QT安装版本,去官网看了一眼发现变成了在线安装。 本来官方下载的就慢,现在更是雪上加霜,现在给大家推荐几种下载方式。 1、国内镜像 中国科学技术大学&#xff1a;http://mirrors.ustc.edu.cn/qtproject/ 清华大学&#xff1a;https://mirrors.tuna.ts…

基于强化学习的节能路由(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

员工电脑怎么监控(怎样远程监控员工电脑)

随着科技的发展&#xff0c;企业对于员工电脑的监控已经成为了企业管理的重要手段。通过监控员工电脑&#xff0c;企业可以更好地管理员工的工作效率、保护企业数据安全以及维护企业的正常运营。本文将详细介绍如何监控公司员工电脑的方法和步骤。 监控员工电脑的目的 提高工作…

Selenium-介绍下其他骚操作

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器&#xff08;如 Chrome、Opera 和 Microsoft Edge&#xff09;中的工具&#xff0c;用于帮助开发人员调试和研究网站。 借助 Chrome DevTools&#xff0c;开发人员可以更深入地访问网站&#xf…

vsc使用flake8的一个小问题

当单行写入代码长度过长时候PEP8会直接提示报错&#xff0c;在flake8中的单行代码限制是小于80但是对于一些需要精准import的代码来说远不够用&#xff0c;网络上有人说直接在josn文件中做变动&#xff0c;但是当导入相关命令的时候&#xff0c;会显示该命令不可用&#xff0c;…

一步到位:用Python实现PC屏幕截图并自动发送邮件,实现屏幕监控

在当前的数字化世界中&#xff0c;自动化已经成为我们日常生活和工作中的关键部分。它不仅提高了效率&#xff0c;还节省了大量的时间和精力。在这篇文章中&#xff0c;我们将探讨如何使用Python来实现一个特定的自动化任务 - PC屏幕截图自动发送到指定的邮箱。 这个任务可能看…

Vulnhub系列靶机-Hackadmeic.RTB1

文章目录 Vulnhub系列靶机-Hackadmeic.RTB11. 信息收集1.1 主机扫描1.2 端口扫描1.3 目录爆破 2. 漏洞探测3. 漏洞利用3.1 反弹Shell 4. 内核提权 Vulnhub系列靶机-Hackadmeic.RTB1 1. 信息收集 1.1 主机扫描 arp-scan -l1.2 端口扫描 nmap -A -p- 192.168.188.184扫描到了…

大功率光伏应用不同多电平变换器拓扑的比较研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…