阿里自研数据库 Ocean base实践

38
苏苏 2013.4 1 阿阿阿阿阿阿阿 Oceanase 阿阿

Transcript of 阿里自研数据库 Ocean base实践

Page 1: 阿里自研数据库 Ocean base实践

苏真

2013.4

1

阿里自研数据库 Oceanase实践

Page 2: 阿里自研数据库 Ocean base实践

课程大纲

Why OceanBase

系统架构

数据模型

如何使用

2

Page 3: 阿里自研数据库 Ocean base实践

WHY OCEANBASE

Page 4: 阿里自研数据库 Ocean base实践

了解 OceanBase 的特点

• 恋爱通常是从了解开始的,想用好OceanBase ,得先了解它。

• OceanBase 设计目标: 关系型数据库、结构化数据

分布式、扩展性

千亿级数据量

跨行跨表事务

支持 SQL 、兼容 MYSQL 协议

Page 5: 阿里自研数据库 Ocean base实践

Why OceanBase

• 传统数据库 (mysql&oracle) ,功能完善,唯一缺点是数据库本身不可扩展,业务高速增长时需要不断折库折表、需要 TDDL 等中间层支持

OceanBase RDBMS + Scalability= 关系数据库: ACID & SQL

> 持续可用 + 水平扩展 + 低成本 + 高性能

< 功能 & 性能

Page 6: 阿里自研数据库 Ocean base实践

数据库进化的时代到了

• mysql 和 oracle 为代表的传统数据库

• Nosql 很热:hbase , cassandra , mongodb 等遍地开发

• 大数据时代,数据库变革时期正在到来,谁将占据主流?

Page 7: 阿里自研数据库 Ocean base实践

现有存储方案对照

7

数据规模

事务与数据一致性

万亿记录( 十 PB)

千亿记录( 百 TB)

千万记录( 百 GB)

十亿记录(TB)

最终一致 单行事务 跨行跨表事务

RDBMS

Cassandra

HBaseMegastore

OceanBase

Dynamo

Bigtable

Page 8: 阿里自研数据库 Ocean base实践

不同数据库的对比数据库类型 代表 特点

关系型数据库 mysql,oracle 支持事务、数据一致性好、功能强大,成熟稳定。但扩展性不足

自主开发 OceanBase 支持事务、 SQL。功能上接近关系型数据库,兼顾扩展性

NoSQL类型 Cassandra、 Hbase

可扩展性好,功能单一;一般不支持事务、不支持表关联查询、数据一致性较弱、有些还没有范围查询

Page 9: 阿里自研数据库 Ocean base实践

数据库选型

