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

2023-09-21 19:45:44

两个协议:

  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

更多推荐

[pai-diffusion]pai的easynlp的clip模型训练

EasyNLP带你玩转CLIP图文检索-知乎作者:熊兮、章捷、岑鸣、临在导读随着自媒体的不断发展,多种模态数据例如图像、文本、语音、视频等不断增长,创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容,跨模态检索是跨模态理解的重要任务,…https://zhuanlan.zhihu.com/p/528476134

大型语言模型:SBERT — 句子BERT

了解siameseBERT网络如何准确地将句子转换为嵌入简介Transformer在NLP领域取得了进化性的进步,这已不是什么秘密。基于Transformer,还发展出了许多其他机器学习模型。其中之一是BERT,它主要由几个堆叠的Transformer编码器组成。除了用于一系列不同的问题(例如情感分析或问答)之外,BE

云原生Kubernetes:K8S集群list-watch机制与 pod调度约束

目录一、理论1.K8S的list-watch机制2.亲和性二、实验1.指定调度节点2.节点亲和性3.亲和性和反亲和三、问题1.新生成pod一直为pending2.如何一次性删除pod和deployment3.pod亲和性资源报错4.pod反亲和性资源报错四、总结一、理论1.K8S的list-watch机制(1)概念Ku

前端防抖和节流

前端防抖和节流概述防抖:防止抖动,个人字面理解此处防的不是页面的抖动,而是用户手抖。为了防止用户快速且频繁的触发事件而导致多次执行事件函数,这样的场景有很多,比如监听滚动、鼠标移动事件onmousemove、频繁点击表单的提交按钮等等。节流:节约流量,为了节约流量,页面在一个时间周期内,只触发一次动作。所以节流的目的时

CSS笔记

选择器通配选择器*{}元素选择器元素{}类选择器.类名{}id选择器#id名{}复合选择器交集选择器/*p元素且类名为beauty的元素*/p.beauty{}.rich.beauty{}并集选择器又称分组选择器.rich,.beauty,.navtop,#myIMage{}后代选择器<!--选中后代中所有li--><

python小程序 图书馆图书借阅借还管理系统 mbc21

为设计一个安全便捷,并且使借阅者更好获取本图书借还信息,本文主要有安全、简洁为理念,实现借阅者快捷寻找图书借还信息,从而解决图书借还信息复杂难辨的问题。该系统以django架构技术为基础,采用python语言和MySQL数据库进行开发设计,通过对图书借还管理流程的分析,分析了其功能性和非功能性需求,设计了基于微信小程序

设计模式:桥接模式

目录组成部分代码实现优缺点总结桥接模式是一种软件设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。该模式通过创建一个桥接接口,将抽象类和实现类连接起来,从而使它们可以独立地进行修改和扩展。桥接模式可以提高系统的灵活性和可扩展性,同时也有助于简化系统的设计。组成部分桥接模式的各个组成部分包括:抽象部分(Ab

有了Spring为什么还需要SpringBoot呢

目录一、Spring缺点分析二、什么是SpringBoot三、SpringBoot的核心功能3.1起步依赖3.2自动装配一、Spring缺点分析1.配置文件和依赖太多了!!!spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的

docker - 分享

1.docker介绍:Docker是一种虚拟化技术,它允许你在一台机器上运行多个应用程序,每个应用程序都运行在一个独立的虚拟器中,互相之间不会干扰。这些容器使用了操作系统级别的虚拟化技术,课可以在同一物理机器上运行多个应用程序,同时每个容器又拥有自己独立的文件系统和资源管理。Docker可以让你快速地创建、部署、和复制

开心档之JavaScript 异步编程

JavaScript异步编程目录JavaScript异步编程异步的概念什么时候用异步编程回调函数实例实例实例异步AJAX实例实例异步的概念异步(Asynchronous,async)是与同步(Synchronous,sync)相对的概念。在我们学习的传统单线程编程中,程序的运行是同步的(同步不意味着所有步骤同时运行,而

云原生微服务治理 第五章 Spring Cloud Netflix 之 Ribbon

系列文章目录第一章Java线程池技术应用第二章CountDownLatch和Semaphone的应用第三章SpringCloud简介第四章SpringCloudNetflix之Eureka第四章SpringCloudNetflix之Ribbon文章目录系列文章目录@[TOC](文章目录)前言1、负载均衡1.1、服务端负

热文推荐