国产老兵“虚谷数据库”初探

2024年 3月 8日 229.0k 0

虚谷数据库,是国内一款完全本土化、自研的数据库产品。其背后的厂商-虚谷伟业,作为一家老牌数据库厂商,非常低调,之前对其产品了解不多。近期通过中国信息安全评测中心发布的《安全可靠测评结果》名录中关注到这一产品,并做了一些调研。本文是通过多方材料收集整理而得,并得到了虚谷伟业朋友的大力支持,这里表示感谢。

1. 公司及产品简介

(1)公司说明

虚谷伟业从官方信息显示,组建于2018年。其前身是成都欧冠公司,团队组建于 2002 年,是国内比较早做数据库的公司之一。公司整体比较低调,总部位于成都,在全国六个大区目前设置了多个分子公司办事处。据虚谷的同学分享,2022年之前公司整体都是处于研发驱动的方式,在2022年开始进入市场化运作。虚谷的产品从 V1.0 一直到 V12.0,具有多个正式商用版本,同时也可以在网上查到,虚谷从v8.0开始就是分布式架构了。目前虚谷数据库的应用领域主要是在党政军及一些关基行业,例如民航、公安、数据中心等。从上述材料中可以看出来,虚谷是从传统党政行业部委出发,然后转型到分布式领域,现在在涉足一些关基生产业务系统和数据中心业务。

(2)产品介绍

从产品家族来看(如下图),虚谷产品设计的逻辑是“一核多态全场景”的方式。从他们的产品宣传材料中得知,他们产品的定位是“数据全生命周期提供商”,即以原创统一的高性能内核为基础,通过产品的扩展性让数据规模“从小到大”的客户都能使用、通过产品的生态工具链和兼容性让用户“从国外到国内”能做平滑移植、通过分布式的高性能和多实力管理能力让客户“从简单到复杂”的应用都能使用。从图中也可以看到他们配套提供了统一的管控和标准的交互方式。

(3)原创优势

虚谷产品有一个显著优势,是在于其原创性,其内核采用的是C语言编码的,据虚谷同事透露,他们的1.0版本只有不到10万行代码,是从0行代码开始编写的。原创给虚谷带来了比较突出的优势,就是在现在业务系统变化较快的情况下,可以从架构核心到外围功能都能快速迭代,顺应国内的需求快速变化,不受控于其他主路线。但是同样的,原创性也是双刃剑,他们的生态和兼容性上构建肯定是相较直接沿用开源路线的产品来说更困难的。较早前,虚谷已获得中国信息安全评测中心发布第一批安全可靠性评测结果名录(位列十一家厂商之一)。同时,虚谷也获得了包括国测中心的“原创性证书”以及国保测的“安全数据库证书”在内的一些安全性背书。

2. 数据库产品架构

虚谷数据库采用的是原生分布式架构,即是一个和业务逻辑解耦的存储引擎层以及一个无状态的SQL计算引擎层组合的。在实现传统关系型数据库功能与对象管理同时,提供完整的事务 ACID 特性能力。

(1)技术架构

从虚谷产品的技术架构来看,是采用 ShareNothing(完全无共享)架构进行集群设计,物理资源无共享,数据切片存储。核心角色包括主控角色、存储角色、工作角色和变更收集角色,分别承担集群的管理、存储、计算与变更捕捉的职能。一台物理服务器(虚拟机)可部署一个或多个数据库角色。比较有特色的一点是,虚谷采用线程模型,从操作系统上来看,每个服务器上看到的都只有一个进程,上面说的主控、存储、工作等角色是在该进程内部进行管理的。依托于这个体系,虚谷可以做到两种部署形态,“存算分离”和“存算融合”。

  • 主控节点(管理)用于集群管理、心跳检测、全局锁仲裁(检测死锁并解锁)等,不参与用户请求响应。
  • 存储节点(存储)用于存储数据库数据,一般采用1主2备的副本策略,将数据均匀分布,利用多台服务器的IO能力,加速数据处理。
  • 工作节点(计算)用于接收响应用户请求,是SQL处理核心模块,将SQL请求解析成数据库内部任务并通知到各个节点。同时工作角色也承担计算任务。

(2)核心模块

