数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
数据库管理250期 2024-10-09
- 数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
- 1 简介
- 2 引擎构成
- 3 引擎架构
- 4 文件分布
- 5 分布式MVCC
- 6 限制/要求
- 总结
数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭
之前在参天的邀请下,通过华为稼先社区在华为内部做了一个与数据库、RDMA和存算分离架构的线上演讲与讨论。时隔一段时间了,还是有必要对参天(Cantian)进行了解。
1 简介
Cantian是一个存储引擎,采用了存算分的离架构,通过分布式缓存技术、事务MVCC机制、多主集群高可用等关键技术,可以让使能普通的单机数据库,让其变得具有类似Oracle RAC的多读多写能力。Cantian引擎无需修改已有数据库的实现,可以以无侵入的方式被MySQL等数据库加载运行。Cantian引擎的多读多写需要基于共享存储来构建。任何能够提供共享存储并可以提供标准文件接口的存储系统都可以进行对接。
Cantian的主要特性:
- 多读多写
- 集群管理:集群成员状态维护、集群异常处理、仲裁等
- 支持与MySQL对接:与Innodb兼容
- 支持MySQL共享系统表
- 支持滚动升级
- 支持备份
Cantian于2023年8月25日华为数据存储用户精英论坛上正式开源,使用木兰开源许可协议。代码仓库:https://gitee.com/openeuler/cantian
目前Klustron数据库已发布Cantian伙伴版本。
2 引擎构成
Cantian引擎主要由五个主要部分组成:
- CTC(Cantian Connector):负责支持Cantian引擎作为分布式数据库的存储引擎插件,支持DDL、DML、事务等数据库功能,兼容分布式数据库的生态应用。
- CMS(Cluster Manager Service): 负责集群管理。
- 多读多写模块:Cantian引擎是基于共享存储的多写集群,各个节点在架构上对等,多读多写模块确保从任何一个节点都可以对数据库做DDL/DML/DCL等操作。任何一个节点做的修改,在满足隔离级别的要求下,其他节点都可以看到。所有计算节点共享和读写存储上同一份用户数据。
- 存储访问层:Cantian引擎通过共享存储提供的接口,例如标准文件接口,对数据进行读写操作,同时借助文件系统提供的锁机制进行互斥。
- 工具:包括备份恢复工具:将数据库下的所有表导出成SQL语句或者表格文本,逻辑恢复时再将文本格式的逻辑数据文件导入到数据库中。运维管理工具:各自命令行等。
3 引擎架构
架构中黄色为Cantian核心模块,蓝色部分不包括在Cantian开源代码中,需要由Cantian开源的使用者,例如数据库厂商提供。
- ①为和MySQL对接的Connector部分,这部分和MySQL在一个进程空间运行,主要作用是接受MySQL的请求,并通过IPC和Cantian进程进行通信。(这部分代码完全遵守MySQL的开源协议进行开源)
- ②提供ctmgr由第三方管理Agent调用,上报到管理平台
- ③提供ctbackup工具,语法上最大兼容extrabackup。由备份软件调度完成备份操作。
- ④提供安装部署,容灾配置等脚本。由管理平台调用完成安装扩容容灾调度等操作。
- ⑤提供安装容器相关指导。资源发放管理,容器化管理平台。
- Cantian引擎,有Cantian业务进程和集群管理CMS进程组成。每个Cantian进程都会对应一个CMS进程来负责监管Cantian运行状态、脑裂仲裁以及故障拉起。当CMS故障时有watchdog拉起。多个服务器上运行的Cantian之间的高速网络通信。Cantian访问共享存储,获取数据。
Cantian的Global Cache机制和老版本的RAC类似,确定某个缓冲块的Master实例,当一个实例拥有需要访问的对应缓冲块时则可直接访问,否则需要向Master实例查询该缓冲块的位置,Master通知该缓冲块缓冲的实例将其发送给需要访问该数据的数据库实例。
关于更多架构相关内容可以查看代码仓库中的《技术白皮书》,有很详尽的介绍。
4 文件分布
在Cantian中的文件位置和Oracle RAC中类似,都是存放在共享存储中的,但是:
- 集群中每个实例独占访问log、undo、temp等文件,只有故障恢复时,集群中的其他实例才能读取
- 控制文件、system、users等表空间是可以在集群中并发读写的
5 分布式MVCC
- segment(段)管理
根据上一节文件分布可知,每个实例拥有自己的undo表空间,即拥有自己独立的undo段管理和回收机制,一般只能进行本实例读取和修改,不进入data fusion,实例之间互不干扰。
Cantian使用SMON线程后台是在当前实例的undo段范围内进行shrink操作。 - txn管理
(xmap, xnum) xmap -> (seg_id, slot)
事务xid随着seg_id的分离而分离,根据当前事务xid中的seg_id可以快速定位到事务所在的实例和实际实例内的segment。
每个实例的undo下面具有独立的事务表,事务分配按照单机分配回收机制进行,事务在实例间是不能复用的。 - 分布式MVCC
集群模式下一致性读场景,某个实例要查询的页面可能在其他实例,甚至正在被其他实例上的事务修改。由于实例之前的undo和事务是隔离的,当前查询无法直接在本地完成CR页面的构建,如果依靠其他实例将需要的undo页面通过DCS传输到本地,则效率太低。考虑采用传输CR页面的方式,由相关实例后台参与CR页面的构建。
当MVCC需要一个经过多个实例多次变更的PRE-IMAGE的时候,在Cantian引擎里构建过程相对复杂,需要通过xid确定undo对应实例信息,再通过多个实例一级级的向前传递,最终才能完成构建对应CR页面。根据前面Global Cache机制相关内容,如页面不在本地,则在owner所在实例构建CR页面。
6 限制/要求
针对本期涉及的内容,Cantian有以下一些限制或要求:
- 目前发布的版本暂时仅支持2节点部署模式。
- 计算节点之间需要稳定高速的通信网络以交换page、锁等资源。
总结
Cantian作为一个存储引擎,类似于Oracle RAC的ASM,实现让原来单点的数据库可以使用高性能高可靠的共享存储,以实现计算性能的横向扩展。
老规矩,知道写了些啥。
相关文章:

