分布式异步任务处理组件(五)

news2024/11/17 12:29:44

节点上线和下线的逻辑--

节点下线分为两种--心跳失败主动或被动和主节点断开连接,但是节点本身没有发生重启;第二种就是节点宕机重启--其实这两中情况下处理逻辑都是一样的,只是节点本身如果还能消费到kafka的时候可以继续执行任务但是不能从kafka中拉取新的消息,因为此时自己无法获取消息的投票信息,在执行的过程中可以提交;执行完之后还没有重新加入集群则应该断开和kafka的链接---

可以不和kafka断开连接的原因是此时自己和kafka的消息不回被其他节点消费,所以执行队列中的任务可以正常执行并提交;但是存疑队列中无法举证所以只能等待----具体看是否要等待执行完;--主要综合考虑存疑队列;

消息消费模型--

如何保证一个消息只会被执行一次---从几个方面保证--一个消息最多可能存在于两个节点中(除非多个节点都在执行消息的时候失败,这种概率是很小的),消息出现在其他节点中的情况--partition重分配,则该节点执行队列中的消息可能被其他节点消费,但是只会进入到其他节点的存疑队列中,而不是直接被执行,存疑队列通过举证和执行检查策略保证该消息没有即将被执行或者正在被执行或者最终被执行完成;才可以重新执行;---有一种情况,该节点开始执行任务了,但是此时断开和主节点的链接,而恰好其他节点对该任务举证,这会导致该任务有可能被其他节点执行---这里需要在每个任务执行前向主节点汇报;

几个确定性机制可以保证消息不会被重复执行--

  1. 投票进入执行队列中的任务肯定可以被执行---在和主节点正常连接的情况下;
  2. 和主节点断开连接的节点不能继续执行任务,可能错过举证,需要清空执行队列;
  3. 任务执行前需要向主节点汇报--保证该任务在执行过程中和主节点断开连接不会让该任务被其他执行;---断开连接就清空执行队列保证未执行的任务在断开连接之后可以被其他节点执行,但是自己不会再重复执行;
  4. 存异队列中的任务必须通过举证--通过举证则证明主节点运行正常;
  5. 举证通过保证没有节点即将执行该任务或者正在执行该任务;--对于即将执行的任务可以采取重新分配的策略;或者使用监听策略;正在执行的任务使用超时+检查来确定该任务的最终执行情况;
  6. 一种情况---节点A准备执行任务a,向主节点发送了a的prepare信息,开始执行,但是在执行过程中主节点失败,重新选举,导致a的prepare信息丢失,同时节点A没有加入到新集群中--没有和新的主节点建立连接,此时节点B对任务a发起举证,会导致a举证通过,(举证完成之后运行检查策略节点A没有执行完,此时节点B运行检查策略也会通过)节点B准备执行a,这种情况下会导致任务a同时被AB两个节点执行----这种情况无法避免,通过时差来保证,或者全节点同步prepare信息来保证,但是会影响性能,可以想办法降低概率来保证---目前只有这种情况会导致同一个任务被多个节点执行;
  7. 未开始执行的任务不会导致这种情况发生--因为节点和主节点断开连接之后不会执行新的任务,而是要重新举证才可以执行;而通过举证的消息

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

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

相关文章

PostgreSql 进程及内存结构

一、进程及内存架构 PostgreSQL 数据库运行时,使用如下命令可查询数据库进程,正对应上述结构图。 [postgreslocalhost ~]$ ps -ef|grep post postgres 8649 1 0 15:05 ? 00:00:00 /app/pg13/bin/postgres -D /data/pg13/data postgres …

Vue+Nodejs+Express+Minio 实现本地图片上传

安装Minio,Minio server和Minio client都要下载可以自定义安装目录 安装完成之后,可以将minio配置成环境变量方便使用 配置了环境变量启动命令式 minio server start,默认账号密码minioadmin和minioadmin,点击9000端口的这个链接,即可访问客户端 nodejs连接Minio,简易服务进…

Git全栈体系(三)

第六章 GitHub 操作 一、创建远程仓库 二、远程仓库操作 命令名称作用git remote -v查看当前所有远程地址别名git remote add 别名 远程地址起别名git push 别名 分支推送本地分支上的内容到远程仓库git clone 远程地址将远程仓库的内容克隆到本地git pull 远程库地址别名 远…

k8s安装Jenkins

目录 ​编辑 一、环境准备 1.1 环境说明 二、安装nfs 2.1 安装NFS 2.2 创建NFS共享文件夹 2.3 配置共享文件夹 2.4 使配置生效 2.5 查看所有共享目录 2.6 启动nfs 2.7 其他节点安装nfs-utils 三、创建PVC卷 3.1 创建namespace 3.2 创建nfs 客户端sa授权 3.3 创建…

如何用python画一朵花,用python画彩色六边形

大家好,小编为大家解答用python画彩色六边形的问题。很多人还不知道如何用python画一朵花,现在让我们一起来看看吧!

