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

news2024/9/30 1:28:19

背景

在时序数据库中,资源的操作是一个复杂且关键的任务。这些操作通常涉及到多个步骤,每个步骤都可能会失败,导致资源处于不一致的状态。例如,一个用户可能想要在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.coloradmin.cn/o/1333413.html

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

相关文章

Alnet网络分析与demo实例

参考自 up主的b站链接:霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 Fun_机器学习,pytorch图像分类,工具箱-CSDN博客 数据集下载 http://download.tensorflow.org/example_images/flower_photos.tgz 包含 5 中类型的花,每种…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

Netty-4-网络编程模式

我们经常听到各种各样的概念——阻塞、非阻塞、同步、异步&#xff0c;这些概念都与我们采用的网络编程模式有关。 例如&#xff0c;如果采用BIO网络编程模式&#xff0c;那么程序就具有阻塞、同步等特质。 诸如此类&#xff0c;不同的网络编程模式具有不同的特点&#xff0c…

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS&#xff08;通用配置&#xff09;3.4.2 SCHEDULING&#xff0…

博弈论:理解决策背后的复杂动态

1.基本概念 博弈论是一门研究具有冲突和合作元素决策制定的数学理论。它不仅适用于经济学&#xff0c;还广泛应用于政治学、心理学、生物学等领域。博弈论的核心在于分析参与者&#xff08;称为“玩家”&#xff09;在特定情境下的策略选择&#xff0c;以及这些选择如何影响最…

工资发放 C语言xdoj92

题目描述&#xff1a; 公司财务要发工资现金&#xff0c;需要提前换取100元、50元、20元、10元、5元和1元的人民币&#xff0c; 请输入工资数&#xff0c;计算张数最少情况下&#xff0c;各自需要多少张。 输入格式&#xff1a;共一行&#xff0c;输入一个正整数。 输出格式&am…

游戏软件提示d3dcompiler_43.dll的五个解决方法,亲测靠谱

在使用电脑进行工作&#xff0c;玩游戏的时候&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“D3DCompiler_43.dll丢失”的提示。D3DCompiler_43.dll是一个非常重要的动态链接库文件。它是由DirectX SDK提供的&#xff0c;用于编译和优化DirectX着色器代码的…

50 个具有挑战性的概率问题 [04/50]:尝试直至首次成功

一、说明 你好&#xff0c;我最近对与概率相关的问题产生了兴趣。我偶然发现了 Frederick Mosteller 所著的《五十个具有挑战性的概率问题及其解决方案》这本书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇文章仅包含 1 个问题&#xff0c;使其…

【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句

前言 通过以上1-5文档的介绍&#xff0c;Quick与QML的概念及QML语法、类型、文件作用等已叙述个大概&#xff0c;接下来是对QML语法进行展开来说。 其实&#xff0c;学习任何一门语言或者做任何一件事情&#xff0c;并不用一开始就要求尽善尽美&#xff0c;做个无懈可击&…

【Python从入门到进阶】45、Scrapy框架核心组件介绍

接上篇《44、Scrapy的基本介绍和安装》 上一篇我们学习了Scrapy框架的基础介绍以及环境的搭建&#xff0c;本篇我们来学习一下Scrapy框架的核心组件的使用。 下面的核心组件的介绍&#xff0c;仍是基于这幅图的机制&#xff0c;大家可以再回顾一下&#xff1a; 注&#xff1a;…

数学的雨伞下:理解世界的乐趣

这本书没有一个公式&#xff0c;却讲透了数学的本质&#xff01; 《数学的雨伞下&#xff1a;理解世界的乐趣》。一本足以刷新观念的好书&#xff0c;从超市到对数再到相对论&#xff0c;娓娓道来。对于思维空间也给出了一个更容易理解的角度。 作者&#xff1a;米卡埃尔•洛奈…

Ubuntu20.04纯命令配置PCL(点云库)

Ubuntu20.04纯命令配置PCL&#xff08;点云库&#xff09; 最近在学习点云库&#xff08;PCL&#xff09;的使用&#xff0c;第一步就是在自己的电脑安装配置PCL。 首先&#xff0c;对于ubuntu 16.04以上版本&#xff0c;可以直接使用命令进行安装&#xff0c;新建好一个文件夹…

分析冒泡排序

#include <stdio.h> int main() { int arr[10] { 2,5,1,3,6,4,7,8,9,0 }; int i 0; int j 0; for( i 0 ;i < sizeof(arr)/sizeof(arr[0]) - 1 ; i) 红色的代表数组一共有n个元素&#xff0c;则需要n-1次 { for( j 0 // 这里可以让数组从哪一…

人工智能轨道交通行业周刊-第69期(2023.12.11-12.24)

本期关键词&#xff1a;集装箱智能管理、智慧工地、智能应急机器人、车辆构造、大模型推理 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨…

UG在实体上刻字

当我们想在实体上显示文字的时候&#xff0c;需要用到文本命令&#xff0c;菜单-插入-曲线-文本 文本命令中的具体用法 当在曲线和平面上显示文字的时候&#xff0c;只需要输入文字&#xff0c;并选中相应的曲线或者平面即可 当在曲面上显示文字的时候&#xff0c;设置如下 当文…

Vue3中的混入(mixins)

本文主要介绍Vue3中的混入&#xff08;mixins&#xff09;。 目录 一、在普通写法中使用混入&#xff1a;二、在setup写法中使用混入&#xff1a; 混入是Vue中一种用于在组件中共享可复用功能的特性。在Vue 3中&#xff0c;混入的使用方式有所改变。 一、在普通写法中使用混入…

c++11--类型自动推导

1.自动类型推断 1.1.auto a.auto声明变量的类型必须由编译器在编译时期推导而得。 int main(){double foo();auto x 1;//x类型为intauto y foo();// y类型为doubleauto z;// errreturn 0; }b.auto声明得变量必须被初始化。 c.针对指针和引用 推导类型是指针类型时&#xff0…

抠图、换背景、正装图证件照制作方法

本篇灵感是最近又要使用别的底色的正装照的图片。上学的时候&#xff0c;要求证件照的底色是蓝底、党员档案里要求图片的底色是红底、 将来上班的证件照要求是白底&#xff0c;并且无论是考研还是找工作都是制作简历的时候&#xff0c;根据简历的样板不同需要更换不同的底色。 …

HBase 集群搭建

文章目录 安装前准备兼容性官方网址 集群搭建搭建 Hadoop 集群搭建 Zookeeper 集群解压缩安装配置文件高可用配置分发 HBase 文件 服务的启停启动顺序停止顺序 验证进程查看 Web 端页面 安装前准备 兼容性 1&#xff09;与 Zookeeper 的兼容性问题&#xff0c;越新越好&#…

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…