CnosDB如何确保多步操作的最终一致性?

背景

在时序数据库中,资源的操作是一个复杂且关键的任务。这些操作通常涉及到多个步骤,每个步骤都可能会失败,导致资源处于不一致的状态。例如,一个用户可能想要在CnosDB集群中删除一个租户,这个操作可能需要删除租户下的各种资源(role、database、member等)。如果在这个过程中的任何一步失败了,那么这个操作可能会导致集群处于不一致的状态,为了解决这个问题,我们设计了一个解决方案。

基于这个目标,我们参考了一些设计比较好的产品。

方案参考:HBase的ProcedureV2 (Pv2) Framework

HBase 中 Procedure 代表一个或一组操作,Procedure 分为了如下状态:

INITIALIZING - Procedure 构造中,未提交执行

RUNNABLE  - Procedure 提交,准备好执行

WAITING - Procedure 等待子 Procedure 完成

WAITING_TIMEOUT - Procedure等待超时或事件中断

ROLLEDBACK - 由于Procedure或子Procedure失败,Procedure会回滚,回滚过程中会清理执行时创建的资源。在失败或者重启场景下,回滚会发生多次,因此回滚步骤要保证幂等性

SUCCESS - Procedure成功完成,无失败

FAILED - Procedure至少执行了一次且失败,已经或尚未回滚,任何处于失败状态的Procedure都将会切换到回滚状态

通过对Procedure的各个步骤的清晰切分和记录,实现了多步骤执行的原子性和一致性。

最终方案:ResourceManager

基于CnosDB的情况,我们引入了ResourceManager功能。

ResourceManager可以在后台重试失败任务,直到操作成功。这样,即使某个步骤失败了,ResourceManager也可以保证最终的一致性。例如,在上述的删除租户操作中,如果在进行到删除database的步骤失败了,那么我们可以创建一个异步任务来重试这个步骤及后续步骤。这个异步任务会在后台运行,并且会不断重试,直到成功。通过这种方式,我们可以确保即使在面对失败时,我们的系统也能保持一致性。

ResourceManager也支持延迟任务,可以对任务预设一个执行时间,当到达时间时,会执行任务,如果失败,也会进行重试。

总的来说,ResourceManager提供了一种强大而灵活的方式来处理时序数据库中的多步骤任务操作,并确保系统的最终一致性。

任务状态划分

根据任务的情况,会被分为不同的状态:

Schedule - 任务提交到ResourceManager,未执行

Executing - 正在执行该任务

Successed - 任务执行成功

Failed - 任务执行失败,会进行重试

Cancel - 任务未执行,被取消

Fatal - 任务执行过程中发生无法恢复错误,不会进行重试

任务状态查看

为了清楚地知道任务当前的执行情况,提供了系统表resource_status,可以通过如下命令查看:

SELECT * FROM information_schema.resource_status;

表信息如下:

timenameactiontry_countstatuscomment
2023-11-03 05:47:28cnosdb-db1DropDatabase1Successed

time - 任务发生时间

name - 任务名称

action - 任务动作

try_count - 尝试次数

status - 任务当前状态

comment - 任务执行信息

具体场景

场景一

在CnosDB集群中,资源操作请求可能会被下发到任意节点进行处理。

例如,一个请求可能会被下发到名为node1的节点。然而,由于网络延迟、硬件故障或其他一些原因,这个请求可能会失败。当node1节点在处理请求时遇到失败,它不只会简单地返回一个错误,并且还会将这个请求作为失败任务记录到meta中。

在CnosDB集群中,多个节点(例如node1、node2)会定时从meta中读取失败任务。为了防止多个节点重试同一个任务,只有一个节点能够成功地读取这个任务。在我们的假设中,node2节点成功地读取了这个任务。

一旦node2节点获取了这个失败任务,它就会开始循环重试这个任务,直到任务成功为止,并且在重试过程中,会记录执行失败的错误信息。这种设计可以确保即使在面对失败时,我们的系统也能够最终完成所有的请求。

目前支持失败重试的操作:

DropTenant,

DropDatabase,

DropTable,

DropColumn,

AddColumn,

AlterColumn,

RenameTagName,

UpdateTagValue

场景二

在CnosDB集群中,当node1接收到一个延迟任务时,这个任务会被记录到meta中。meta中有一个用于存储任务信息的数据结构,它能够被系统中的所有节点访问和读取。

多个节点(例如node1、node2、node3等)会尝试从meta中读取任务列表。然而,为了保证任务的一致性和正确性,系统设计了一种锁机制,使得在多个节点中,只有一个节点能够成功地读取到任务列表。在这个例子中,我们假设node3是成功读取任务的节点。

