分布式基础 --- Leader election

分布式基础 --- Leader election

  • 为什么需要leader election
  • Ring election
  • Bully Algorithm

为什么需要leader election

  • 在一组集群中, 需要选出一个leader来承担一些特别的任务, 比如
  • 协调和控制系统操作:领导者负责协调和控制整个分布式系统的操作。它可以接收和处理其他节点的请求,并根据系统的需求进行决策和操作。
  • 数据一致性和复制:领导者负责确保系统中的数据一致性和复制。它可以处理写入请求,并将写入操作广播到其他节点,以确保数据的一致性和可靠性。
  • 资源分配和调度:领导者可以负责资源的分配和调度,以优化系统的性能和资源利用率。它可以根据系统的负载情况和需求,进行资源分配和任务调度的决策。
  • 错误处理和故障恢复:领导者可以监视系统中的错误和故障,并采取相应的措施进行处理和恢复。它可以检测到其他节点的故障,并执行相应的故障转移和恢复策略,以确保系统的可用性和稳定性.

Ring election

  • 初始化:在环状拓扑中的每个节点都被分配一个唯一的标识,例如节点ID。开始时,每个节点都将自己标记为候选者状态。
  • 发起选举:一个节点决定发起选举时,它将向其后继节点发送选举消息。
  • 选举消息传递:当一个节点收到选举消息时,它会比较消息中的候选者标识和自己的标识。如果收到的候选者标识比自己的标识更大,节点将更新自己的状态为候选者,并将收到的消息继续传递给下一个节点。如果收到的候选者标识与自己的标识相同,节点将宣布自己为领导者,并将选举结果传递回发起选举的节点。
  • 选举结果传递:选举结果通过环状拓扑结构传递回发起选举的节点。每个节点将选举结果与自己的状态比较,如果选举结果中的标识比自己的标识更大,节点将更新自己的状态为候选者,并将选举结果继续传递给下一个节点。如果选举结果中的标识与自己的标识相同,节点将宣布自己为领导者,并选举过程结束。
  • 领导者选举完成:当选举结果回到发起选举的节点时,该节点将宣布选举完成,并将选举结果广播给整个系统,以便其他节点得知新的领导者
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 接着 N80 的 Message会转一圈,最终回到N80, 表示选举完成. N80发出elected message
import java.util.ArrayList;
import java.util.List;// 节点类定义
class Node {private int id;private int leaderpublic Node(int id) {this.id = id;}public int getId() {return id;}public void receiveElectionMessage(ElectionMessage message) {if (message.type == "Elected" && message.id == this.id) {//election finishedleader = message.id;return }else if (message.type == "Elected") {leader = message.id;passElectionMessage(message)return }if (message.id > this.id) {passElectionMessage(message)}else if (message.getId() < this.id) {passElectionMessage(new ElectionMessage(this.id, "Election"))}else {passElectionMessage(new ElectionMessage(this.id, "Elected"))}}public void passElectionMessage(ElectionMessage message) {Node nextNode = getNextNode(); nextNode.receiveElectionMessage(message);}
}// 选举消息类定义
class ElectionMessage {public int id;public string messageType;
}

复杂度分析

  • Worst-Case:
  • (N-1) messages for Election message to get from
    Initiator (N6) to would-be coordinator (N80)
  • N messages for Election message to circulate around ring without message being changed
  • N messages for Elected message to circulate around the ring
  • Message complexity: 3N-1 messages
  • Best-Case: 2N
  • Initiator is the would-be leader is the initiator
  • Message complexity: 2N messages

如何应对 Failures

  • 如果在选举中N80挂掉了,则选举会一直进行下去
    在这里插入图片描述
  • 方案一: 让之前或者之后的节点重新发起选举, 如果收到Election message之后超时没有收到Elected Message
  • 但是如果之前或者之后的节点也挂掉了, 或者之前前,之后后的节点也挂掉了
  • 方案二: 使用Failure Detection:
  • 任何接收到election消息(Election:80)的进程都可以通过Failure Detection检测N80的故障。
  • 如果检测到N80的故障,可以启动新一轮的领导者选举
  • 但是Failure Detection 本身就有不准确性

Bully Algorithm

