探索OceanBase数据库的独特特性
随着互联网行业和大数据的兴起和蓬勃发展,信息量和并发浏览量呈指数级增长,对整个系统结构模式和产品能力提出了巨大挑战。总成本高、可扩展性短、大数据处理性能不足等。已经成为高并发性和大数据浏览需求的痛点。同时,阿里巴巴和蚂蚁的各种应用领域极其苛刻,对并发性的需求是世界上最大的,对系统的可靠性和可扩展性的要求也很高。
需要具备单机、机架、机房、区域容灾能力。共享存储、小型机等高端硬件的初步使用,只能部分满足我们对性能和可靠性的要求。能否结合分布式架构和传统关系数据库的优势,既有传统关系数据库的功能优势,又有分布式架构库的可扩展性和高可靠性?在这样的历史背景下,OceanBase数据库作为原始分布式数据库诞生了。OceanBase数据库的设计始于由一般服务器组成的分布式集群,具有可扩展性、低可用性和高可用性。
作为原生分布式数据库,OceanBase数据库具有以下技术特点:
弹性膨胀
OceanBase数据库支持在线弹性扩展。当集群存储能力或处理能力不足时,可随时添加新的观察者。该系统具有自动迁移数据的能力,并根据机器的处理能力将合适的数据分区转移到新添加的设备上;同样,当系统生产能力充足,生产能力过剩时,机器也可以下线,以降低成本;在双11类似的促销活动中,可以提供良好的弹性伸缩能力。
负载平衡能力
OceanBase数据库是一个分布式数据库,作为一个观察者集群,许多托管观察者为许多租户提供数据服务。OceaBase集群控制的所有观测器都可以看作是一个超大的“资源蛋糕”。资源分配时,应根据需要分配给建立租户时申请的资源。为了保证观察者集群的顺利运行,系统租户将在引导过程中创建,向系统租户分配少量资源,以确保内部运行。
OceanBase数据库的负载平衡能力可以保证整个观测者集群中多个租户申请的资源占用相对平衡。在动态场景中(如添加或删除观测者、添加或删除业务租户、在数据添加和删除过程中分区的数据倾斜),负载平衡算法仍然可以平衡当前节点的资源。在OceanBase数据库系统中,每个分区都维护多个副本,其中一个是主副本(Leader副本)提供强烈一致的读取数据服务,另一个副本是备份(Follower副本)。领导者副本的集中和分散也反映了未来业务负荷的热度分布。OceanBase数据库在创建表和分区时已经考虑到了负载平衡,OceanBase数据库可以将所有副本的领导者以相对均衡的形式分散到集群中的所有节点。将所有领导者的副本随机分散到不同的节点,以平衡不同节点的负荷。但是,项目需求对数据服务分发的需求可能不会尽可能分散。尤其是在不同的表格和分区相互关联的前提下。跨节点请求可能会降低分布式数据库中的性能。OceanBase数据库使用表组来汇集多个经常一起访问的表。例如,有客户基本信息表(user)和用户商品表一起(user_item),这两种表格都是根据客户号排列的。只需将其设置为同一表组,系统后台就会自动将同一用户所在的user表分区和user_item表分区调度到同一服务器。通过这种方式,即使操作一个客户的多个手表,也不会发生跨机事务。OceanBase数据库还支持手动设置租户主区,以影响提供数据服务主副本的位置,以影响管理者的副本分布偏好,并设置位置来控制租户或表的副本类型。这样,在充分利用OceanBase数据库的负载平衡能力的同时,可以更好地适应具有一定特征和逻辑的业务数据访问场景,获得更快的响应时间。
OceanBase数据库通过RootService管理节点之间的负载平衡。不同类型的副本会有不同的资源。CPU包括RootService在实施分区管理操作时需要考虑的因素、硬盘的使用量、内存的使用量、每个观察者上的IOPS的使用量、防止同一表的所有部分落在几个观察者身上等等。让内存多的副本和内存少的副本放在同一台机器上,让存储空间多的副本和存储空间少的副本放在同一台机器上。负荷平衡后,所有机器最终会占用各方资源,并充分利用每台机器的所有资源。负荷平衡可以分为两个粒度:机器和模块。前者负责机器之间的平衡,选择一些模块从高负荷设备转移到低负荷机器。
ACID分布式事务能力
在OceanBase数据库架构下,ACID的实现如下:
持久性:用Paxos同步事务日志的多副本。
原子性:为了保证快照事项的原子性,两阶段提交。
隔离:采用多版本系统并发控制。
一致性:确保事务的一致性。
可扩展性
在OceanBase数据库系统中,每个分区维护多个副本,通常是三个副本,部署到三个不同的数据中心。(Zone)。整个系统最多可能有100万个分区,通过Paxos协议同步这些分区的多个副本日志。每个分区及其副本形成一个独立的Paxos组,其中一个副本是领导者,另一个副本是跟随者。每个观察者服务的部分分区是领导者,部分分区是跟随者。当观察者失败时,分区不会受到影响,主分区的写作服务会在短时间内受到影响。整个过程不会超过30s,直到通过Paxos协议选择该分区中的一个作为新的主分区。通过引入Paxos协议,可以确定性强
与此同时,OceanBase数据库还支持主备份数据库结构。OceanBase集群的多副本机制可以提供丰富的灾难容量。当机器级别、机房级别和城市级别出现故障时,可以实现不丢失数据的自动选择。RPO=0。OceanBase数据库的可扩展性结构是OceanBase数据库可扩展性的重要补充。备用集群可以接管服务,并在主集集计划内或计划外无法使用的情况下提供两种灾难容忍能力:无损转换(RPO=0)和有损转换(RPO>0)最大限度地减少服务停机时间。
OceanBase数据库支持创建、维护、管理和监控一个或多个备用集群。集群是库数据的热备份。为了提高系统性能和资源利用率,管理员可以选择向备用集群分配密集型报告操作。
高效率的存储引擎
OceanBase数据库采用无互通的分布式结构。每一个观察器都是平等的,并且管理不同的数据分区。管理不同的数据分区。基于LSM树架构,OceanBase数据库的存储引擎分为MemTable和SSTable两部分:MemStore和SSTable。MemTable提供读写,而SSTable只是阅读。首先将客户新插入/删除/更新的数据写入MemTable,事务由重做日志保证,重做日志将通过Paxos协议同步三份。当单个服务器停机时,我们可以通过Paxos协议来保证数据的完整性,并通过较短的恢复时间来保证数据的可扩展性。当MemTable的大小达到一定的阈值时,MemTable被转移到SSTable。在查询过程中,MemTable和SSTable的数据需要合并才能获得最终的查询记录。对SSTable,我们添加了多层缓存来缓存频繁访问的数据。
由于有大量的静态基线数据,因此可以很容易地压缩它们,降低存储成本。写入内存的增量数据不能无休止地增加。当MemTable的大小超过一定的阈值时,需要将MemTable中的数据转储到SSTable中以增加内存。这个过程叫做转储。转储将产生一个新的表格。当转储数量超过一定阈值时,或者在日常业务高峰期,系统会将基线表和后续转储的增量表合并为一个表格。这个过程叫做合并。OceanBase在优化数据存储空间的有效数据存储存储
多租户
OceanBase数据库是一个支持多租户的分布式数据库。一个集群支持多个业务系统,这通常被称为多租户特征。多租户结构的优势在于可以充分利用系统资源,为相同的资源服务提供更多的业务。在集群中部署具有不同峰值和谷值的业务系统,以最大限度地利用系统资源。在实现租户时,保证了租户之间的隔离:在数据安全方面,不允许跨租户的数据访问,以确保用户的数据资产没有泄露的风险;在资源开发方面,租户应该“垄断”自己的配额。