• 关于开源数据库 OceanBase( http://oceanbase.taobao.org/ ) 的应用场景:

如果你不需要事务 (transaction) , MongoDB 等是不错的选择;

如果你的数据量很大, HBase 也是不错的选择;

如果你需要事务 (transaction) ,并且数据量不大,或者你可以接受分库 (sharding) 后的事务,关系数据库 ( 例如 MySQL) 是不错的选择;

如果你需要事务 (transaction) ,并且数据量比较大 ( 例如 1TB~ 几百 TB) ,或者虽然目前数据量不大,但数据增长很快,你希望免除分库分表的麻烦,那么欢迎你选择OceanBase

参考如标题的等式: OceanBase = transactionality + scalability 9

Page 10: 阿里自研数据库 Ocean base实践

10

系统架构

Page 11: 阿里自研数据库 Ocean base实践

11

OceanBase 设计思路

数据存储:多机磁盘

修改增量:单机内存

Data = 基线数据

( 磁盘 )+ 修改增量

( 内存 )

Query

数据增删改

Page 12: 阿里自研数据库 Ocean base实践

物理架构

12

App(Client)

ChunkServer/MergeServer

ChunkServer/MergeServer

ChunkServer/MergeServer

ChunkServer/MergeServer

RootServer/ UpdateServer

(primary)

RootServer/ UpdateServer(secondary)

RootServer/ UpdateServer

(read secondary)

meta data

increment data

base data

data merge

Page 13: 阿里自研数据库 Ocean base实践

13

每日合并:修改增量

很多数据库每天有明显的访问低谷 (e.g.,2:00am-5:00am)

Data = 基线数据 + 修改增量 新的修

改增量+

读写事务照常进行

Page 14: 阿里自研数据库 Ocean base实践

14

OceanBase 系统架构

使用 MySQL 客户端,兼容 MySQL 应用

UpdateServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

修改增量

应用接口

基线数据

SQL

SQL

SQL

SQL

SQL

SQL

SQL

SQL

RootServer

配置管理

Page 15: 阿里自研数据库 Ocean base实践

15

OceanBase 读写事务

UpdateServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

修改增量

应用接口

基线数据

SQL

SQL

SQL

SQL

SQL

SQL

SQL

SQL

写事务 (UpdateServer) : Redo log + 主备同步

RootServer

配置管理

Page 16: 阿里自研数据库 Ocean base实践

16

每日合并期间的 query

使用新或旧基线数据,查询结果一样

Data = 基线数据 + 修改增量 新的修

改增量+

Query

旧基线= + 旧增量 + 新增量

Query

新基线= + 新增量

Page 17: 阿里自研数据库 Ocean base实践

水平扩展 -CS/MS

新增服务器:数据自动迁移且对应用透明

应用不再需要分库分表

应用不再需要耗费时间配合数据库进行扩容

33

3

4

4

4

5

5

5

6

6

6

7

77

8

8

8

0

0

0

2

2 2

1

1

1

服务器

Page 18: 阿里自研数据库 Ocean base实践

水平扩展 -UPS 备 UPS 线性扩展

RootServer

UpdateServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

修改增量

应用接口

基线数据

RootServerHA

UpdateServer

UpdateServer

UpdateServer

UpdateServer

RootServer

配置管理

Page 19: 阿里自研数据库 Ocean base实践

跨机房容灾在二个机房部署主备二个群集,群集之间通过

updateserver 的 commitlog 实现自动同步

Update

Server

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

Update

Server

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

RootServer

RootServer

Page 20: 阿里自研数据库 Ocean base实践

持续可用: RS/UPS RS/UPS 异常,数据不丢,

服务不停

RootServer

UpdateServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

修改增量

应用接口

基线数据

RootServerHA

UpdateServer

UpdateServer

UpdateServer

UpdateServer

RootServer

配置管理

Page 21: 阿里自研数据库 Ocean base实践

持续可用: CS

CS 异常,数据不丢,服务不停

33

3

4

4

4

5

5

5

6

6

6

7

77

8

8

8

0

0

0

2

2 2

1

1

1

基线数据服 务 器(CS)

Page 22: 阿里自研数据库 Ocean base实践

持续可用: MS

UpdateServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

MergeServerChunkServer

SQL

SQL

SQL

SQL

SQL

SQL

SQL

SQL

RootServer

MS 异常,数据不丢,服务不停

Page 23: 阿里自研数据库 Ocean base实践

持续可用 - 跨数据中心

IDC 异常,数据不丢,服务不停

Update

Server

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

Update

Server

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

MergeServer

ChunkServer

SQL

SQL

SQL

SQL

SQL

SQL

SQL

SQL

RootServer

RootServer

Page 24: 阿里自研数据库 Ocean base实践

持续可用 - 数据校验

磁盘读写:每条记录带 64 位 checksum

网络传输:每个网络包带 64 位 checksum

每个文件多副本 (3~6) :每个文件都有 64 位 checksum

修改增量多副本 (2~N) :每个 UPS 内存数据都有 64 位 checksum

Redo log :每条都带 checksum及对应于 UPS 内存的 checksum

Page 25: 阿里自研数据库 Ocean base实践

持续可用 -小结 假设:硬件、软件、人随时可能故障或犯错

OceanBase 目标:用不可靠的硬件和软件提供稳定、持续可用的服务 年可用率 99.999+%( 计划内停机属于不可用 )

措施

配置服务 (RS) : HA

更新增量服务 (UPS) :实时热备

基线数据服务 (CS) :数据多副本

应用接口 (MS) :多实例

跨机房数据同步

数据正确性:记录 / 网络包、文件和内存 checksum

Page 26: 阿里自研数据库 Ocean base实践

26

数据模型

Page 27: 阿里自研数据库 Ocean base实践

数据模型TABLE

sstable

sstable

sstable

chunkserver1

chunkserver2

chunkserver3

chunkserver4

chunkserver5

chunkserver6

sstable

sstable

sstable

Page 28: 阿里自研数据库 Ocean base实践

数据模型

Primary Key field1 field2 field3 … fieldn

Primary Key: 用于定位记录的唯一标识, 不可以重复 数据物理存储按 Primary Key 排序

Field( 字段 ): 类型: int , double, varchar, datetime,timestamp, create_time, modify_time.

表,记录,字段,数据类型。数据模型与传统 RDBMS 一样

记录构成:

Page 29: 阿里自研数据库 Ocean base实践

基准数据和增量数据

Oceanbase 数据结构 增量数据:单机 B+ 树

基准数据:分布式 B+ 树

新的基准数据 = 老的基准数据 + 增量数据

29

基线数据(Chunkserver)

增量数据(Updateserver)

Page 30: 阿里自研数据库 Ocean base实践

数据分布

30

Updateserver

Chunkserver 4Chunkserver 3Chunkserver 2Chunkserver 1

Rootserver

数据分片(元数据)

增量数据( B+树)

Page 31: 阿里自研数据库 Ocean base实践

31

如何使用

Page 32: 阿里自研数据库 Ocean base实践

完全兼容 mysql 客户端

32

Page 33: 阿里自研数据库 Ocean base实践

实例

33

Create table t1( c1 int, c2 int, c3 varchar(20), c4 datatime, c5 int, c6 createtime, primary key (c1,c2,c3))

C1+C2+C3 组成主键, C4,C5,C6 为普通字段C1 C2 C3 C4 C5 C6

Page 34: 阿里自研数据库 Ocean base实践

实例

34

C1+C2+C3 组成主键, C4,C5,C6 为普通字段

OKSelect * from t1 where c1=x and c2 =x and c3=‘xxxx’;Select * from t1 where c1=x and c2=x;Select * from t1 where c1=x;Select * from t1 where c1=x and c2=x and c4=x;Select * from t1 where c1=x and c6=x;Select sum(c5) where c1=x;

C1 C2 C3 C4 C5 C6

Page 35: 阿里自研数据库 Ocean base实践

实例

35

C1+C2+C3 组成主键, C4,C5,C6 为普通字段

NOT OKSelect * from t1 where c2=x and c3 =‘xxxx’;Select * from t1 where c3=‘xxxx’;Select * from t1 where c2=x;Select * from t1 where c5=x ;

更多 OceanBase SQL 手册参见:http://oceanbase.alibaba-inc.com/wiki/index.php?title=SQL_User_manual

C1 C2 C3 C4 C5 C6

Page 36: 阿里自研数据库 Ocean base实践

Select,update,replace,delete,insertwhere 条件过滤 (and, or) likegroup byhavingorder by limit,offset reverse scanaggregate(count,sum,average)

支持的 SQL操作

Page 37: 阿里自研数据库 Ocean base实践

OceanBase 应用接口

应用接口: MySQL 兼容 (JDBC/ODBC)

APP

OceanBase

OBSQL 客户端库

MySQL客户端库

PRELOAD

Page 38: 阿里自研数据库 Ocean base实践

38

感谢聆听

HTTPS://GITHUB.COM/ALIBABA/OCEANBASE