OceanBase

OceanBase

简介

OceanBase是一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务,由淘宝核心系统研发部、运维、DBA、广告、应用研发等部门共同完成。在设计和实现OceanBase的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关键点上,当前 OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入。[1]
目前OceanBase已经应用于淘宝收藏夹,用于存储淘宝用户收藏条目和具体的商品、店铺信息,每天支持4~5千万的更新操作。等待上线的应用还包括CTU、SNS等,每天更新超过20亿,更新数据量超过2.5TB,并会逐步在淘宝内部推广。[1]
OceanBase 0.3.1在Github开源,开源版本为Revision:12336。[2]

特点

OceanBase功能
OceanBase设计和实现的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关键点上,当前OceanBase主要解决 数据更新 一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入
 
OceanBase数据访问特点
虽然数据总量比较大,但跟许多行业一样,淘宝业务一段时间(例如小时或天)内数据的增删改是有限的(通常一天不超过几千万次到几亿次),根据这个特点,OceanBase把一段时间内的增删改等修改操作以增量形式记录下来(称之为 动态数据 ,通常保存在 内存 中),这样也使得了主体数据在一段时间内保持了相对稳定(称之为 基准数据 )。
 
由于 动态数据 相对较小,通常情况下,OceanBase把它保存在独立的 服务器 UpdateServer的 内存 中。以 内存 保存增删改记录极大地提高了系统写 事务 的性能。此外,假如每条修改平均消耗100 Bytes,那么10GB 内存 可以记录100M(即1亿)条修改,且扩充UpdateServer内存即增加了内存中容纳的修改量。不仅如此,由于冻结后的 内存 表不再修改,它也可以转换成sstable格式并保存到SSD固态盘或磁盘上。转储到SSD固态盘后所占 内存 即可释放,并仍然可以提供较高性能的读服务,这也缓解了极端情况下UpdateServer的内存需求。为了应对机器故障, 动态数据 服务器 UpdateServer写commit log并采取双机(乃至多机)热备。由于UpdateServer的主备机是同步的,因此备机也可同时提供读服务。
 
因为 基准数据 相对稳定,OceanBase把它按照主键(primary key,也称为row key)分段(即tablet)后保存多个副本(一般是3个)到多台机器(ChunkServer)上,避免了单台机器故障导致的服务中断,多个副本也提升了系统服务能力。单个tablet的尺寸可以根据应用数据特点进行配置,相对配置过小的tablet会合并,过大的tablet则会分裂。
由于tablet按主键分块连续存放,因此OceanBase按主键的范围查询对应着连续的磁盘读,十分高效。
对于已经冻结/转储的 动态数据 ,OceanBase的ChunkServer会在自己不是太繁忙的时候启动 基准数据 与冻结/转储 内存 表的合并,并生成新的基准数据。这种合并过程其实是一种范围查询,是一串连续的磁盘读和连续的磁盘写,也是很高效的。
传统DBMS提供了强大的事务性、良好的一致性和很短的查询修改响应时间,但数据规模受到严重制约,缺乏扩展性;现代 云计算 提供了极大的数据规模、良好的扩展性,但缺乏跨行跨表事务、 数据一致性 也较弱、查询修改响应时间通常也较长,OceanBase的设计和实现融合了二者的优势:
UpdateServer:类似于DBMS中的DB角色,提供跨行跨表 事务 和很短的查询修改的响应时间以及良好的一致性。
ChunkServer:类似于 云计算 中的工作机(如GFS的chunk server),具有数据多副本(通常是3)、中等规模数据粒度(tablet大小约256MB)、自动负载平衡、宕机恢复、机器plug and play等特点,系统容量及性能可随时扩展。
MergeServer:结合ChunkServer和UpdateServer,获得最新数据,实现 数据一致性
RootServer:类似于 云计算 中的主控机(如GFS master),进行机器故障检测、 负载平衡 计算、负载迁移调度等。
上述的DBMS和 云计算 技术的优势互补使得OceanBase既具有传统DBMS的跨行跨表 事务 、数据的强一致性以及很短的查询修改响应时间,还有云计算的海量数据管理能力、自动故障恢复、自动 负载平衡 以及良好的扩展性。
 
