随着互联网行业和大数据的兴起和蓬勃发展,数据量和并发访问量呈指数级增长,这对整个系统的架构设计和产品的能力提出了巨大的挑战。极高的总拥有成本、捉襟见肘的可扩展性、薄弱的大数据处理性能等。都成为了高并发和大数据访问需求的燃痛。同时,阿里巴巴、蚂蚁的各种应用场景极其苛刻,对并发的需求全球最大,对系统的可靠性和高可用性要求也很高。

需要具备单机、机架、机房、区域容灾能力。共享存储、小型机等高端硬件的早期使用,只能部分满足我们对性能和可靠性的要求。能否结合分布式系统和传统关系数据库的优势,既有传统关系数据库的功能优势,又有分布式系统库的可扩展性和高可靠性?在这样的历史背景下,OceanBase数据库作为原生分布式数据库诞生了。OceanBase 数据库的设计一开始就建立在由普通服务器组成的分布式集群上,具有可伸缩、高可用、高性能、低成本、多租户的核心技术优势。目前已成功服务阿里巴巴集团和蚂蚁内部多个核心业务,经历了多年电商“双十一”促销活动的严格考验。OceanBase数据库在阿里孕育发展了10年,才逐渐推广到外部市场。目前服务于金融、保险、电信等多个行业。

OceanBase 数据库作为一个原生分布式数据库,具有以下技术特点:

弹性膨胀

OceanBase数据库支持在线弹性扩展。当集群的存储能力或处理能力不足时,可以随时加入新的观察者。系统具有自动迁移数据的能力,根据机器的处理能力,将合适的数据分区迁移到新加入的机器上;同样,当系统产能充足,加工能力过剩时,也可以将机器下线,以降低成本;在类似双11促销的活动中,可以提供良好的弹性伸缩能力。

负载平衡能力

OceanBase 数据库是一个分布式数据库,很多托管的观察者作为一个观察者集群,为多个租户提供数据服务。OceaBase集群控制的所有观测器都可以看作是一个超大的“资源蛋糕”。分配资源时,按需分配给创建租户时申请的资源。为了保证观察者集群的顺利运行,在引导过程中会创建一个系统租户,分配少量资源给系统租户,保证内部运行。

OceanBase 数据库的负载均衡能力可以保证整个观察者集群中多个租户所申请的资源占用相对均衡,负载均衡算法在动态场景下(例如添加或删除观察者,添加或删除业务租户,数据添加和删除过程中分区的数据量倾斜)仍然可以均衡现有节点上的资源。OceanBase数据库系统中的每个分区都维护多个副本,其中一个是主副本(Leader副本)提供强一致读取的数据服务,其他副本是备份(Follower副本)。领袖副本的集中和分散也映射了未来业务负载的热度分布。在创建表和分区时,OceanBase 数据库已经考虑了负载均衡,并且OceanBase 数据库能够以相对均衡的方式将所有副本的领导者分散到集群中的所有节点。将所有领导者副本随机分散到不同的节点可以平衡不同节点的负载。但有可能业务需求对数据业务分发的需求可能不会尽可能分散。尤其是在不同的表和分区相互关联的情况下。在分布式数据库中,跨节点的请求可能会降低性能。OceanBase数据库使用表组来聚合经常一起访问的多个表。比如有用户基本信息表(user)和用户商品表(user_item),这两个表都是按照用户号散列的。只要设置到同一个表组,系统后台就会自动将同一用户所在的user表分区和user_item表分区调度到同一个服务器上。这样,即使操作某个用户的多个表,也不会发生跨机事务。OceanBase数据库还支持手动设置租户的主区域以影响领导者的副本分布偏好,以及设置位置以控制租户或表的副本类型以影响提供数据服务的主副本的位置。这样在充分利用OceanBase 数据库的负载均衡能力的同时,可以更好地适应具有一定特征和逻辑的业务数据访问场景,获得更快的请求响应时间。

