YMatrix 架构
YMatrix 采用了 Share-nothing 并行架构。其核心特点是各个节点独立运行,不共享内存或存储,节点之间仅通过网络通信进行协作。这种架构广泛应用于分布式数据库、大数据系统和高并发 Web 服务中。
基础架构
一个完整的 YMatrix 生产集群包括:
- 主节点 x 1
- 备用主节点 x 1
- 数据节点 x N (每个数据节点上运行多个主实例和镜像实例)

主节点
- 建立与管理客户端会话连接 :作为应用访问数据库的入口,负责接收并管理客户端的连接请求
- 解析 SQL 语句并生成查询计划 :对客户端提交的 SQL 语句进行解析,生成分布式执行计划(Query Plan)
- 分发查询计划并监控执行 :将生成的查询计划分发给所有数据节点(Segment)执行,同时监控查询的执行过程
- 收集结果并返回客户端 :汇总各数据节点执行后的结果,最终返回给客户端
- 存储数据字典 :不存储业务数据,仅存储系统元数据(数据字典),包括所有数据元素的定义及属性集合
备用主节点
- 数据备份与一致性保障 :备用主节点与主节点保持完全一致的数据和功能
- 故障自动切换 :当主节点发生故障时,备用主节点会被自动提升为新的主节点以保障集群服务连续性
- 分布隔离部署 :备用主节点与主节点必须部署在不同物理主机上
数据节点
数据节点是 YMatrix 进行数据存储、计算的核心单元。数据表的数据会根据配置打散分布至各个主实例(Primary)中,每个主实例独立持有与其他主实例完全不重合的数据分片。当执行查询时,主节点(Master)生成查询计划后分发至所有主实例并行执行,通过并行计算提升查询响应速度
主实例(Primary)
一个节点上可以有多个独立的主实例
- 数据存储 :数据表的数据会根据配置打散分布至各个主实例中,每个主实例独立持有与其他主实例完全不重合的数据分片
- 分布式执行查询 :负责执行主节点下发的查询计划,通过并行计算提升查询响应速度
- 数据处理核心 :是数据节点实现高性能的关键,大量能力相同的主实例间平均分布数据和工作负载,使所有主实例能同时为一个任务工作并同步完成
镜像实例 (Mirror)
一个节点上可以有多个独立的镜像实例
- 保持与主实例(Primary)数据一致:镜像实例与主实例保持完全一致的数据和功能。
- 故障时接替主实例提供服务:当主实例发生故障(如所在机器掉电、实例故障等)时,镜像实例会被自动提升为主实例,接替其提供数据存储和计算服务,保障集群服务不中断。生产环境中,主实例与镜像实例通常分布在不同主机上,以避免单节点故障影响
查询执行
查询经过优化器生成执行计划,然后通过计算引擎、存储引擎读取相应数据,并进行计算,最终得到查询结果。
优化器
YMatrix 提供 2 种优化器:
- PQO(Postgres Query Optimizer): 以 PostgreSQL 原生优化器为基础的优化器,适用与事务(TP )场景以及绝大多数分析(AP)型场景。
- ORCA:是基于 Cascades 框架的优化器,能够在处理大型复杂查询时生成更合理的计划,降低系统资源占用,提升查询表现。
存储引擎
YMatrix 提供 2 种存储引擎:
- HEAP: 继承自 PostgreSQL 的经典行存引擎,适合事务(TP)型场景,具有较好的写入、更新、删除的性能表现。
- MARS3: YMatrix 自研的高性能行列混合存储引擎,在分析(AP)、时序场景中有着出色的性能表现,并能提高较好的压缩比。
计算引擎
YMatrix 提供了经过经过全面向量化改造的向量化执行引擎。在大数据量场景下,能够大幅提升查询速度。
高可用性
YMatrix 通过镜像机制保障集群的高可用性,同时还提供了异地灾备功能,保障极端条件下能够通过备用集群提供服务。
镜像机制
启用镜像功能后,每个主实例都会对应一个镜像实例,镜像实例与主实例会保持完全一致的数据和功能。在生产环境中,我们会保持主实例与对应的镜像主实例分布在不同的主机上。
- 当集群正常工作时,镜像实例不参与计算,仅保持与主实例数据完全一致。
- 当主实例故障,或主实例所在的机器发生掉电等意外情况时,对应的镜像实例就会接替发生故障的主实例提供服务,从而保障数据服务不中断。

状态管理
ALOHA(Advanced Least Operation High Availability) 是全新设计的集群状态管理服务。
YMatrix 集群中,会随机选取奇数个节点构建分布式 ETCD 集群 ,用以保存节点、实例状态;当故障(节点宕机/实例故障等)发生时,系统可根据集群状态进行调度,实现主备自动切换、故障自动转移等功能,保障集群的高可用性。

异地灾备
YMatrix 提供异地灾备集群部署方案。一旦主集群侧发生故障,可切换至备份集群,由备份集群提供正常服务,此时该集群的使用方式与正常 YMatrix 数据库集群使用方式保持一致。