OceanBase当前在淘宝的应用
OceanBase现在已经应用于淘宝收藏夹,用于存储淘宝用户收藏条目和具体的商品、店铺信息,每天支持4~5千万的更新操作。等待上线的应用还包括CTU、SNS等,每天更新超过20亿,更新数据量超过2.5TB,并会逐步在淘宝内部推广,也期待外部合作者。
主要的性能数据
测试软硬件环境
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
Intel(R) Xeon(R) CPU E5520 @ 2.27GH
ChunkServer & MergeServer:Memory 16GB Disk 300GB SAS*10 NO Raid
UpdateServer & RootServer:Memory 48GB Disk 300GB SAS*6 Raid1
测试环境部署简图
测试数据规模
21亿条数据, 基准数据 3备份。
测试Schema
两张表,其中表1中有21列,表2中11列。
其中表1中的11列和表2中的11列存在join关系。
单条记录大小为500字节。
测试性能曲线图
Range数据查询
单条数据查询
当压力最大时,ChunkServer单台输出数据90MB/S,已经接近了千兆 网卡 的极限
更新数据

应用

许多公司的核心资产是各种各样的商业数据,例如淘宝的商品、交易、订单、购物爱好等等,这些数据通常是结构化的,并且数据之间存在各种各样的关联,传统的关系数据库曾经是这些数据的最佳载体。然而,随着业务的快速发展,这些数据急剧膨胀,记录数从几千万条增加到数十亿条,数据量从百GB增加到数TB,未来还可能增加到数千亿条和数百TB,传统的 关系型数据库 已经无法承担如此海量的数据。OceanBase解决不断增加的结构化 数据存储 与查询的问题。
从Eric Brewer教授的CAP(一致性C: Consistency, 可用性A: Availability,分区 容错性 P: Tolerance of network Partition)理论角度分析,作为 电子商务 企业,淘宝和其他公司的业务对一致性和可用性的要求高于分区容错性,数据特征是数据总量庞大且逐步增加,单位时间内的 数据更新 量并不大,但实时性要求很高。这就要求我们提供一套更加偏重于支持CA特性的系统,同时兼顾可分区性,并且在实时性、成本、性能等方面表现良好。

架构

OceanBase的逻辑架构简图 
 
OceanBase架构的一些基本概念
主键
row key,也称为primary key,类似于DBMS的主键,与DBMS不同的是,OceanBase的主键总是二进制字符串(binary string),但可以有某种结构。OceanBase以主键为顺序存放表格数据
sstable
一种数据存储格式,OceanBase用来存储一个或几个表的一段按主键连续的数据
tablet
一个表按主键划分的一个(前开后闭的)范围,通常包含一个或几个sstable,一个tablet的数据量通常在256MB左右
基准数据 和动态数据
OceanBase以增量方式记录一段时间内的表格数据的增删改,从而保持着表格主体数据在一段时间内相对稳定,其中增删改的数据称为 动态数据 (通常在 内存 ,也称为 内存 表),而一段时间内相对稳定的主体数据称为 基准数据 ,基准数据和转储后(保存到SSD固态盘或 磁盘 )的动态数据以sstable格式存储
ChunkServer
保存基准数据的 服务器 ,通常是多台,为了避免软件硬件故障导致的服务中断,同一份基准数据通常保存了3份并存储在不同ChunkServer上
UpdateServer
保存 动态数据 服务器 ,一般是单台 服务器 。为了避免软件硬件故障导致的服务中断,UpdateServer记录commit log并通常使用 双机热备
MergeServer
进行静态 动态数据 合并的服务器,常常与ChunkServer共用一台物理服务器。MergeServer使得用户能够访问到完整的最新的数据
RootServer
配置服务器 ,一般是单台服务器。为了避免软件硬件故障导致的服务中断,RootServer记录commit log并通常采用 双机热备 。由于RootServer负载一般都很轻,所以它常常与UpdateServer共用物理机器
冻结
动态数据 (也称为 内存 表)的更新到一定时间或者数据量达到一定规模后,OceanBase停止该块 动态数据 的修改,后续的更新写入新的动态数据块(即新的内存表),旧的动态数据块不再修改,这个过程称为冻结
转储
出于节省 内存 或者持久化等原因将一个冻结的 动态数据 块(内存表)持久化(转化为sstable并保存到SSD固态盘或磁盘上)的过程
数据合并(merge)
查询时,查询项的 基准数据 与其动态数据(即增删改操作)合并以得到该数据项的最新结果的过程。此外,把旧的 基准数据 与冻结的 动态数据 进行合并生成新的基准数据的过程也称为数据合并
联表(join)
一张表与另一张或几张表基于主键的左连接关系,类似于DBMS的 自然连接
COW
Copy on Write的缩写,在OceanBase中特指BTree在更新时复制数据备份写入,避免系统锁的技术手段

你可能感兴趣的:(OceanBase)