Cantian 数据存储加速引擎项目整体介绍
适用版本 : Cantian 当前主分支(基于源码目录结构)
阅读时间 : 约 40 分钟
难度等级: ⭐⭐⭐⭐(中高级)
目录
- 背景
- 一、项目定位与核心价值
- 二、整体架构与技术栈
- 三、核心功能与已有特性
- 四、系统模块划分
- 五、可达到实用的程序与部署形态
- 六、依赖组件与外部配合
- 七、当前问题、限制与注意事项
- 八、业界同类技术比较
- 九、后续文档导航
- 十、总结与展望
背景
Cantian(Cantian Storage Engine,中文常称"数据存储加速引擎")是由华为开源的一款面向共享存储架构的数据库存储引擎项目,采用木兰宽松许可证第 2 版(Mulan PSL v2)发布。项目以 C 语言为主,围绕"共享存储 + 双节点集群 + 多数据库兼容"的核心理念,提供了一套包含内核存储引擎、SQL 执行层、集群通信、集群管理、客户端工具、MySQL 兼容适配层在内的完整数据库基础设施。
在数据库架构演进的趋势中,共享存储集群(Shared-Storage Cluster)因其能够在多个计算节点之间共享同一份数据、实现读写扩展与高可用,逐渐成为企业级数据库的重要形态。Cantian 的设计目标正是为上层数据库(目前以 MySQL 为主)提供一种高性能、强一致、可扩展的底层存储与事务能力,同时屏蔽分布式事务、缓存一致性、故障恢复等复杂细节。
本文作为 Cantian 项目文档系列的开篇,将从宏观视角系统介绍项目的定位、架构、功能、模块、部署形态、依赖配合、问题限制以及业界对比,为后续各模块的深度解析奠定基础。
文章亮点:
- ✅ 全景视图: 从源码目录到运行态组件的完整映射
- ✅ 模块化解构: 14 大系统模块的职责与边界
- ✅ 部署形态: NAS / dbstore 两种共享存储部署模式
- ✅ 生态对接: MySQL 8.0.26 兼容接入路径
- ✅ 同业对比: 与 Oracle RAC、Aurora、PolarDB、TiDB 的差异定位
一、项目定位与核心价值
1.1 项目定义
Cantian 是一款面向共享存储架构的数据库存储加速引擎,位于上层数据库(如 MySQL)与底层共享存储之间,负责提供:
- 数据库存储能力: 表、索引、LOB、表空间、分区等对象的管理与访问。
- 事务与并发控制: ACID 事务、多版本并发控制(MVCC)、锁与闩锁、死锁检测。
- 持久化与恢复: Redo/Undo 日志、检查点、崩溃恢复、归档与备份恢复。
- 集群扩展能力: 双节点共享存储集群(DTC, Distributed Transparent Cluster)、缓存一致性、全局锁、全局事务视图。
- 多数据库兼容: 当前主要支持 MySQL 通过 CTC(Cantian Transactional Connector)插件接入。
1.2 核心价值
| 维度 | 核心价值 |
|---|---|
| 性能加速 | 通过专用存储引擎替代通用存储引擎(如 InnoDB),在共享存储上实现更高的 OLTP/OLAP 性能 |
| 透明扩展 | 上层应用无需改造,即可享受双节点读写扩展能力 |
| 高可用 | 双节点共享存储 + CMS 集群管理,实现秒级故障切换 |
| 数据一致 | 全局缓存一致性协议、分布式事务、全局 SCN/LSN 同步 |
| 生态兼容 | 通过 CTC 插件与 MySQL 8.0.26 深度集成,降低迁移成本 |
| 企业级特性 | 备份恢复、闪回、审计、数据校验、安全加密等 |
1.3 典型应用场景
- MySQL 高性能替代: 将 MySQL 的默认存储引擎替换为 CTC,提升高并发场景下的吞吐与延迟表现。
- 双活数据库集群: 两个计算节点同时访问共享存储,实现负载分担与故障快速切换。
- 企业核心系统: 需要强一致、高可用、可扩展的数据库底座,如金融、电信、政务等行业。
- 云原生数据库底座: 作为共享存储架构下的数据库存储引擎,适配云上的 NAS、SAN、分布式存储。
二、整体架构与技术栈
2.1 技术栈
| 层次 | 技术选型 |
|---|---|
| 编程语言 | C(核心引擎)、Python(部署运维脚本)、Shell(构建与安装脚本) |
| 构建系统 | CMake(主工程)+ 辅助 Makefile / Shell 脚本 |
| 依赖三方库 | OpenSSL、zlib、lz4、Zstandard、protobuf、protobuf-c、pcre2、华为安全函数库(securec) |
| 操作系统 | 当前明确支持 CentOS 8.2(x86),可参照编译指导适配其他 Linux 发行版 |
| 存储协议 | NFSv4.0 / NFSv4.1(NAS 模式)、dbstore / RDMA / TCP(dbstore 模式) |
| 上层兼容 | MySQL 8.0.26(通过 CTC 插件) |
2.2 源码目录结构
cantian/
├── Cantian/ # 主工程入口,顶层 CMakeLists.txt
├── build/ # 编译构建脚本
├── common/ # 管控面脚本与公共逻辑
├── ct_om/ # 安装部署相关脚本
├── pkg/ # 源代码主目录,按模块解耦
│ ├── src/
│ │ ├── common/ # 公共基础库(cm_*)
│ │ ├── cmd/ # SQL 引擎层(zesql 静态库)
│ │ ├── driver/ # 客户端驱动(GSC)
│ │ ├── kernel/ # 内核存储引擎
│ │ ├── server/ # 服务端进程框架(cantiand)
│ │ ├── protocol/ # 通信协议层(TCP/UDS/SSL/RDMA)
│ │ ├── mec/ # 集群消息通信子系统(MES)
│ │ ├── rc/ # 重构/恢复控制相关
│ │ ├── cms/ # 集群管理服务器(CMS)
│ │ ├── cluster/ # 分布式集群核心(DTC)
│ │ ├── tse/ # MySQL 兼容适配层(TSE)
│ │ ├── utils/ # 工具集(gsql、gspe)
│ │ ├── gstbox/ # 安全可信工具箱
│ │ └── version/ # 版本信息
│ ├── deploy/ # 部署与运维脚本
│ └── cfg/ # 配置文件模板
├── open_source/ # 开源依赖组件源码与头文件
├── library/ # 编译好的第三方库
└── README.md # 项目说明与编译部署指南
2.3 运行态架构
┌─────────────────────────────────────────────────────────────────────────┐
│ 上层数据库层 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ MySQL 8.0.26 + CTC 插件 │ │
│ │ (CTC: Cantian Transactional Connector / ha_ctc.so) │ │
│ └────────────────────────────────┬────────────────────────────────┘ │
└────────────────────────────────────┼────────────────────────────────────┘
│ SQL / 事务 / DDL 请求
▼
┌─────────────────────────────────────────────────────────────────────────┐
│ Cantian 引擎层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ TSE 适配层 │ │ SQL 引擎 │ │ 服务端进程 │ │ 集群通信层 │ │
│ │ (pkg/tse) │ │ (pkg/cmd) │ │(pkg/server) │ │ (pkg/mec) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ └────────────────┴────────────────┴────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 内核存储引擎 (pkg/kernel) │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ 事务层 │ │ 缓冲池 │ │ 持久化 │ │ 表/索引 │ │ 复制层 │ │ │
│ │ │ (xact) │ │(buffer) │ │(persist)│ │(table/ │ │(replicat│ │ │
│ │ │ │ │ │ │ │ │ index) │ │ ion) │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────┼──────────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 集群管理 │ │ 分布式集群 │ │ 共享存储 │ │
│ │ (CMS) │◄──────────►│ (DTC) │◄──────────►│ NAS/dbstore │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
2.4 关键运行态组件
| 组件名 | 对应产物 | 主要职责 |
|---|---|---|
| cantiand | pkg/src/server 编译产出 |
Cantian 主数据库服务器进程 |
| cms | pkg/src/cms 编译产出 |
集群管理服务器,负责节点心跳、资源调度、故障检测 |
| gsql / ctclient | pkg/src/utils/gsql 编译产出 |
命令行 SQL 客户端 |
| gspe | pkg/src/utils/gspe 编译产出 |
密码与密钥管理工具 |
| gsc | pkg/src/driver/gsc 编译产出 |
C 语言客户端驱动库 |
| ha_ctc.so | 外部 MySQL 插件 | MySQL 的 Cantian 存储引擎插件 |
三、核心功能与已有特性
3.1 存储引擎能力
- 表与索引组织: 支持堆表、B+ 树索引、分区表、临时表、外部表等。
- 表空间管理: 数据文件、临时表空间、undo 表空间、表空间扩展与收缩。
- 大对象(LOB): 独立 LOB 存储与日志机制。
- 缓存管理: 多缓冲区池、页面读取/写入、脏页刷写、一致性读取。
- 数据校验: 支持页面级校验和,检测静默数据损坏。
3.2 事务与并发
- ACID 事务: 完整的事务开始、提交、回滚语义。
- MVCC: 多版本并发控制,通过 SCN/SSN 实现一致性读。
- 锁机制: 行锁、表锁、分布式锁(DLS)、闩锁(Latch)等。
- 死锁检测: 本地与分布式死锁检测(MES 中的死锁相关消息)。
- 隔离级别: 支持读已提交、可重复读等等级。
3.3 持久化与恢复
- Redo/Undo 日志: 物理 Redo 日志用于崩溃恢复,Undo 用于事务回滚与 MVCC。
- 检查点(Checkpoint): 周期性或触发式检查点,缩短恢复时间。
- 崩溃恢复: 基于 Redo 日志的前滚恢复。
- 归档与备份: 归档日志管理、物理备份与恢复。
- 闪回(Flashback): 支持表闪回、数据恢复等能力。
3.4 集群与高可用
- DTC 双节点集群: Distributed Transparent Cluster,两个节点共享同一份存储。
- 全局缓存一致性: 通过 MES 消息实现页面所有权、失效通知、主从转换。
- 全局 SCN/LSN: 集群级系统变更号与日志序列号同步。
- CMS 集群管理: 节点心跳、资源监控、故障检测、IOFENCE 隔离。
- 复制能力: Redo 日志发送、接收、回放,支持高可用扩展。
3.5 兼容与生态
- MySQL 兼容: 通过 CTC 插件让 MySQL 使用 Cantian 作为存储引擎。
- DDL 广播: 跨节点 DDL 变更同步(TSE 中的 DDL Broadcast)。
- 统计信息: CBO(Cost-Based Optimizer)统计信息收集与同步。
- 客户端工具: gsql 命令行客户端、GSC 驱动、gspe 安全工具。
3.6 安全与运维
- 安全加密: SSL/TLS 通信、AES/KMC 密钥管理、SCRAM-SHA-256 认证。
- 审计: gstbox 中的审计相关能力。
- 巡检: 部署脚本中包含 inspection_task.py 等巡检工具。
- 黑匣子: 崩溃信息收集(blackbox 机制)。
四、系统模块划分
根据源码目录结构与功能职责,Cantian 可划分为以下 14 个核心系统模块。后续文档将针对每个模块进行独立深度解析。
| 序号 | 模块 | 源码位置 | 核心职责 | 对应深度文档 |
|---|---|---|---|---|
| 1 | 服务端进程架构 | pkg/src/server |
cantiand 主进程的启动、生命周期、参数管理、会话管理、监听器、Reactor 模型 | cantian_server_architecture.md |
| 2 | SQL 引擎 | pkg/src/cmd |
SQL 解析、函数、JSON 处理、查询执行(zesql 静态库) | cantian_sql_engine.md |
| 3 | 内核存储引擎总览 | pkg/src/kernel |
数据库内核的入口与整体协调、数据库创建/修改、接口封装 | cantian_storage_engine.md |
| 4 | 缓冲池与页面管理 | pkg/src/kernel/buffer |
Buffer Pool、页面访问、日志页面、一致性读取 | cantian_buffer_pool.md |
| 5 | 事务与并发控制 | pkg/src/kernel/xact |
事务生命周期、Undo、锁、闩锁、死锁、MVCC | cantian_transaction.md |
| 6 | 持久化与恢复机制 | pkg/src/kernel/persist |
Redo 日志、检查点、崩溃恢复、归档、日志文件管理 | cantian_persistence_recovery.md |
| 7 | 复制与高可用 | pkg/src/kernel/replication |
Redo 发送/接收/回放、复制状态、GBP、Raft 相关 | cantian_replication_ha.md |
| 8 | 表与索引组织 | pkg/src/kernel/table + pkg/src/kernel/index |
堆表/索引的 CRUD、分区、PCR/RCR 索引、统计信息 | cantian_table_index.md |
| 9 | 集群通信子系统 | pkg/src/mec |
节点间消息通信(MES)、消息队列、消息池、TCP/UDS 传输 | cantian_cluster_communication.md |
| 10 | 分布式集群管理 | pkg/src/cluster + pkg/src/cms |
DTC 分布式集群、缓存一致性、全局锁、CMS 资源调度 | cantian_cluster_management.md |
| 11 | MySQL 兼容适配层 | pkg/src/tse |
MySQL 与 Cantian 的适配、会话映射、DDL 广播、消息队列 | cantian_tse_mysql_adapter.md |
| 12 | 客户端协议与工具 | pkg/src/protocol + pkg/src/driver + pkg/src/utils |
通信协议、GSC 驱动、gsql/gspe 工具 | cantian_client_protocol_tools.md |
| 13 | 安全可信工具箱 | pkg/src/gstbox |
数据修复、日志挖掘、审计、页面分析 | cantian_security_gstbox.md |
| 14 | 部署与运维体系 | common/ + ct_om/ + pkg/deploy/ |
安装部署、配置管理、巡检、升级、卸载 | cantian_deployment_ops.md |
五、可达到实用的程序与部署形态
5.1 可独立运行的程序
Cantian 项目编译完成后,可产生以下实用程序/库:
| 程序/库 | 说明 | 实用性 |
|---|---|---|
| cantiand | Cantian 主服务器 | ⭐⭐⭐⭐⭐ 核心数据库进程 |
| cms | 集群管理服务器 | ⭐⭐⭐⭐⭐ 集群高可用调度 |
| gsql / ctclient | 命令行 SQL 客户端 | ⭐⭐⭐⭐⭐ 日常运维与开发 |
| gspe | 密码与密钥管理工具 | ⭐⭐⭐⭐ 安全运维 |
| libgsc.so / 静态库 | C 客户端驱动 | ⭐⭐⭐⭐ 应用接入 |
| ha_ctc.so | MySQL 存储引擎插件 | ⭐⭐⭐⭐⭐ 与 MySQL 对接 |
| 静态库群 | zeserver、zekernel、zemes、zecluster 等 | ⭐⭐⭐⭐ 被主程序链接 |
5.2 典型部署形态
形态 1: NAS 共享存储双节点集群
┌─────────────┐ ┌─────────────┐
│ Node 0 │ │ Node 1 │
│ cantiand │◄──心跳网络──►│ cantiand │
│ cms │ │ cms │
└──────┬──────┘ └──────┬──────┘
│ │
└────────┬───────────────────┘
│ NFSv4.0 / NFSv4.1
▼
┌─────────────────┐
│ 共享存储 NAS │
│ (数据/共享/归档/元数据)
└─────────────────┘
特点:
- 两台数据库服务器共享 NAS 存储。
- 使用 NFSv4.0 挂载 cms 共享文件系统。
- 使用 NFSv4.1 挂载数据、归档、元数据文件系统。
- 通过心跳网络实现节点间通信与 CMS 仲裁。
形态 2: dbstore 部署模式
┌─────────────┐ ┌─────────────┐
│ Node 0 │ │ Node 1 │
│ cantiand │◄──RoCE/RDMA──►│ cantiand │
│ cms │ │ cms │
└──────┬──────┘ └──────┬──────┘
│ │
└────────┬───────────────────┘
│ RDMA / TCP
▼
┌─────────────────┐
│ dbstore 存储 │
│ (华为分布式存储) │
└─────────────────┘
特点:
- 使用 dbstore 协议(RDMA/TCP)访问后端存储。
- 需要配置
cantian_vlan_ip、storage_vlan_ip、link_type等参数。 - 适合对接华为企业级存储,获得更高 I/O 性能。
形态 3: MySQL + Cantian 集成
┌─────────────────────────────────────┐
│ MySQL 8.0.26 │
│ ┌─────────────────────────────┐ │
│ │ CTC 插件 (ha_ctc.so) │ │
│ │ - ctc_ddl_rewriter │ │
│ │ - CTC 存储引擎 │ │
│ └─────────────────────────────┘ │
└─────────────────┬───────────────────┘
│ 共享内存 / 消息队列
▼
┌─────────────────────────────────────┐
│ Cantian 引擎 (cantiand) │
│ TSE 适配层 + 内核存储引擎 │
└─────────────────────────────────────┘
接入方式:
- 在 MySQL 中执行
install plugin ctc_ddl_rewriter soname 'ha_ctc.so'。 - 执行
install plugin CTC soname 'ha_ctc.so'。 - 或通过
mysqld --plugin_load启动参数加载。
六、依赖组件与外部配合
6.1 第三方依赖库
| 组件 | 版本示例 | 用途 |
|---|---|---|
| OpenSSL | 1.1.1n | SSL/TLS、加密、哈希 |
| zlib | 1.2.11 | 数据压缩 |
| lz4 | 1.9.3 | 高速压缩 |
| Zstandard | 1.5.2 | 高压缩比压缩 |
| protobuf | 3.13.0 | 协议序列化(TSE 与 MySQL 通信) |
| protobuf-c | 1.4.1 | C 语言 protobuf 绑定 |
| pcre2 | 10.40 | 正则表达式处理 |
| 华为 securec | - | 安全函数库 |
6.2 基础设施配合
| 配合项 | 说明 |
|---|---|
| 操作系统 | CentOS 8.2(x86)为官方支持版本 |
| 编译工具 | CMake >= 3.14.1、automake、libtool、g++、libaio、pkgconfig、rpmbuild |
| 网络 | 至少两个网络平面:心跳网络、NAS/RoCE 存储网络 |
| 共享存储 | NAS(NFSv4.0/4.1)或华为 dbstore 存储 |
| 文件系统 | 数据文件系统、cms 共享文件系统、元数据文件系统、归档文件系统(可选) |
| Kerberos | 可选,用于 NFS 安全认证(krb5 / krb5i / krb5p) |
| MySQL | MySQL 8.0.26(如需其他版本需适配) |
6.3 部署配置关键参数
config_params.json 中的关键参数:
| 参数 | 含义 |
|---|---|
deploy_user |
数据库运行用户,如 ctdba:ctdba |
cluster_id / cluster_name |
集群标识 |
node_id |
节点 ID,双节点为 0 / 1 |
cms_ip |
节点间心跳 IP |
storage_*_fs |
各类存储文件系统名称 |
deploy_mode |
--nas 或 --dbstore |
link_type |
0=TCP, 1=RDMA, 2=RDMA_1823 |
db_type |
0=性能模式, 1=归档模式 |
七、当前问题、限制与注意事项
7.1 已知限制
| 限制项 | 说明 |
|---|---|
| 操作系统支持 | 当前仅明确支持 CentOS 8.2(x86),其他系统需自行适配 |
| MySQL 版本 | 当前仅支持 MySQL 8.0.26,其他版本需适配 |
| 节点规模 | 当前 DTC 架构主要面向双节点共享存储集群 |
| 构建复杂度 | 需要准备 open_source、library、platform 三个依赖目录,步骤较多 |
| 硬件依赖 | dbstore 模式需要华为存储或兼容设备支持 RDMA/RoCE |
7.2 使用注意事项
- 证书私钥密码加密 : 当前使用 base64 编码保存私钥密码,如需替换算法需修改
pkg/deploy/action/install.sh和pkg/src/mec/mes_tcp.c。 - 共享内存文件权限 : MySQL 与 Cantian 需能共同访问
/dev/shm下的共享内存文件。 - NFS 协议匹配: 不同文件系统需使用正确的 NFS 版本(cms 共享用 v4.0,数据/归档/元数据用 v4.1)。
- 卸载方式 : 支持
override(彻底卸载)和reserve(保留数据卸载重装)两种方式。 - 巡检依赖: 部分巡检项需要连接 zsql 数据库,需正确输入账号密码。
八、业界同类技术比较
8.1 与 Oracle RAC 比较
| 维度 | Cantian | Oracle RAC |
|---|---|---|
| 架构 | 共享存储双节点集群(DTC) | 共享存储多节点集群(RAC) |
| 上层兼容 | MySQL(CTC 插件) | Oracle 自有协议 |
| 缓存一致性 | MES 消息 + 页面所有权 | Cache Fusion |
| 集群管理 | CMS | Clusterware / Grid Infrastructure |
| 成熟度 | 新兴开源项目 | 几十年企业级积累 |
| 生态 | 开源、木兰许可证 | 商业软件 |
差异点: Cantian 的定位更偏向于"为 MySQL 等开源数据库提供共享存储集群能力",而 Oracle RAC 是完整的企业级 Oracle 数据库集群。
8.2 与 Amazon Aurora 比较
| 维度 | Cantian | Amazon Aurora |
|---|---|---|
| 架构 | 计算存储分离 / 共享存储 | 计算存储分离,日志即数据库 |
| 部署 | 私有化 / 本地 NAS / dbstore | AWS 托管云服务 |
| 副本 | 双节点共享存储读写 | 一个写节点 + 多个读副本 |
| 存储 | NFS / dbstore | 自研分布式存储 |
| 开源 | 是(Mulan PSL v2) | 否 |
差异点: Aurora 是云原生托管数据库,强调日志下推和存储层计算;Cantian 是开源引擎,强调与 MySQL 的兼容和私有化共享存储部署。
8.3 与 PolarDB 比较
| 维度 | Cantian | PolarDB |
|---|---|---|
| 架构 | 共享存储集群 | 共享存储集群(PolarStore) |
| 兼容 | MySQL | MySQL / PostgreSQL |
| 部署 | 私有化 / 本地存储 | 阿里云托管 / 私有部署 |
| 开源 | 是 | 部分开源 |
| 节点数 | 当前双节点为主 | 一写多读,可扩展多个只读节点 |
差异点: PolarDB 是云厂商产品,拥有成熟的云管控和扩展能力;Cantian 提供开源的底层引擎,用户可自主构建集群。
8.4 与 TiDB 比较
| 维度 | Cantian | TiDB |
|---|---|---|
| 架构 | 共享存储集群 | 分布式 NewSQL(计算/存储/调度分离) |
| 一致性 | 共享存储 + 缓存一致性 | Raft 协议 + Spanner-like 时间戳 |
| 兼容 | MySQL 存储引擎层 | MySQL 协议层 |
| 扩展性 | 垂直扩展 + 双节点 | 水平扩展,多节点 |
| 数据分布 | 共享一份数据 | 数据分片(Region) |
差异点: TiDB 是 Share-Nothing 分布式数据库,强调水平扩展;Cantian 是 Share-Storage 集群,强调共享存储下的强一致和低延迟。
8.5 定位总结
┌─────────────────────────────────────────────────────────────┐
│ 数据库架构谱系 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Share-Nothing 分布式 │ Share-Storage 集群 │
│ ───────────────────────── │ ────────────────────── │
│ TiDB / CockroachDB │ Oracle RAC / Cantian │
│ 水平扩展、数据分片 │ 共享存储、缓存一致性 │
│ │
│ 云原生托管 │ 私有化 / 混合云 │
│ ───────────────────────── │ ────────────────────── │
│ Amazon Aurora / PolarDB │ Cantian / 自建 RAC │
│ 日志下推、存储计算分离 │ 本地 NAS/dbstore、自主可控 │
│ │
└─────────────────────────────────────────────────────────────┘
九、总结与展望
9.1 核心要点回顾
本文从项目定位、整体架构、核心功能、模块划分、部署形态、依赖配合、问题限制、业界对比等维度,对 Cantian 项目进行了全景式介绍:
| 维度 | 关键结论 |
|---|---|
| 项目定位 | 面向共享存储架构的数据库存储加速引擎,主打 MySQL 兼容与双节点集群 |
| 核心架构 | cantiand + CMS + MES + DTC + TSE + 内核存储引擎的多层架构 |
| 关键能力 | 存储引擎、事务并发、持久化恢复、集群一致性、MySQL 兼容 |
| 部署形态 | NAS 模式 / dbstore 模式,双节点共享存储集群 |
| 主要依赖 | OpenSSL、lz4、Zstandard、protobuf、protobuf-c、pcre2、securec |
| 生态对比 | 介于 Oracle RAC 与 Aurora/PolarDB 之间,走开源 + 私有化共享存储路线 |
9.2 当前成熟度评估
Cantian 已经具备一套相对完整的数据库存储引擎能力,包括:
- ✅ 完整的内核存储引擎(表、索引、事务、日志、恢复)
- ✅ 双节点共享存储集群架构(DTC)
- ✅ 集群消息通信与管理(MES + CMS)
- ✅ MySQL 8.0.26 兼容接入(CTC 插件)
- ✅ 部署运维脚本与巡检工具
但仍处于持续演进阶段,主要挑战包括:
- ⚠️ 操作系统与硬件平台支持范围有待扩展
- ⚠️ 上层数据库兼容目前以 MySQL 为主,PostgreSQL 等兼容尚在探索
- ⚠️ 大规模集群(多节点)能力相比商业产品仍有差距
- ⚠️ 社区生态、文档、案例仍在建设中
附录 A: 关键术语表
| 术语 | 全称 | 说明 |
|---|---|---|
| DTC | Distributed Transparent Cluster | 分布式透明集群,Cantian 的双节点共享存储集群架构 |
| CMS | Cluster Management Service / Component | 集群管理服务,负责心跳、资源调度、故障检测 |
| MES | Message Exchange Service / Component | 集群消息交换服务,负责节点间通信 |
| TSE | Tianchi Storage Engine / Transactional Storage Engine | MySQL 兼容适配层 |
| CTC | Cantian Transactional Connector | MySQL 的 Cantian 存储引擎插件 |
| GSC | GaussDB / Cantian C Client | C 语言客户端驱动 |
| GSQL | 命令行 SQL 客户端 | 类似 psql / mysql 的交互式工具 |
| GSPE | 密码/密钥管理工具 | 用于加密、密钥生成、KMC 转换等 |
| GSTBox | 安全可信工具箱 | 审计、修复、日志挖掘等工具集合 |
| SCN | System Change Number | 系统变更号,用于 MVCC 与一致性读 |
| LSN | Log Sequence Number | 日志序列号,用于恢复与复制 |
| PCR | Primary Cluster Row / Persistent Cluster Row | 与索引/表组织相关的术语 |
| RCR | Row Cluster Row / 类似概念 | 索引组织形式 |
文档版本 : v1.0
最后更新 : 2026-06-18
适用范围: Cantian 当前主分支
声明: 本文基于 Cantian 开源项目的源码与 README 进行分析,部分内部实现细节可能随版本迭代而变化。建议读者结合具体版本的源码进行对照学习。