  • 所有节点都知道其他节点的ID
  • 当之前的leader 挂掉时(通过 Failure Detection)
  • 如果一个节点知道自己的标识是最高的:
  • 它将自己选举为协调者,并向所有标识较低的进程发送一个Coordinator消息
  • 选举过程完成
  • 如果一个节点知道自己的标识不是最高的:
  • 它会通过发送一个选举消息来发起选举。
  • 只向比自己标识更高的进程发送选举消息。
  • 如果在超时时间内没有收到回复,节点将自己称为领导者,并向所有标识较低的进程发送一个协调者消息。选举完成。
  • 如果收到了回复,说明存在一个非故障的更高优先级的节点,节点将等待Coordinator消息。如果在另一个超时时间内没有收到Coordinator消息,节点将重新开始一个新的选举过程.

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

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

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

相关文章

one4all 排坑记录

one4all 排坑记录 任务踩坑回顾动作踩坑动作踩坑动作新一步测试Habitat-sim 测试habitat-lab继续ONE4ALL 任务 看了《One-4-All: Neural Potential Fields for Embodied Navigation》这篇论文&#xff0c;感觉挺有意思&#xff0c;他也开源了代码。视觉语言导航是我一直想做的…

windows上elasticsearch的ik分词器的安装

下载 下载地址 在elasticsearch下的plugins文件夹下创建ik的文件夹 下载的ik压缩包解压到plugins/ik 重启elasticsearch 验证 http://ip:9200/_cat/plugins

SpringBoot3-核心原理

1. 事件和监听器 1. 生命周期监听 场景&#xff1a;监听应用的生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件&#xff1b; 编写SpringApplicationRunListener 实现类在 META-INF/spring.factories 中配置 org.springfram…

【蓝桥杯】错误票据

今天是2024年3月1号&#xff0c;蓝桥杯比赛还有一个月的时间&#xff0c;虽说自己不指望拿奖吧&#xff0c;但是还是有些莫i名的焦虑&#xff0c;这道题目都做不出来&#xff0c;感觉自己真的有点菜啊&#xff01;但是还好啦&#xff0c;我觉得是因为我没有题感&#xff0c;慢慢…

spring boot 整合 minio存储 【使用篇】

导入依赖 <!--minio--><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.0.3</version></dependency> yml配置&#xff08;默认配置&#xff09; max-file-size: 200MB 设置文件最大…

华为od机试C卷-开源项目热度榜单

1、题目描述 某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。 对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue…

微服务API网关---APISIX

最近在做微服务调研&#xff0c;看到了apisix这个网关&#xff0c;于是进行了初步了解一下。 微服务是指&#xff0c;将大型应用分解成多个独立的组件&#xff0c;其中每个组件都各自的负责对应项目。 系统的架构大致经历了&#xff1a;单体应用架构–> SOA架构 -->微服务…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 附录D 关于TCP并发连接的几个思考题与试验

前几天作者在新浪微博上出了两道有关TCP的思考题&#xff0c;引发了一场讨论&#xff08;http://weibo.com/1701018393/eCuxDrtaONn&#xff09;。 第一道初级题目是&#xff1a;有一台机器&#xff0c;它有一个IP&#xff0c;上面运行了一个TCP服务程序&#xff0c;程序只侦听…

StarRocks实战——松果出行实时数仓实践

目录 一、背景 二、松果出行实时OLAP的演进 2.1 实时数仓1.0的架构 2.2 实时数仓2.0的架构 2.3 实时数仓3.0的架构 三、StarRocks 的引入 四、StarRocks在松果出行的应用 4.1 在订单业务中的应用 4.2 在车辆方向的应用 4.3 StarRocks “极速统一” 落地 4.4 StarRoc…

分布式ID生成系统之雪花算法详解

在当今的云计算和微服务架构盛行的时代&#xff0c;分布式系统已成为软件开发的重要组成部分。随着系统规模的扩大和业务的复杂化&#xff0c;对数据一致性和唯一性的要求也越来越高&#xff0c;尤其是在全局唯一标识符&#xff08;ID&#xff09;的生成上。因此&#xff0c;分…

yolov5训练太慢的解决方案

问题原因 训练太慢大多是因为没有安装CUDA和pytorch&#xff0c;导致的只有cpu在跑&#xff0c;显卡没跑 这就是很典型的。 解决方案 第一步&#xff1a;安装CUDA 在本机上面安装CUDA,记住只有N卡可以安装&#xff0c;一开始的电脑是自带CUDA的。 如果不是自带的CUDA&…

求数字的每一位之和

求数字的每一位之和 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果&#xff1a; 题目描述&#xff1a; 输入一个整数m&#xff0c;求这个整数m的每⼀位之和&#xff0c;并打印。 测试1&#xff1a; 输⼊&#xff1a;1234 输出&#xff1a;10 测试2&…

土壤侵蚀量化评估

根据之前的文章,已经算出了R、K、LS、C、P 现在计算土壤侵蚀,将几个前期制作好的因子的TIFF文件,用栅格计算器相乘 发现局部地区存在轻度侵蚀,大部分区域是微度侵蚀 然后对比了一下范围 其中的几个因子都在文献范围内,说明计算结果并未出错,可能就是研究区正常范围和结…

6020一拖二快充线:手机充电的革命性创新

在快节奏的现代生活中&#xff0c;手机已不仅仅是一个通讯工具&#xff0c;更是我们工作、学习和娱乐的得力助手。然而&#xff0c;手机的电量问题一直是困扰着我们的难题。为了解决这个问题&#xff0c;市场上出现了一种名为“一拖二快充线”的充电设备&#xff0c;它不仅具备…

八. 实战:CUDA-BEVFusion部署分析-分析BEVFusion中各个ONNX

目录 前言0. 简述1. camera.backbone.onnx(fp16)2. camera.backbone.onnx(int8)3. camera.vtransform.onnx(fp16)4. fuser.onnx(fp16)5. fuser.onnx(int8)6. lidar.backbone.xyz.onnx7. head.bbox.onnx(fp16)总结下载链接参考 前言 自动驾驶之心推出的《CUDA与TensorRT部署实战…

Unity UGUI之Scrollbar基本了解

Unity的Scrollbar组件是用于在UI中创建滚动条的组件之一。滚动条通常与其他可滚动的UI元素&#xff08;如滚动视图或列表&#xff09;一起使用&#xff0c;以便用户可以在内容超出可见区域时滚动内容。 以下是Scrollbar的基本信息和用法: 1、创建 在Unity的Hierarchy视图中右…

jetson nano——编译安装opencv==4.4

目录 1.下载源码&#xff0c;我提供的链接如下&#xff1a;1.1文件上传的路径位置&#xff0c;注意ymck是我自己的用户名&#xff08;你们自己换成你们自己相对应的就行&#xff09; 2.解压文件3.安装依赖4.增加swap交换内存4.1临时增加交换内存swap4.2永久增加swap 5.安装open…

2024-03-03 作业

作业要求&#xff1a; 1.使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 2.使用提供的getch函数&#xff0c;编写一个专门用来输入密码的函数&#xff0c;要求输入密码的时候&#xff0c;显示 * 号&#xff0c;输入回车的时候&#xff0c;密码输入结束 作业…

【MySQL】索引(重点)-- 详解

一、索引 没有索引&#xff0c;可能会有什么问题&#xff1f; 索引 &#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。不用加内存&#xff0c;不用改程序&#xff0c;不用调 sql &#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成…

加密与安全_探索数字证书

文章目录 Pre概述使用keytool生成证书使用Openssl生成证书 &#xff08;推荐&#xff09;证书的吊销小结 Pre PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证 PKI - 04 证书授权颁发机构&#xff08;CA&#xff09; & 数字证书 PKI - 数字签名与数字证…