- SequoiaDB分布式数据库权威指南
- 许建辉 (加)陈元熹
- 2892字
- 2022-05-06 18:40:01
1.2.2 SequoiaDB的核心特性
SequoiaDB作为一款分布式数据库,可以为用户带来诸多价值。其具有以下核心特性:
● 高性能与无限弹性水平扩展能力。
● 金融级安全特性:多数据中心间的容灾指标RPO(复原点目标,Recovery Point Objective)为0。
● 分布式事务与ACID(Atomicity,Consistency,Isolation,Durability)能力。
● 完全兼容传统关系型数据库,数据分片对应用程序完全透明,同时支持结构化、半结构化与非结构化数据。
● 支持联机交易和分析混合负载,可互不干扰地同时运行联机交易与批处理任务。
● 多租户能力:云环境下支持多种级别的物理与逻辑隔离。
1.弹性水平扩展
作为一款分布式数据库,支持无限弹性水平扩展是SequoiaDB的基本特性,其底层的分布式存储引擎与上层的数据库实例均支持这一特性。
SequoiaDB的数据库实例均无状态并使用TCP/IP对外提供服务。为了提升整体处理能力,用户可以通过增加服务器数量或创建额外的数据库实例来实现对应用的弹性水平扩展。
分布式存储引擎内部包含3种类型的节点:协调节点、编目节点和数据节点。
其中,协调节点主要作为数据请求的路由进程,对来自上层数据库实例的请求进行分发,并对数据节点返回的结果进行汇总。每个协调节点均无状态,可以通过增加协调节点的数量提升数据路由层的处理能力。
编目节点默认使用三副本机制,由于只有当协调节点第一次访问某个表或集合时才需要读取编目节点,只有当建表或更改集群拓扑结构时才需要写入编目节点,因此在正常生产环境中编目节点的访问量极低,基本不可能成为瓶颈。
数据节点则采用水平分片的方式对数据进行横向切分,用户可以通过增加分区组或数据分片的方式,对数据引擎层的存储进行弹性水平扩展。
2.高可用性与容灾
由于PC服务器内置的物理磁盘不同于传统小型机加存储设备的架构,在PC服务器出现物理故障时无法保障存储在本地磁盘的数据不丢、不坏,因此所有基于PC服务器内置磁盘架构的数据库必须采用多副本机制,以保障数据库的高可用性与容灾机制。SequoiaDB通过下述5项技术实现高可用性与容灾机制。
● 数据库实例:由于数据库实例进程均为无状态节点,因此同样配置的数据库实例进程可以互为高可用冗余。不论创建的是MySQL、PostgreSQL还是S3实例,每个实例对外均可暴露一个或多个接入地址(IP地址+端口号)。应用程序连接到任意一个接入地址时均可向数据库实例进行数据读/写操作,且能保证多个接入地址之间的数据一致性。用户只要为每个实例的多个接入地址前置一个类似Nginx或F5的高可用负载均衡设备,即可轻易实现多个接入地址的高可用冗余。
● 协调节点:作为数据库存储引擎的路由节点,由于协调节点自身无状态,因此所有协调节点均可以完全对等配置,对上层应用程序或计算引擎做到高可用。应用程序既可以通过上层数据库实例访问数据,也可直接对数据库存储引擎进行API访问。当应用程序直接连接到协调节点进行API操作时,应用可以通过SequoiaDB客户端连接池配置多个IP地址与端口号,实现高可用配置。如果应用通过上层数据库实例进行访问,则所有数据库实例均支持多个接入地址的高可用的配置方式。
● 编目节点:编目节点作为数据字典,维护着SequoiaDB存储引擎的拓扑结构、安全策略、表与集合定义及分片规则等一系列信息。在SequoiaDB的集群配置中,编目节点以一个独立复制组的方式存在,默认使用三副本强一致同步策略。在任何一个节点发生故障时,均可将服务实时漂移到其他的对等节点中。
● 数据节点:SequoiaDB中保存的用户数据由数据节点进行存放与读取。在集群部署环境中,每个数据复制组均会默认使用三副本机制进行数据存放。在数据复制组中,如果任何一个数据节点进程发生故障,则该复制组内的其他节点将会实时接管其服务。具体来说,如果发生故障的节点为该复制组内的主节点,则其余从节点将会在检测到节点间的心跳中断后发起投票请求,并使用Raft协议选举出新的主节点;而如果发生故障的是从节点,则协调节点检测到节点间的心跳中断后,会将该数据节点存在的会话转移至其余数据节点,以尽可能对应用程序保持透明。
● 异地容灾:在传统多节点投票选举机制中,为了确保复制组内的节点不会发生“脑裂”问题,集群必须在确保超半数节点存活且达成投票共识后,才能让其中一个数据节点或编目节点当选为主节点,以提供读/写服务。但是在同城双中心或类似的环境下,用户很难保证在任何一个中心整体发生故障时,整个集群的所有复制组中依然会有超过半数的节点存活。因此,SequoiaDB通过集群分裂与归并功能,在同城双中心的环境中进行秒级集群分裂,将原本处于两个数据中心的单集群分裂为两个独立部署的集群,以保证存活数据中心内的数据服务能够以秒级启动,并在提供完整数据库读/写服务的同时确保交易数据的稳定可靠,从而实现秒级RTO(复原时间目标,Recovery Time Objective)与RPO为0。
3.分布式事务
SequoiaDB支持强一致分布式事务功能。利用二段提交机制,SequoiaDB在分布式存储引擎上实现了对结构化与半结构化数据的强一致分布式事务功能,不论用户创建哪种数据库实例,其底层均可提供完整的分布式事务及锁能力。SequoiaDB完整支持4种隔离级别,同时支持读/写锁等待及读已提交版本机制。
4.多模式接口
SequoiaDB通过数据库实例的形式提供多种关系型及非关系型数据库兼容引擎,支持结构化、半结构化及非结构化数据。SequoiaDB在当前版本中支持MySQL、MariaDB、PostgreSQL及SparkSQL这4种关系型数据库引擎,同时支持MongoDB的JSON操作,以及S3非结构化数据引擎。
使用多模式接口机制,用户可以让SequoiaDB服务于任何类型的应用程序,真正做到分布式数据库的平台化服务。
5.联机交易和分析混合负载
一般来说,联机交易和分析混合负载意味着数据库既可以运行OLTP(在线事务处理,Online Transactional Processing)来实现联机交易,也可以运行OLAP(在线分析处理,Online Analytical Processing)来统计分析业务。但是,当用户想要在同一个数据库中针对相同数据在同一时刻运行两种不同类型的业务时,往往会形成较多数据库服务器中CPU、内存、I/O和网络等硬件资源的争用,导致对外的联机交易服务的性能与稳定性受到影响。
在SequoiaDB中,用户可以针对复制组的多副本,在节点和会话等多个级别上指定读/写分离策略,同时可以通过创建数据共享但类型不同的数据库实例(比如MySQL实例与SparkSQL实例),使其分别服务于联机交易业务与统计分析业务,以实现针对相同数据的联机交易与统计分析业务同时运行,且互不干扰。
6.多租户隔离
在应用程序微服务化的今天,分布式数据库存在的价值不仅在于解决单点数据量大的问题,更在于它能以一种平台化(PaaS)的形式,同时为上层大量的应用与微服务提供数据访问能力。在这种情况下,在不同微服务之间实现底层数据的逻辑与物理隔离,是保障云环境中分布式数据库安全、可靠和性能稳定的前提。
在SequoiaDB中,数据域可以用于在复杂集群环境中,对资源进行逻辑与物理的划分隔离。例如,在交易型应用中,核心账务类业务与后督(事后监督)类业务的物理资源往往需要完全隔离,以确保在任何情况下审计类业务的复杂压力均不会影响到核心账务系统的稳定运行。此外,不同数据域之间的数据安全性配置、硬件资源环境等往往也不尽相同。
通过数据域、联机交易和分析混合负载、多模式接口、水平弹性扩展等多种机制,SequoiaDB能够保障应用程序在云环境下的多租户隔离。
总体来看,作为一款新一代金融级分布式数据库,SequoiaDB除了与MySQL、PostgreSQL等多种传统数据库高度兼容,还在水平扩展、数据安全、分布式事务、多模式接口、混合负载及多租户隔离等方面有着自身的独特优势。