从模块上看,虚谷数据库的不同角色包含下列模块:

  • 数据库管理工具集合集合包含数据库管理工具,可用于用户可视化对象管理和可视化数据操作;控制台工具,方便 DBA 简洁高效地操作数据库;数据库迁移工具,用于快速各种数据源中的数据库对象和数据迁移到虚谷数据库;数据库集群监控软件,用于监控数据库服务端硬件资源使用情况及数据库集群状态。
  • 内存管理模块对于数据库来说,内存管理是核心模块,分为全局内存区、动态内存区、数据缓冲区、全局排序区、日志缓冲区 5 个子模块;分别对应了字典缓冲内存、线程运行内存、数据文件内存、查询排序内存和日志缓冲内存。
  • 文件管理模块管理数据运行过程中涉及的各类文件,有数据文件、控制文件和日志文件等。
  • 线程管理模块虚谷数据库采用线程模型,对各类服务线程管理是核心模块之一。
  • 内网络通信管理模块管理集群节点间通信,实现节点间数据传输和远程调用。
  • 数据库逻辑对象管理模块对数据库对象创建、修改、使用、消亡全生命周期的管理。
  • 开发接口提供多种数据库访问接口,如:JDBC、ODBC、C-API、Python、GO 等。

3. 核心技术能力

(1)全局强一致

虚谷数据库,通过事务一致性和数据一致性来保障整个数据库强一致。一方面在事务层,其采用优化的二阶段提交协议来实现分布式事务,即在节点间的事务能根据数据分布方式自动进行事务切分,同时设置节点宕机超时时间,不会让整个集群无限阻塞等待;另一方面在数据层,则采用数据流同步复制方式结合“可靠 UDP”技术,保证数据副本之间的强一致性。和虚谷的同事沟通了解,这个“可靠UDP”是他们针对分布式数据库的网络层做的优化,本质是对UDP协议的封装,加入了如检验、重发等内容,以追求在高频的数据交换过程中降低TCP协议握手带来的时延开销。

(2)多重高可用

在可用性层面,虚谷数据库拥有存储、计算、管理和网络等多层面多领域的高可用能力,进而保证整个数据库集群的高可用。

  • 存储:数据多副本

虚谷数据库,采用数据切片实现分布式数据存储。在多版本方面,可根据需要进行数据存储版本数配置,最多支持 3 个数据存储版本,默认是有 1 个主数据版本,2 个备数据版本。在真实存储中,主版本轮转分布,副本随机分布,数据均匀分布到整个数据库集群节点中,保证存储的高可用。在数据拆分粒度上,虚谷数据库不以逻辑表和业务维度进行数据切割,是以切分物理 CHUNK 的方式进行数据存储,通过内部算法进行分片处理并存储到各个存储节点。数据存储以 8M 进行自动切片,主版本轮转分配在各节点,其对应的副本随机存储在其他存储节点,将所有数据都均衡分布到每一个存储节点中。当某一存储节点宕机时,会立即通知管理节点;或者会选择宕机节点上存储的主版本数据对应的有效数据副本,将其切换为主版本;然后通知主版本向其余未宕机的存储节点复制还原丢失的数据版本,提供数据访问服务,避免单点故障导致数据库业务中断。

  • 计算:对等无状态

虚谷数据库是典型的存算分离架构,其上层的计算节点是无状态的,没有持久化数据。其对外服务是完全对等同构的,这意味着用户连接到任意一个工作节点都可以连接到整个数据库集群。当工作节点负载过高时,可通过增加工作节点分担负载压力,提高并发用户数。无状态的所带来的好处是,当用户连接数据库时,如果节点异常也不用担心,可随时切换到其他节点,即使所有工作节点都死亡,也不对数据存储造成影响,后续可再次接入新工作节点即可恢复访问,可实现自动故障探测和容灾处理。

  • 管理:组件高可用

虚谷数据库的管理是中心化的,管理节点上虽然没有业务数据,但是也保存了如存储映射等重要信息。为提升管理节点的可用性,架构上采用了主备冗余设计。当一个管理节点异常时,另一个管理节点会自动接管。此外,用于收集集群数据变更信息的收集节点,也是采用主备双机方案,在保证事务粒度的情况下也能保证其可靠性。

  • 网络:多网络并行

分布式数据库,存在多角色、多节点,对底层网络要求很高。虚谷数据库,提供多网络并行功能,即在同一集群内部可配置多路网络进行通信,该功能不依赖操作系统或交换机功能。这种方式不仅能够提供更大的带宽,还为可能发生的单网络故障提供容错。

(3)高性能内核

