随着云时代的到来,各种应用纷纷上云,数据库也开始步入云数据库时代, 业界比较知名的云原生数据库有Snowflake(OLAP 类)和 Amazon Aurora(OLTP 类),国内也有几家公司正在开发云原生数据库。
云原生数据库的重点在存储计算分离,众所周知数据库上云的痛点在于数据如何存储,如果数据存储在宿主机本地磁盘,则不能灵活地转移故障,所以需要把数据存储到分布式共享存储上。如果把分布式共享存储挂载为本地磁盘或目录,虽然技术上可行,但是会带来两个问题:第一,数据冗余过多,分布式共享存储本身 1 ︰ n 副本,数据库为了高可用也是 1 ︰ n 备份,那么总体就会导致太多冗余;第二,读写性能损失,同样数据,读写分布式共享存储性能略低于读写本地磁盘。所以需要针对分布式共享存储对数据库架构做相应的改造,如图 7-17 所示是存储计算分离的数据库架构,称为 Shared-Storage/Shared-Everything。
主节点(读写节点)和从节点(只读节点)共享一份存储数据和 WAL 数据, 那么主节点刷脏不能再用传统的刷脏方式,从节点的 WAL 回放也不能用传统回放方式。存储计算分离带来以下几点优势:
● 容量交给分布式共享存储管理,可以做到在线扩缩容,且容量无上限。
● 主从共享一份存储和WAL,可以做到主从数据毫秒级延迟。
● 经过刷脏优化、回放优化以及基于提交时间戳的MVCC机制优化,性能比单机数据库提升几倍。
从图 7-17 可以看出存储计算分离数据库的缺点也很明显:其计算能力、写入能力依然存在单机上的上限(一主多从)。
AntDB 目前的架构是典型的 Sharded-Nothing 架构,使得包括计算、写入、读取、存储等在内的所有资源都具备了可水平扩展的能力,因此不会存在单机的瓶颈上限。但是,Shared-Nothing 架构在单纯的数据容量的弹性上,是不如Shared-Storage 架构的。
两种架构及其优缺点比较如图 7-18 所示。
那么,有没有可能将 Shared-Nothing 的优势与 Shared-Storage/Shared- Everything 的优势结合呢?答案是肯定的。Shared-Nothing 和 Shared-Storage 结合后的架构,如图 7-19 所示。
就是把 AntDB 的 DN 节点换成 Shared-Storage 架构的数据库,这样带来两个方面的好处:
● 当计算能力不足时,可以单独扩展计算集群。
● 当存储容量不足时,可以单独扩展存储集群。
这套同时具备 Shared-Nothing 和 Shared-Storage 优势的架构为分布式存储计算分离架构。AntDB 计划要把 DN 节点改造成 Shared-Storage 架构,数据存放在 Ceph、Gluster、MinIO 等开源的分布式共享存储上。
插件化
如果将以上所有优化和功能做到一个数据库里,会让数据库变得异常庞大, 对一些功能比较单一的业务系统来说大而全的数据库对学习和维护都会造成负担,所以接下来要做的是插件化,即把以上的优化和功能做成扩展插件,根据业务需求启用插件,确保数据库体态轻盈功能强大。下面按照优先级排列各个功能插件化的先后顺序:
● 分布式事务插件化。
● 分布式执行器插件化。
● sharding/metadata管理插件化。
● Paxos/Raft共识协议流复制插件化。
● 列式存储插件化。
● 全文检索、时序数据处理、流式计算引擎、图形处理、地理信息处理、机器学习库、向量索引插件化。
● 区块链存储和拜占庭容错共识复制插件化。
● 存储计算分离功能插件化。