63 # commander 的配置

初始化配置文件 新建文件夹 63,执行 npm init -y 修改配置文件 {"name": "kaimo-http-server","version": "1.0.0","description": "","main": "index.js","keywords"…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者再识AutoResponder标签-下

1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用,今天宏哥讲解和分享一下,在移动端的操作和应用。其实移动端和PC端都是一样的操作,按照宏哥前边抓取移动端包设置好,就可以开始实战了。 2.界面功能解析 根据下图图标注位…

AD21 PCB设计的高级应用(四)FPGA的管脚交换功能

(四)FPGA的管脚交换功能 高速 PCB 设计过程中,涉及的 FPGA等可编程器件管脚繁多,也因此导致布线的烦琐与困难,Altium Designer 可实现 PCB 中 FPGA 的管脚交换,方便走线。 1.FPGA管脚交换的要求 (1)一般情况下,相同电压的 Bank之…

python——案例三:计算三角形面积

案例三:计算三角形面积 afloat(input(输入三角形第一个边的长度:)) #数据导入 bfloat(input(输入三角形第二个边的长度:)) cfloat(input(输入三角形第三个边的长度:)) s(abc)/2 #半周长计算公式 area(s*(s-a)*(s-b)*(s-c))**0.5 #面积公式 print(area) #

多源bfs

这是 LeetCode 上的「1162. 地图分析」 ,难度为「中等」。 与「单源最短路」不同,「多源最短路」问题是求从「多个源点」到达「一个/多个汇点」的最短路径。 在实现上,最核心的搜索部分,「多源 BFS」与「单源 BFS」并无区别。 并…

区块链:可验证随机函数

本篇主要介绍可验证随机函数的定义及其在区块链上的作用。 1 可验证随机函数 1.1 定义 可验证随机函数(Verifiable Random Function,VRF)本质上还是一类具有验证功能的伪随机函数。对于一个特定的输入 m m m以及输入者的私钥 S K SK SK,VRF会输出一个随…

Oracle设置某个表字段递增

当Oracle设置字段递增创建触发器 先建一个序列,打开PLSQL 找到Sequences,右击新建 根据自己的需要填写 然后添加触发器,点新建-程序窗口-空白 --TEST_ID为触发器的名字,TEST是添加触发器的表名 CREATE OR REPLACE TRIGGER &qu…

【C++】 哈希

一、哈希的概念及其性质 1.哈希概念 在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。比如顺序表需要从第一个元素依次向后进行查找,顺序查找时间复杂度为…

【ChatGPT】基于WSL+Docker的ChatGPT PLUS共享服务部署

最近买了ChatGPT PLUS服务,想通过web服务将它共享给其他人使用,搜了一下目前GitHub上比较热门的服务有 ChatGPT-Next-Webchatgpt-web-share 其中chatgpt-web-share支持API和PLUS账号分享两种方式,且架构为PythonJSDocker,相对比…

【EI/SCOPUS会议征稿】第三届检测技术与自动化工程国际学术会议 (TTAE 2023)

第三届检测技术与自动化工程国际学术会议 (TTAE 2023)原定将于2023年9月15-17日在中国西安召开。 检测技术与自动化工程国际学术会议将每年举行一次,旨在将“检测技术”和“自动化工程”等学术领域的学者、专家、研发者、技术人员聚集到一个学术交流的平台&#xf…

docker容器认识及安装(linux系统)

目录 一、Docker概述 容器背景 容器对比传统虚拟化 Docker的使用场景 二、Docker的优点 1、快速的交付和部署 2、更高效的虚拟化 3、更轻松的迁移和扩展 4、简单的管理 三、Docker的核心概念 1、镜像(Image) 2、容器(Container&…

UM2080F32——32位SoC芯片

UM2080F32是基于ARM Cortex-M0内核的超低功耗、高性能的、单片集成(G)FSK/OOK无线收发机的32位SoC芯片。工作于200MHz~960MHz范围内,支持灵活可设的数据包格式,支持自动应答和自动重发功能,支持跳频操作,支持FEC功能,同…

【Lua学习笔记】Lua进阶——垃圾回收

按照唐老师的课程本来要讲自带库的,但是想想这东西能看文档,ctrl左键还能看注解,并且最重要的许多自带库的方法基本大部分语言都有,其实看看就能懂了。所以还是重点讲讲垃圾回收 文章目录 GC辅助垃圾回收collectgarbage增量模式分…

多模态第2篇:MMGCN代码配置

一、Windows环境 1.创建并激活虚拟环境 #创建虚拟环境命名为mmgcn,指定python版本为3.8 conda create -n mmgcn python3.8 #激活虚拟环境 conda activate mmgcn2.安装pytorch #torch2.0.0 cu118 pip install torch2.0.0cu118 torchvision0.15.1cu118 torchaudio…

优维低代码实践:Context / State

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…