虚谷数据库,还通过一系列底层技术的优化,来提升事务及查询分析能力。基于虚谷的技术文档来看,这其中包括但不限于下面这些:

  • 无限制的行级锁。虚谷数据库的数据存储最小粒度为行,其管理锁的粒度可以从对象级到行级,行级锁的实现意味可提供极高的并发响应能力。任何情况下不允许锁升级,大幅降低死锁的可能性。
  • 基于成本的优化器。虚谷数据库采用基于代价的路径优化模型,可让 SQL 语句根据具体的数据分布情况、索引使用情况、分区情况、联合查询情况来做最优的路径选取调整,从而使 SQL 执行时间最短。
  • 多版本并发控制技术。虚谷数据库完整实现 MVCC多版本并发控制,维持一个数据的多个版本,使的读写操作没有冲突,避免复杂事务环境中的读写操作冲突,提供更好的数据库响应性能。基于 MVCC 技术,虚谷数据库实现读已提交(Read Committed)隔离级别,支持高并发场景下的事务处理。
  • 特有的可靠 UDP 技术。通常采用的 TCP 协议性能损耗大,类似于谷歌的 QUIC ,虚谷数据库不仅采用 UDP 封包格式通用接口,且在底层包装改造了一套可靠的 UDP 协议,大量减少性能损耗。
  • RDMA 协议支持。虚谷数据库 RDMA 功能可直接进行内存访问,降低网络时延和 CPU 占用率,数据从一个系统快速移动到远程系统存储器中,达到高带宽、低时延和低资源占用。虚谷数据库支持 Infiniband 的 RDMA 协议支持,并非使用万兆接口简单调用。
  • 多核 NUMA 优化。虚谷数据库基于多核架构进行了深度优化,对关键数据结构分区,降低数据访问频次。利用 NUMA 优化降低底层数据流转冲突,关键业务线程绑核,避免核间线程漂移。
  • 元数据分布式管理。虚谷数据库在管理系统元数据信息时,是将元数据表当做堆表进行管理,具有将元数据表分散到各个节点中管理的能力,避免由于表过多导致访问元数据表成为性能瓶颈。
  • 并行扫描技术。虚谷数据库能完全调度整个集群节点的计算和 IO 能力来对用户发起的 SQL 请求进行处理,并行处理过程自动完成,以整个集群算力为用户提供高效的大数据查询分析能力。
  • 智能单元扫描技术。虚谷数据库基于计算向存储靠拢的设计理念,开发了独特的智能单元扫描技术(算子下推),让数据在存储节点进行裁剪计算后再汇聚,从而减少了网络开销,降低了计算资源消耗,以提升数据库对 SQL 的响应速度和吞吐量。

(4)多重高安全

虚谷数据库的安全是采用GM/T 0028体系构建的,设计了一些高安全的数据防控策略,包括访问控制、身份认证、存储加密等等。

  • 身份验证。通过身份验证,虚谷数据库可确定该用户是否具有登录的权限及其在系统中的系统级角色,以此决定该用户能够做什么和不能够做什么。其密码强度可进行配置,防止被暴力破解。
  • 自主访问控制。根据用户的权限执行自主访问控制,对用户操作、访问的权限管理粒度支持库、视图、表、角色及用户操作等。
  • 基于标记的强制访问控制。强制访问控制主要是针对用户和元组。用户操作元组时,不仅要满足自主访问控制的权限要求,还要满足用户和元组之间标记的相容性。这种可精确到行列级的控制能力,增强系统安全性。
  • 存储加密。虚谷数据库实现存储加密,且启用后对系统影响很小。
  • 网络访问控制。虚谷数据库通过黑白名单等方式,实现对访问用户网络的安全管理,保证了数据库在复杂网络环境的数据和行为安全。

(5)高可扩展性

虚谷数据库基于其优异的分布式架构特点,拥有动态增加节点的能力,可以在集群能力遇到瓶颈的时候进行扩展。如果计算能力不足可以扩展工作节点,存储能力不足则扩展存储节点,或存储计算同时扩展。计算节点由于本身不存储数据,所以扩展后即可参与计算任务从而增加整个数据库并发能力和计算能力。存储节点由于数据存储与逻辑表无关,是按物理 CHUNK 进行存储的,所以在扩展存储节点后,原集群存储可以按 CHUNK 流转至新的存储节点完成节点扩展,扩展后可有效缓解应用瓶颈,增加集群的容量和性能。虚谷数据库拥有在线动态扩展能力,数据的转移(复制)不需要人工干预,工作负载在存储节点之间动态分发,无需停机,实现系统的透明扩展。

(6)生态易用性