数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)
数据库管理250期 2024-10-09 数据库管理-第250期 深入浅出多主多活数据库技术- Cantian存储引擎(一)(20241009)1 简介2 引擎构成3 引擎架构4 文件分布5 分布式MVCC6 限制/要求总结 数据库管理-第250期 深入浅出多主多活数据库技术…...

信号用wire类型还是reg类型定义
wire类型就是一根线,线有两端,一端发生改变,经过线传递的信号当然也会发生改变,reg类型则不同,可以把reg类型理解为存储数据的寄存器,当满足一定条件时,数值才被激活发生改变。 那么࿰…...

与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)
与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布, 且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新…...

数据驱动投资:AI在股票市场的应用
当ChatGPT首次亮相时,其卓越的语言处理能力立刻引起了许多行业的广泛关注,投资界也不例外。关于ChatGPT是否能应用于投资决策的问题,迅速成为热门讨论的焦点。 近期,加拿大多伦多大学和印度孟买理工学院的研究人员联合开展了一项…...

Tita使用小技巧:项目类型自定义,业务管理个性化
应用场景 某互联网企业,企业内部有研发部,有销售部 研发部通常需要管理各种技术研发类型项目,因此需要管理「研发型」项目,该类型项目需要明确「所属产品」、「级别管理:国家级/省市级」、「项目类别:创新…...

国药准字:您购药的可靠指南
益安宁丸为同溢堂药业有限公司所独家生产的一款中成药,在内地市场和港澳地区均有上市。 益安宁丸真品的唯一标准:无论港版还是内地版,包装盒必然有国药准字Z20063087标识,但凡没有国药准字标识的必为假药。...

Python类学习(2)——未完待续
函数和类的参数传递 实例方法 class House:# 类构造方法,也是实例方法def __init__(self, area, price):self.area areaself.price pricedef cls_func(self, arg):print(arg)my_house House(America, 330) # 实例化类对象,需要传入init中的两个参数 print(f…...

微前端框架 qiankun 全面解析到源码实现
微前端(Micro Frontends)是一种将大型前端应用拆分为多个独立模块的架构设计思想,旨在解决复杂应用开发与维护的难题。qiankun 是目前流行的微前端解决方案之一,基于 single-spa 进行封装,提供了一种简单且完整的微前端…...

初始化数据的正确方式?
关于这篇文章 https://proandroiddev.com/loading-initial-data-in-launchedeffect-vs-viewmodel-f1747c20ce62 pl的视频解读 当在viewmodel中需要进行数据的初始化的时候 viewmodel.initData() 放在哪里合适呢,大部分情况下可以放在 viewmodel的init{}模块&…...

Flutter平台嵌入器
When you build a Flutter app, it’s not just about the code you write in Dart and the Flutter framework. There’s also a crucial piece called the platform embedders that enable your Flutter app to run on different operating systems like Android, iOS, and s…...

微信小程序——婚礼邀请函
一、界面设计 首页: 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。温馨的欢迎语,如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。 邀请函详情页面: 顶部展示新人的照片…...

WebRTC Connection Negotiate解决
最近有个项目 ,部署之后一直显示,查了一些资料还是没有解决,无奈只有自己研究解决?经过排查,应该是内网穿透的问题 什么是内网穿透? 我们访问我们自己的官网产品页面,我们的服务器是一个单独…...

Redis面试篇1
1、为什么要用缓存? 使用缓存的目的就是提升读写性能。在实际的业务场景下,更多的是为了提升读性能,带来更好的性能和并发量。Redis的读写性能比MySQL好的多,我们就可以把MySQL中的热点数据缓存到Redis,提升读取性能&…...