当node3成功地从meta中读取到任务列表后,它会开始对任务进行遍历处理。首先,它会检查当前的时间是否已经达到了任务的预定执行时间。如果还没有到达预定的执行时间,node3会跳过该任务;如果已经到达预定的执行时间,node3则会开始执行这个任务。

在执行任务的过程中,node3会采用一种循环执行的策略。也就是说,如果任务在第一次执行时没有成功,node3会再次尝试执行这个任务,直到任务成功为止。此外,为了保证系统的可靠性和可追踪性,在每次执行任务时,node3都会将当前的执行状态和结果记录到系统表中,可以通过查看系统表查看任务的执行状态。

另一种情况是在node3成功读取前,取消延迟任务的请求下发给node2,该请求会被记录到meta,此时该延迟任务到预设时间后也不会被执行。

通过以上的设计和实现,系统能够对延迟任务进行有效和正确的处理,并且能够实时地跟踪和记录任务的执行状态和结果。

目前支持延迟任务的操作:DropTenant、DropDatabase。

CnosDB简介

CnosDB是一款高性能、高易用性的开源分布式时序数据库,现已正式发布及全部开源。

欢迎关注我们的社区网站:https://cn.cnosdb.com

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

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

相关文章

颈椎前路caspar撑开器_“骨质增生”导致的颈椎病怎么破?

来源:《脊柱外科微创手术精要》作者:中日友好医院 邹海波此文是区别于颈椎间盘软性突出诊治一文,主要针对“骨质增生”导致的颈椎病(Spondylosis)进行介绍。传统的颈椎前路手术主要为颈椎病而设计。一度认为对颈椎病采用前路手术的主要好处在…

Struts2整合Freemarker生成静态页面

2019独角兽企业重金招聘Python工程师标准>>> 这是生成静态页面的预览&#xff1a; 其对应的模板文件&#xff1a; <table style"text-align:center;FONT-SIZE: 11pt; WIDTH: 600px; FONT-FAMILY: 宋体; BORDER-COLLAPSE: collapse" borderColor#3399ff…

快速幂、矩阵快速幂、快速乘法

快速幂 快速幂是我们经常用到的一种算法&#xff0c;快速幂顾名思义就是快速的幂运算。我们在很多题目中都会遇到幂运算&#xff0c;但是在指数很大的时候&#xff0c;我们如果用for或者是pow就会超时&#xff0c;这时候就用到了快速幂。 快速幂的原理就是&#xff0c;当求b^p的…

vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)

完整项目地址&#xff1a;vue-element-adminhttps://github.com/PanJiaChen/vue-element-admin前言拖更有点严重&#xff0c;过了半个月才写了第二篇教程。无奈自己是一个业务猿&#xff0c;每天被我司的产品虐的死去活来&#xff0c;之前又病了一下休息了几天&#xff0c;大家…

注释工具_苹果已购丨Notability丨功能强大而简单易用的笔记及PDF注释工具

点击上方“天泽黑科技”右上角“...”点选“设为星标”点击加星★ 贴近你心 ❤今天给大家购买效率类排行第3名的 Notability &#xff01;大家在桌面 App store 登陆我的账号&#xff0c;搜索下载即可&#xff01;荣获 iPad、iPhone 和 Mac 的 Apple「编」爱新 App 殊荣&#x…

第四章 大网高级   NSSA

STUB、完全stub、NSSA、完全nssa实验要求&#xff1a;1、配置IP地址2、配置OSPF多区域3、配置 stub 末梢区域4、配置完全stub末梢区域5、配置 nssa 非纯末梢区域6、配置完全nssa非纯末梢区域7、配置两种协议相互注入重分发8、实现全网互通一、配置OSPF多区域二、配置rip v2三、…

[AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展

[AlwaysOn Availability Groups] 健康模型 Part 2 ——扩展 健康模型扩展 第一部分已经介绍了AlwayOn健康模型的概述。现在是创建一个自己的PBM策略&#xff0c;然后设置为制定的归类。创建这些策略&#xff0c;创建之后修改一下配置&#xff0c;dashboard就会自动评估这些策略…

665. Non-decreasing Array - LeetCode

Question 665. Non-decreasing Array Solution 题目大意&#xff1a; 思路&#xff1a;当前判断2的时候可以将当前元素2变为4&#xff0c;也可以将上一个元素4变为2&#xff0c;再判断两变化后是否满足要求。 Java实现&#xff1a; public boolean checkPossibility(int[] nums…

如何制作印章_如何用Photoshop制作个性印章/文字图片

带印章和文字的图片&#xff0c;不仅可以作为个人的标签&#xff0c;更能直接表达照片的意境&#xff0c;让片子与众不同。那么&#xff0c;怎样才能给照片加印章和文字呢&#xff1f;或许方法有很多&#xff0c;甚至有多款App也可以直接做效果。但想要做出精细的效果&#xff…

麒麟810处理器_麒麟810性能实测:对比骁龙845骁龙730,谁更强?

随着荣耀9X、Nova5i Pro一众新机发布&#xff0c;采用7nm工艺制程的全新麒麟810进入了我们的视野。以手机处理器性能划分产品定位向来是最为直接的方法&#xff0c;在搭载麒麟810的荣耀9X将价格下探到1399元后&#xff0c;这枚网友口中“拳打845&#xff0c;脚踢730”的中端神u…

打造全键盘操作的PDF阅读器

其实我只想要一个非常简单的PDF阅读器&#xff0c;不要很花哨的功能&#xff0c;只要能够&#xff1a; 速度够快&#xff0c;不要翻一页等半天&#xff1b;全键盘操作&#xff0c;不想在鼠标和键盘之间来回倒腾&#xff1b;可以改变背景色&#xff0c;深夜的白光好刺眼&#xf…

mysql 导出dmp文件_一文带你了解MySQL主从复制(Master-Slave)

1.复制概述Mysql内建的复制功能是构建大型&#xff0c;高性能应用程序的基础。将Mysql的数据分布到多个系统上去&#xff0c;这种分布的机制&#xff0c;是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上&#xff0c;并重新执行一遍来实现的。复制过程中一个服务器充当…

iOS开发学无止境 - NSFileManager文件操作的十个小功能

&#xff08;配图的小故事还记得嘛&#xff09; NSFileManager是一个单列类&#xff0c;也是一个文件管理器。可以通过NSFileManager创建文件夹、创建文件、写文件、读文件内容等等基本功能。 下面将介绍NSFileManager文件操作的十个小功能。我们在Documents里面进行举例&#…

smokeping自动检测系统

如何的使用smokeping来监控idc机房的网络质量情况&#xff0c;从监控图上的延时与丢包能分辨出你机房的网络是否稳定&#xff0c;是否为多线&#xff0c;是否为BGP机房&#xff0c;到各城市的3个运行商网络各是什么情况&#xff0c;如果出现问题&#xff0c;如果有针对的解决。…

bg感_【0328】BG推文 | 5本我在逃生游戏里养娃娃+岁月缱绻已无你+关于我比女主苏这回事+消失的白月光又回来了等...

大家多多支持原文&#xff01;以下内容多为网络搜集&#xff0c;非商业用途。版权归原作者所有&#xff0c;侵联&#xff01;BG文《我在逃生游戏里养娃娃》作者&#xff1a;鹤舫闲人《岁月缱绻已无你》作者&#xff1a;酒爷《关于我比女主苏这回事》作者&#xff1a;欢何极《消…

微信开发者工具 wxmi修改模版颜色_十款高效好用的在线网页工具,提升你的办公效率...

大家好&#xff0c; 我是阿毛&#xff0c;今天给大家推荐高效办公的10个在线网页工具&#xff0c;可以不用下载安装很多app&#xff0c;也不用在电脑上装很多软件。在线制作精彩视频操作非常简单&#xff0c;选择模板&#xff0c;上传照片然后点击制作等待完成就可以了&#xf…

[转]使用Navicat for Oracle工具连接oracle的

使用Navicat for Oracle工具连接oracle的 这是一款oracle的客户端的图形化管理和开发工具&#xff0c;对于许多的数据库都有支持。之前用过 Navicat for sqlserver,感觉很好用&#xff0c;所以下载了Oracle版的用。上网查看了一下这个工具可以用于任何版本 8i 或以上的 Oracle …

微信小程序基于第三方插件微信同声传译,以及一些问题解决办法

使用之前首先得在微信微信小程序后台添加插件&#xff0c;获取插件的appid 名称 使用时在app.json文件添加插件配置 1 plugins: { 2 WechatSI: { 3 version: 0.1.0, 4 provider: wx069ba97219f66d99 5 } 6 } 其次就是在使用的页面进行调用 在index.js外…

TF卡里删掉文件后内存没变大_内存卡损坏怎么修复?数据恢复方法教程

内存卡损坏怎么修复&#xff1f;内存卡又叫SD卡&#xff0c;是一种很轻便小巧的便携存储装置&#xff0c;往往内置于各种便携媒体设备内部。内存卡本身具有坚固、抗冲击等外部特性和读写快、空间大等内部特性&#xff0c;但是内存卡因为每天都要读写大量数据很容易从内部发生损…

idea 如何隐藏/展示不想看到的文件

隐藏&#xff1a;在 Ignore files and folders中添加想要过滤的文件或文件夹名称 展示隐藏文件&#xff1a; 在过滤列表中删除掉文件或者文件夹就好了 转载于:https://www.cnblogs.com/mengjianzhou/p/6177897.html