如果你对该问题感兴趣的话,推荐你看看《云原生数据库白皮书》这篇报告,下面是部分摘录的内容,具体请以原报告为准。
以华为云 GaussDB(for MySQL)云原生数据库为例,它的架构构建在多租户共享的分布式 存储系统之上。它的 SQL 引擎是一个经过深度修改的 MySQL 8.0 版本,因此在语法和语义方面 与 MySQL 100% 兼容,计算节点和存储之间使用 RDMA 网络。
GaussDB(for MySQL)使用的存储系统是一种高可靠的跨可用区云存储。在公有云上,存 储系统可以是一个有几十或数百个节点的大型集群,横向扩展能力比单租户线下方案高很多倍。 SQL 节点将 REDO 日志写到存储层,页面在存储层物化,此设计显著减少了更新密集型工作负 载的网络通信。属于单个数据库的页面以 Slice 形式组织,Slices 分布在多个存储节点上,这个 数据分布就是分布式查询的基础。
GaussDB(for MySQL)自上向下分为 3 大部分:SQL 节点、存储抽象层 SAL(Storage Abstract Layer) 以及存储层 (Storage Nodes)。

首先,SQL 节点形成一个集群,可以是一个主节点和多个只读副本。每个集群属于一个云租户, 一个租户可以具有多个集群。SQL 节点能够管理客户端连接、解析 SQL 请求、生成查询执行计划、 执行查询以及管理事务隔离。
其次是 SAL(存储抽象层),它是 SQL 节点和存储层之间的桥接器。SAL 包括两个主要组 件,SAL SQL 模块和 DFV(Data Function Virtualization,是一款与数据库垂直整合的高性能、 高可靠的分布式存储系统)存储节点内部的 Slice 存储。SAL SQL 模块为 SQL 节点提供了 SAL API,用以与底层存储系统进行交互。 Slice Store 是在 DFV 存储节点内部运行的插件模块,它 需要与 DFV 存储框架一起使用,用以在相同 DFV 节点上管理多个数据库分片,支持多租户资源 共享,并将页面的多个版本提供给 SQL 节点。对于每个分片,Slice Store 使用日志目录作为中 心组件来管理 REDO 日志和页面数据。Slice Store 的主要职责是接收分片 REDO 日志,将其持 久化并注册到日志目录中;接收页面阅读请求并构建特定版本的页面以及垃圾回收和合并日志。
最后,GaussDB(for MySQL)存储层建立在 DFV 持久层之上,DFV 持久层为上层 SQL 节 点存储提供读写接口,提供跨 3 个可用区之间的数据强一致性和可靠性保证。存储层里包含日志 存储节点 Log Store 和页面存储节点 Page Store,日志存储主要是持久化由 SQL 节点生成的日 志记录,日志存储的底层存储对象称为 PLog,PLog 是一种大小有限的、追加型的存储对象,可 以在多个日志存储节点之间同步复制。页面存储节点的主要功能是处理来自数据库主节点和只读 节点的页面读取请求。页面存储必须能够提供数据库前端请求页面的任何版本,因此页面存储必 须能够访问其负责的页面的所有日志记录。
在这种体系架构下,整个数据库集群只需一份足够可靠的数据库副本集,极大节约成本。同时, 所有只读副本共享云存储中的数据,去除数据库层的复制逻辑。没有独立的备用实例,当主节点 发生故障,集群进行切换操作时,只读副本可以切换为主节点,接管集群服务。而且由于只有数 据库日志通过网络从数据库计算节点写入 DFV 存储层,没有脏页、逻辑日志和双写的流量,极大 节省了网络资源。