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.pswp.cn/news/397186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397186.shtml
英文地址,請注明出處:http://en.pswp.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…

使用flot.js 發現x軸y軸無法顯示軸名稱

添加此插件解決問題 flot-axislabels https://github.com/markrcote/flot-axislabels 轉載于:https://www.cnblogs.com/feehuang/p/4993920.html

快速冪、矩陣快速冪、快速乘法

快速冪 快速冪是我們經常用到的一種算法&#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…

python篩選含變量的特定行_Python SQL從特定變量字段中選擇行

我想從基于隨機變量的行中獲取一個特定的值。下面是一個示例表&#xff0c;PID列是一個“自動遞增主鍵整數”&#xff0c;其他兩列是文本示例表PID NAME PHONE--- ---- -----1 bill 999-99992 joe 888-8888我想把一個隨機變量扔到桌子上randomVariable raw_input(Enter someth…

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;如果有針對的解決。…

ElasticSearch聚合分析

聚合用于分析查詢結果集的統計指標&#xff0c;我們以觀看日志分析為例&#xff0c;介紹各種常用的ElasticSearch聚合操作。 目錄&#xff1a; 查詢用戶觀看視頻數和觀看時長聚合分頁器查詢視頻uv 單個視頻uv批量查詢視頻uvHaving查詢 根據 count 進行過濾根據其它指標進行過濾…

bg感_【0328】BG推文 | 5本我在逃生游戲里養娃娃+歲月繾綣已無你+關于我比女主蘇這回事+消失的白月光又回來了等...

大家多多支持原文&#xff01;以下內容多為網絡搜集&#xff0c;非商業用途。版權歸原作者所有&#xff0c;侵聯&#xff01;BG文《我在逃生游戲里養娃娃》作者&#xff1a;鶴舫閑人《歲月繾綣已無你》作者&#xff1a;酒爺《關于我比女主蘇這回事》作者&#xff1a;歡何極《消…

android 屏幕最小寬度_AndroidTV屏幕適配-smallestWidth(最小寬度) 限定符

背景前幾天接到一個需求&#xff0c;把項目上的原來的2k屏幕適配到4k屏幕。我采用的是smallestWidth最小寬度限定符進行適配的我們項目的。1&#xff0c;smallestWidth 限定符適配原理系統都是根據限定符去尋找對應的 dimens.xml 文件。例如在最小寬度為 720dp 的設備上&#x…

mysql 組合索引

MySQL單列索引是我們使用MySQL數據庫中經常會見到的&#xff0c;MySQL單列索引和組合索引的區別可能有很多人還不是十分的了解&#xff0c;下面就為您分析兩者的主要區別&#xff0c;供您參考學習。 為了形象地對比兩者&#xff0c;再建一個表&#xff1a; CREATE TABLE myInde…