OceanBase 数据库通过RootService管理节点间的负载均衡。不同类型的副本需要不同的资源。RootService在执行分区管理操作时需要考虑的因素包括CPU、磁盘使用量、内存使用量、每个观察者上的IOPS使用量、避免同一个表的所有分区落到几个观察者身上等等。让内存多的副本和内存少的副本位于同一台机器上,让磁盘空间多的副本和磁盘空间少的副本位于同一台机器上。负载均衡后,所有机器占用的各种资源最终会处于相对均衡的状态,充分利用每台机器的所有资源。负载平衡可以分为两个粒度:机器和单元。前者负责机器之间的平衡,选择一些单元从高负载的机器迁移到低负载的机器。后者负责两台机组之间的平衡,从高负荷的机组到低负荷的机组。

分布式事务ACID能力

OceanBase数据库架构下事务的ACID实现如下:

持久性:事务日志使用Paxos进行多副本同步。

原子性:两阶段提交用于保证快照事务的原子性。

隔离:使用多版本机制的并发控制。

一致性:确保事务的一致性。

高可用性

OceanBase数据库系统中每个分区维护多个副本,一般是三个副本,部署到三个不同的数据中心(Zone)。整个系统可能最多有一百万个分区,这些分区的多个副本的日志是通过Paxos协议同步的。每个分区及其副本形成一个独立的Paxos组,其中一个副本是领导者,其他副本是追随者。每个观察者服务的部分分区是领导者,部分分区是追随者。当观察者失效时,从分区不会受到影响,短时间内会影响到主分区的写服务,直到通过Paxos协议选出这个分区的一个从分区作为新的主分区,整个过程不会超过30s。通过引入Paxos协议,可以保证强数据一致性条件下的高可用性和高性能。

同时,OceanBase 数据库还支持主备份数据库架构。OceanBase集群的多副本机制可以提供丰富的容灾能力。在机器级、机房级、城市级故障的情况下,可以实现不丢失数据的自动切换。RPO = 0。OceanBase 数据库的高可用性架构是对OceanBase 数据库高可用性的重要补充。在主群集计划内或计划外不可用(多数副本出现故障)的情况下,备用群集可以接管服务,并提供两种容灾能力:无损切换(RPO = 0)和有损切换(RPO > 0),以最大限度地减少服务停机时间。

OceanBase数据库支持一个或多个备用集群的创建、维护、管理和监控。集群是生产库数据的热备份。管理员可以选择将资源密集型报告操作分配给备用集群,以提高系统性能和资源利用率。

高效存储引擎

OceanBase数据库采用无共享的分布式架构。每个观察器都是对等的,并且管理不同的数据分区。管理不同的数据分区。OceanBase 数据库的存储引擎基于LSM树架构,数据分为MemTable(也常称为MemStore)和SSTable两部分。MemTable提供读写,而SSTable是只读的。用户新插入/删除/更新的数据先写入MemTable,事务由重做日志保证,重做日志会通过Paxos协议同步三个副本。当单台服务器宕机时,我们可以通过Paxos协议保证数据的完整性,通过较短的恢复时间保证数据的高可用性。当MemTable的大小达到某个阈值时,MemTable被转移到SSTable。查询时,MemTable和SSTable的数据需要合并才能得到最终的查询结果。对于SSTable,我们添加了多层缓存来缓存频繁访问的数据。

由于存在大量的静态基线数据,因此可以方便地对其进行压缩,降低存储成本。写入内存的增量数据不可能无止境增长。当MemTable的大小超过某个阈值时,需要将MemTable中的数据转储到SSTable中来释放内存。这个过程称为转储。转储将生成新的表。当转储数量超过某个阈值时,或者在每天的业务高峰期,系统会将基线表和后来转储的增量表合并为一个表。这个过程叫做合并。OceanBase在优化数据存储空间的基础上,高数据库的存储引擎提供高效的读写服务,保证事务性和数据完整性。

多租户

OceanBase 数据库是一个支持多租户的分布式数据库。一个集群支持多个业务系统,这就是通常所说的多租户特性。多租户架构的优势在于可以充分利用系统资源,让同样的资源服务更多的业务。将具有不同峰值和谷值的业务系统部署到一个集群中,以最大限度地利用系统资源。在租户的实现上,保证了租户之间的隔离:在数据安全上,不允许跨租户的数据访问,保证用户的数据资产没有泄露的风险;在资源利用上,租户“垄断”了自己的资源配额。该租户对应的前端应用在响应时间和TPS/QPS上相对稳定,不会受到其他租户负载的影响。