虚谷数据库提供了一系列基于 JAVA 技术的图形化客户端工具,用户可通过不同工具与数据库服务端进行交互,包括:虚谷数据库管理工具 XuguManager、虚谷数据库迁移工具 XuguMigrator、虚谷数据库集群监控软件 XuguCM 等。比较有意思的是,虚谷和大多传统数据库厂商一样,采用自研工具的路子,他们自己提供的XuguManager颇有Oracle-SQL Developer的风格,应该也是和他们宣传的Oracle兼容性配套的吧。另外他们也提供了一个DBever的管理器插件,可以通过DBever直连虚谷数据库,这应该是为了兼容MySQL生态考虑的。

另外,虚谷花了大量的时间做开发框架的支持,比如主流的MyBatis、Hibernate等。相应的DEMO可以在他们的GITEE主页查得到:https://gitee.com/XuguDB

4. 产品亮点与展望

通过对虚谷数据库的学习及简单的评测,对这一国产数据库有了粗浅的了解。在学习过程中,有几个亮点给我非常深的印象。

(1)形似神也似的“兼容性”

一款新产品亦或是相对小众产品,如何能快速收获用户,其兼容能力尤为重要。良好的兼容能力,可以方便用户快速上手体验、移植迁移、管理维护等。虚谷数据库在这方面做了大量的工作,针对业内较为流行的数据库产品(如Oracle、MySQL),可做到高达90%以上的兼容。这对于在国产化替代中,从功能性能、迁移成本、迁移周期、管理维护等方面具有非常大的优势。通过对产品的了解,简单整理个兼容表:

除了上述对其他数据库产品的兼容外,个人认为更重要的对上下游生态的兼容。数据库不是孤立产品,其需要依托于底层软硬件环境及上层应用开发,进而才能发挥其最大作用。虚谷数据库兼容适配了大量硬件、软件、应用、工具等,通过提供标准接口方式,方便用户快速使用。

经过多年合作共建,虚谷数据库已完成从芯片、硬件、操作系统、云平台、中间件、驱动与工具及应用软件的全生态体系构建,打消用户在选择使用上的诸多疑虑。

(2)单机分布式的“一体化”

分布式数据库经常令人诟病的一点就是架构复杂,前期投入资源较多,这也成为很多用户不选择分布式的原因。因此如何实现分布式轻量化或让分布式可逐步扩展成为很多厂商追求的。单机分布式一体化架构,在不同架构间使用统一架构,简化管理与升级;同时通过提供一种从单机平滑升级到分布式的手段,方便用户可随时扩展。虚谷数据库也提供了这种一体化能力,来满足用户多形态需求,即前期可使用单机或小规模分布式,随着业务的发展可随时进行弹性扩容,在扩容过程中业务做到“无感”。针对计算层的扩展,虚谷数据库可实现灵活的计算节点扩展,通过前端的负载均衡,可使应用端无感使用。针对存储层的扩展,虚谷数据库可实现存储节点的动态扩展,并支持数据自动均衡能力,还可根据负载情况在保证QoS的前提下完成数据平衡过程。

这其中的难点是在于存储节点的扩容。新存储节点接入集群后,可立即提供存储服务(新存储创建、数据读写、数据写入),同时管理节点进行存储均衡操作,使存储节点在一定时间内达到均衡。在数据均衡的过程中,首先会去计算均衡的存储节点迁出和迁入的存储个数;然后针对每个 CHUNK 尝试从迁出节点向迁入节点移动存储,如果该存储用户正在使用则跳过,避免对用户业务产生影响。重复上面的步骤,直到存储达到平衡。

(3)极致可扩展的“高性能”

分布式数据库的一大用途,就是满足业务高并发、高性能的场景需求。以标准的 TPC-C 模型为参照,厂商提供了如下评测结果。虚谷数据库在三节点(计算、存储角色混合)、1000 仓,不做任何优化下测试达到 36 万的tpmC成绩。相较于其他分布式数据库产品,其性能指标领先。且上述成绩通过优化可大幅提升,通过对数据分布的调整降低分布式事务比重或采用库内计算方式减低网络时延等手段,相信可以取得更优的效果。同时在分布式架构下可根据随着资源的扩容,进一步提升来满足用户的极限场景需求。下图是与某国内产品在同等资源条件下的测试对比图。

虚谷数据库发展展望:

作为深耕国产数据库二十多年的的“老兵”,虚谷数据库经过多年低调发展,其产品已逐步发展成熟,在多领域已经取得了长足的发展。可见未来,像虚谷数据库这样单机分布式一体化的原生分布式数据库产品是比较适合于传统关基领域的国央企和主管单位数字化转型的,能较大限度地减少业务升级的改造成本和运维难度。随着近年数据库国产化浪潮大潮将至,相信未来这一优秀的国产数据库产品必将破茧而出,取得更大的成绩。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论