本节主要介绍 OceanBase 数据库产品及其技术特点。
自从 E.F.Codd 于 1970 年首次提出关系数据库模型后,关系数据库便以其易于使用的接口、完善的功能和生态而成为了 IT 领域必需的基础设施,广泛应用在各行各业,包括金融、电信、房地产、农林牧渔、制造业等。关系数据库经过了 40 多年的发展,涌现出了非常多优秀的商业数据库和开源数据库。
随着互联网行业和大数据的兴起和蓬勃发展,数据量和并发访问量呈现指数级的增长,这对整个系统的架构的设计、产品的能力都提出了极大的挑战。极度高昂的总体拥有成本、捉襟见肘的扩展能力、荏弱无力的大数据处理性能等都成为了高并发,大数据访问需求下越来越明显的灼痛。与此同时,阿里巴巴,蚂蚁的各类应用场景极其严苛,有着全球最大的并发量需求,对系统的可靠性,高可用性有着极高的要求,需要具备单机、机架、机房、以及地区级别的容灾恢复能力。早期使用共享存储、小型机等高端硬件也只能部分满足我们在性能和可靠性上的需求,我们能不能结合分布式系统和传统关系型数据库的优点,既拥有传统关系型数据库在功能上的优势,同时具备分布式系统库的可扩展性、高可靠性等特征?在这样的历史背景下,OceanBase 数据库作为一款原生的分布式数据库诞生了。OceanBase 数据库的设计之初就是构建在普通服务器组成的分布式集群之上,具备可扩展、高可用、高性能、低成本以及多租户等核心技术优势。目前已经成功服务于阿里巴巴集团和蚂蚁内部的多个核心业务并且经历过了多年电商“双十一”大促活动的严格考验。 OceanBase 数据库在阿里内部经过了 10 年的孕育和发展后才再逐步推广到外部市场,目前服务于金融、保险、电信等多个行业。
1.OceanBase 数据库的技术架构有哪些技术特点?
OceanBase 数据库作为一款原生的分布式数据库,有以下技术特点:
弹性扩展https://www.cndba.cn/hbhe0316/article/22195https://www.cndba.cn/hbhe0316/article/22195
OceanBase 数据库支持在线弹性扩展。当集群存储容量或处理能力不足时,可以随时加入新的 OBServer,系统有能力自动进行数据迁移,并根据机器的处理能力,将合适的数据分区迁移到新加入的机器上;同样,在系统容量充足和处理能力富余时,也可以将机器下线,降低成本;在类似于双 11 大促之类的活动中,可以提供良好的弹性伸缩能力。https://www.cndba.cn/hbhe0316/article/22195
负载均衡能力
OceanBase 数据库是一个分布式的数据库,管理着的许多台 OBServer 作为一个 OBServer 集群为多个租户提供数据服务。 OceaBase 集群管控的所有 OBServer 可以被视作一个超级大的“资源蛋糕”,在分配资源时,按需分配给创建租户时申请的资源。 为了保证 OBServer 集群顺畅运行,还会在初始化(BootStrap)时创建出系统租户,并分配给系统租户少量资源保证内部运行。https://www.cndba.cn/hbhe0316/article/22195
OceanBase 数据库的负载均衡能力能够保证多个租户在整个 OBServer 集群中申请的资源占用相对均衡,并且在动态场景下(例如,添加或删除 OBServer、添加或删除业务租户以及数据增删过程中分区数据量发生倾斜等),负载均衡算法仍然能在已有的节点上平衡资源。OceanBase 数据库系统中的每个分区都维护了多个副本,其中一个为主(Leader 副本)对外提供强一致读的数据服务,其他副本为备(Follower 副本)。Leader 副本的集中和分散程度也就映射着未来业务负载的热度分布。在创建表创建分区的时候,OceanBase 数据库已经考虑到负载均衡了,OceanBase 数据库有能力将所有副本的Leader 相对均衡地打散到集群中的所有节点上。将所有 Leader 副本随机打散到不同的节点,可以将负载均衡到不同节点。但是有可能业务需求对数据服务分布的需求并不一定是尽量打散的。特别是在不同表、分区访问有关联关系的场景下。在分布式数据库中,跨节点的请求可能会有性能下降的代价。OceanBase 数据库使用表组(table group)将经常一起访问的多张表格聚集在一起。例如,有用户基本信息表(user)和用户商品表(user_item),这两张表格都按照用户编号哈希分布,只需要将二者设置为相同的表格组,系统后台就会自动将同一个用户所在的 user 表分区和 user_item 表分区调度到同一台服务器。这样,即使操作某个用户的多张表格,也不会产生跨机事务。OceanBase 数据库还支持手动地通过设置租户的 Primary Zone 来影响 Leader 副本分布的偏好、通过设置 Locality 控制租户或者表的副本类型来影响提供数据服务的主副本位置。这样在充分利用 OceanBase 数据库负载均衡能力的同时,可以更好地适配已经有一定特征和逻辑业务数据访场景,获得更快的请求响应时间。
OceanBase 数据库通过 RootService 管理各个节点间的负载均衡。不同类型的副本需求的资源各不相同,RootService 在执行分区管理操作时需要考虑的因素包括每台 OBServer 上的 CPU、磁盘使用量、内存使用量、IOPS 使用情况、避免同一张表格的分区全部落到少数几台 OBServer,等等。让耗内存多的副本和耗内存少的副本位于同一台机器上,让占磁盘空间多的副本和占磁盘空间少的副本位于同一台机器上。经过负载均衡,最终会使得所有机器的各类型资源占用都处于一种比较均衡的状态,充分利用每台机器的所有资源。负载均衡分机器、Unit 两个粒度,前者负责机器之间的均衡,选择一些 Unit 整体从负载高的机器迁移到负载低的机器上;后者负责两个 Unit 之间的均衡,从负载高的 Unit 搬迁副本到负载低的 Unit。
分布式事务 ACID 能力https://www.cndba.cn/hbhe0316/article/22195
OceanBase 数据库架构下事务的 ACID 的实现方式如下:
Durability:事务日志使用 Paxos 进行多副本同步。
Atomicity:使用两阶段提交保证快照事务原子性。
Isolation:使用多版本机制进行并发控制。
Consistency:保证事务的一致性。
高可用https://www.cndba.cn/hbhe0316/article/22195
OceanBase 数据库系统中的每个分区都维护了多个副本,一般为三个,且部署到三个不同的数据中心(Zone)。整个系统有可能至多会有百万分区,这些分区的多个副本之间通过 Paxos 协议进行日志同步。每个分区和它的副本构成一个独立的 Paxos 组,其中一个副本为主(Leader),其它副本为备(Follower)。每台 OBServer 服务的一部分分区为 Leader,一部分分区为 Follower。当 OBServer 出现故障时,Follower 分区不受影响,Leader 分区的写服务短时间内会受到影响,直到通过 Paxos 协议将该分区的某个 Follower 选为新的 Leader 为止,整个过程不超过 30s。通过引入 Paxos 协议,可以保证在数据强一致的情况下,具有极高的可用性及性能。
同时,OceanBase 数据库也支持主备库架构。OceanBase 集群的多副本机制可以提供丰富的容灾能力,在机器级、机房级、城市级故障情况下,可以实现自动切换,并且不丢数据,RPO = 0。OceanBase 数据库的主备库高可用架构是 OceanBase 数据库高可用能力的重要补充。当主集群出现计划内或计划外(多数派副本故障)的不可用情况时,备集群可以接管服务,并且提供无损切换(RPO = 0)和有损切换(RPO > 0)两种容灾能力,最大限度降低服务停机时间。
OceanBase 数据库支持创建、维护、管理和监控一个或多个备集群。备集群是生产库数据的热备份。管理员可以选择将资源密集型的报表操作分配到备集群,以便提高系统的性能和资源利用率。
高效的存储引擎https://www.cndba.cn/hbhe0316/article/22195
OceanBase 数据库采用的是 Shared-Nothing 的分布式架构,每个 OBServer 都是对等的,管理不同的数据分区。管理不同的数据分区。OceanBase 数据库的存储引擎基于 LSM Tree 架构,数据被划分为两部分:MemTable(也经常被叫做 MemStore)和 SSTable。其中,MemTable 提供读写,而 SSTable 是只读的。用户新插入/删除/更新的数据先写入 MemTable,通过 Redo Log 来保证事务性,Redo Log 会在三副本间使用 Paxos 协议进行同步,当单台 Server 宕机时,通过 Paxos 协议我们可以保证数据的完整性,并通过较短的恢复时间来保证数据的高可用。当 MemTable 的大小达到某个阈值时,MemTable 被转存到 SSTable中。在查询时,需要将 MemTable 和 SSTable 的数据进行归并,才能得到最终的查询结果。对于 SSTable 我们增加了多层 Cache,用于缓存频繁访问的数据。
因为有大量的静态基线数据,可以很方便对其进行压缩,减少存储成本;增量数据写在内存中不可无尽增长,当 MemTable 的大小超过一定阈值时,就需要将 MemTable 中的数据转存到 SSTable 中以释放内存,这一过程称之为转储;转储会生成新的 SSTable,当转储的次数超过一定阈值时,或者在每天的业务低峰期,系统会将基线 SSTable 与之后转储的增量 SSTable 给合并为一个 SSTable,这一过程称之为合并。OceanBase 数据库高的存储引擎在优化了数据存储的空间基础上,提供了高效的读写服务,保证事务性和数据的完整性。https://www.cndba.cn/hbhe0316/article/22195
多租户
OceanBase 数据库是一个支持多租户的分布式数据库,一个集群支持多个业务系统,也就是通常所说的多租户特性。 多租户的架构优势在于可以充分利用系统资源,使得同样的资源可以服务更多的业务。通过将波峰、波谷期不同的业务系统部署到一个集群,以实现对系统资源最大限度的使用。在租户的实现中,保证了租户之间的隔离性:在数据安全方面,不允许跨租户的数据访问,确保用户的数据资产没有泄露的风险;在资源使用方面表现为租户“独占”其资源配额,该租户对应的前端应用,无论是响应时间还是 TPS/QPS 都比较平稳,不会受到其他租户负载轻重的影响。
Oracle 兼容和 MySQL 兼容
OceanBase 数据库支持 Oracle 兼容模式和 Oracle 兼容模式,用户可以根据不同的需要选择不同的模式。
详见官网:https://open.oceanbase.com/docs/knowledgeBase/oceanbase-database-products
OceanBase