1.2.3 SequoiaDB的整体架构
SequoiaDB分布式数据库由数据库存储引擎与数据库实例两大模块构成,如图1-5所示。其中,数据库存储引擎模块是数据存储的核心,负责提供整个数据库的读/写服务、数据的高可用性与容灾机制、ACID与分布式事务等全部核心数据服务能力;数据库实例模块作为协议与语法的适配层,可供用户根据需要创建MySQL、MariaDB、PostgreSQL和SparkSQL的结构化数据实例,并且完全兼容S3对象存储实例。
图1-5 SequoiaDB架构图
用户可以通过创建不同类型的数据库实例,从传统数据库几乎无缝地迁移到SequoiaDB,这样可大幅度降低应用程序开发者的学习成本。
1.数据库实例
SequoiaDB同时支持结构化和非结构化的数据库实例。截至本书出版之际,SequoiaDB共支持6种不同的实例类型,如表1-1所示。
表1-1 SequoiaDB支持的实例类型
(续表)
2.数据库存储引擎
SequoiaDB存储引擎采用分布式架构。集群中的每个节点为一个独立进程,节点之间采用TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)进行通信。在同一个操作系统上可以部署多个节点,节点之间采用不同的端口号进行区分。
SequoiaDB的节点分为3种不同的角色,分别是协调节点、编目节点和数据节点,如图1-6所示。
图1-6 SequoiaDB节点架构图
● 协调节点:协调节点不存储任何用户数据。作为外部访问的接入与请求分发节点,协调节点将用户请求分发至相应的数据节点,最终汇总数据节点的应答结果,以对外做出响应。
● 数据节点:数据节点为用户数据的物理存储节点。海量数据通过分片切分的方式被分散至不同的数据节点。在关系型数据库实例与JSON数据库实例中,每一条记录会被完整地存放在其中一个或多个数据节点中;而在对象存储实例中,每一个文件将会依据数据页大小被拆分成多个数据块,并被分散至不同的数据节点进行存放。
● 编目节点:编目节点主要存储系统的节点信息、用户信息、分区信息及对象定义等元数据。在特定操作下,协调节点与数据节点均会向编目节点请求元数据信息,以感知数据的分布规律和校验请求的正确性。
3.核心概念
在SequoiaDB中,数据节点归属于数据复制组(又称分区组)。数据复制组支持1~7个节点,具备高可靠和高可用的能力,该组内的节点互为副本,采用一主多从的形式。通过增删复制组内的节点,可以实现数据的垂直扩容、减容。复制组内的节点之间采用最终一致性来同步数据,不同的复制组保存的数据无重复。SequoiaDB就是通过以下三大核心的技术设计来确保整体数据不会损坏或丢失的。
● 复制组:由于采用PC服务器内置物理盘,在硬件设备发生故障时,当前大部分分布式数据库无法保证单一设备中数据的可靠性与持久性;因此,SequoiaDB采用数据多副本存放的机制,以节点为单位,对编目节点与数据节点所存放的数据进行复制。多个拥有相同数据副本的节点构成一个复制组。一般来说,复制组、数据分片和数据分区均代表同样的含义。
● 副本:复制组内的节点被称为数据副本。在SequoiaDB中复制组最多支持7个数据副本。复制组内的逻辑节点互为备份,即配置了多个数据副本,因此SequoiaDB原生提供高可用性与容灾机制。用户可以通过添加复制组(分区)来实现整个存储引擎集群的水平弹性扩展,也可以通过增加复制组内的副本数量来实现更高的安全性,以及提升读/写分离的并发性能。
● 一致性:复制组内部的多个数据副本之间,可以同时使用强一致和最终一致的数据同步方式,用户可以基于节点或表(集合)级别进行相应的配置。整个集群内部数据的ACID与分布式事务,完全由数据库存储引擎支持。