Debezium系列之:Debezium 3.0.0.Final发布
Debezium系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标MariaDB连接器的更改版本 11.4.3 支持MongoDB连接器的更改MongoDB sink connectorMySQL连接器的改变MySQL 9MySQL向量数据类型Oracle连接…...

一文解决jQuery表格插件DataTable导出PDF中文乱码问题
原因是默认字体不支持中文,需要更换字体。 详情官网:pdfmake 官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件 以下是详细操作: 重要前提:电脑上需要已安装nodejs 点击进入官网下载安装即可&a…...

使用pytorch进行迁移学习的两个步骤
1. 步骤及代码 迁移学习一般都会使用两个步骤进行训练: 固定预训练模型的特征提取部分,只对最后一层进行训练,使其快速收敛;使用较小的学习率,对全部模型进行训练,并对每层的权重进行细微的调节。 impor…...

ChatGPT相关参数示例
max_token 用于控制最大输出长度,若ChatGPT的回复大于max_tokens,则对输出结果进行截断。 from openai import OpenAI client OpenAI(base_url"https://api.chatanywhere.tech/v1" ) response client.chat.completions.create(model"…...

OWASP发布大模型安全风险与应对策略(QA测试重点关注)
开放式 Web 应用程序安全项目(OWASP)发布了关于大模型应用的安全风险,这些风险不仅包括传统的沙盒逃逸、代码执行和鉴权不当等安全风险,还涉及提示注入、对话数据泄露和数据投毒等人工智能特有的安全风险。 帮助开发者和测试同学更…...

【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量
ArkTS是HarmonyOS开发的编程语言 ArkTS语法中的变量 【语法格式】: let 变量名: 类型 值 let:是定义变量的关键字类型: 值数据类型, 常用的数据类型 字符型(string)、数字型(number…...

UI自动化测试示例:python+pytest+selenium+allure
重点应用是封装、参数化: 比如在lib文件夹下,要存储封装好的方法和必要的环境变量(指网址等) 1.cfg.py:封装网址和对应的页面 SMP_ADDRESS http://127.0.0.1:8234SMP_URL_LOGIN f{SMP_ADDRESS}/login.html SMP_URL_DE…...

C/C++ 编程小工具
编写了 tools.h 和 tools.cpp,用于 Debug、性能测试、打印日志。 tools.h #ifndef TOOLS_H #define TOOLS_H#include <time.h> #include <fstream> #include <iostream> #include <random> #include <chrono> #include <vector&…...

第四十二章 使用 WS-ReliableMessaging
文章目录 第四十二章 使用 WS-ReliableMessaging从 Web 客户端发送一系列消息 第四十二章 使用 WS-ReliableMessaging IRIS 支持 WS-ReliableMessaging 规范的部分内容,如简介中所述。此规范提供了一种按顺序可靠地传递一系列消息的机制。本页介绍如何手动使用可靠…...

利士策分享,婚姻为何被称为大事?
利士策分享,婚姻为何被称为大事? 在历史的长河中,婚姻一直被视为人生中的头等大事,这一观念跨越时空,深深植根于各种文化和社会结构中。 古人为何将婚姻称为“大事”,这背后蕴含着丰富的社会、文化和心理寓…...

malloc源码分析之 ----- 你想要啥chunk
文章目录 malloc源码分析之 ----- 你想要啥chunktcachefastbinsmall binunsorted binbin处理top malloc源码分析之 ----- 你想要啥chunk tcache malloc源码,这里以glibc-2.29为例: void * __libc_malloc (size_t bytes) {mstate ar_ptr;void *victim;vo…...

软考系统分析师知识点五:数据通信与计算机网络
前言 今年报考了11月份的软考高级:系统分析师。 考试时间为:11月9日。 倒计时:32天。 目标:优先应试,其次学习,再次实践。 复习计划第一阶段:扫平基础知识点,仅抽取有用信息&am…...

windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)
windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier) 目录 SSH简述、三种网络连接特点SSH简述局域网内连接内网穿透(…...

Python 工具库每日推荐【openpyxl 】
文章目录 引言Python Excel 处理库的重要性今日推荐:openpyxl 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:自动生成月度销售报告案例分析高级特性条件格式数据验证扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计…...

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?
当前,各大平台的本地生活服务业务日渐兴盛,提高创业者入局意向的同时,也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看,在创业者们所询问的众多本地生活服务项目中,通过…...

ML 系列:【13 】— Logistic 回归(第 2 部分)
文章目录 一、说明二、挤压方法三、Logistic 回归中的损失函数四、后记 一、说明 在这篇文章中,我们将深入研究 squashing 方法,这是有符号距离方法(第 12节)的一种很有前途的替代方案。squashing 方法通过提供增强的对异常值…...

45岁被裁员的程序员,何去何从?
在当今快速变化的技术行业,职业生涯的稳定性受到挑战。在45岁被裁员,对很多程序员来说,可能是一种惊慌失措的体验。然而,这个阶段也可以被视为一个重新审视和调整方向的机会。本文将对可能的出路进行全方位的分析,并提…...