OceanBase开源,11张图带你了解分布式数据库的核心知识

蚂蚁集团自研数据库OceanBase已经开源,这对国产分布式数据库来说,是一个重磅消息 。一直以来OceanBase作为商业数据库,披露的技术细节并不多,以后又多了一个可以拿来研究的优秀分布式数据库 。参考1[1]

根据官网描述,在5月20日国际事务处理性能委员会(TPC,Transaction Processing Performance Council)官网发布最新的数据分析型基准测试(TPC-H)榜单中,OceanBase以 1526 万 QphH 的性能总分排名 30,000 GB 第一 。这意味着,OceanBase 成为唯一在事务处理和数据分析两个领域测试中都获得第一的中国自研数据库 。
1 架构主流的分布式数据库有两种架构,PGXC和NewSql 。
1.1 PGXCPGXC是指PostgreSQL-XC,指以PostgreSQL为内核的分布式数据库,整体架构如下:
OceanBase开源,11张图带你了解分布式数据库的核心知识

文章插图
 
PGXC架构是对传统单体数据库做了集群,在集群的基础上加了协调节点,协调节点具有如下作用:
  • 客户端接入
  • 进程管理
  • 分布式事务管理
  • 查询处理
同时还增加了分片管理和全局时钟 。分片管理用来管理集群的分片信息,全局时钟的介绍见下一节 。
虽然PGXC名字的由来是PostgreSQL组成的分布式数据库,但是使用其他单体数据库组成的分布式数据库,也可以理解为PGXC,比如Golden使用的就是MySQL作为内核 。
1.2 NewSQL跟PGXC采用传统单体数据库为内核相比,NewSQL是在NoSQL基于分布式键值存储系统的基础上构建了分布式事务处理能力 。架构如下图:
OceanBase开源,11张图带你了解分布式数据库的核心知识

文章插图
 
此外,NewSQL还有两个改进:
  • 对于HA,放弃传统数据库的主从复制,使用Paxos、Raft等共识算法来保证多副本的一致性 。
  • 对于存储,使用LSM树模型替换B+树,写入性能更高 。
2 全局时钟2.1 线程一致性线性一致性(Linearizability)是分布式系统中最强的一致性模型,总体思想是保证读取多个不同副本的客户端,跟读取同一个副本读到的结果一样,即整个系统看起来像只有一个副本 。
先看两个不符合线性一致性的示例 。
2.1.1 同一个客户端如下图:
OceanBase开源,11张图带你了解分布式数据库的核心知识

文章插图
 
client1第一次读取了x的值是0,第二次读取时因为client3修改了x的值,所以读到了新的值1,但是第三次读取时因为读到了别的副本,因为这个副本还没有同步完成,所以读到了旧的值0 。
2.1.2 不同客户端如下图:
OceanBase开源,11张图带你了解分布式数据库的核心知识

文章插图
 
client1第一次读取了x的值是0,第二次读取时因为client3修改了x的值,所以读到了新的值1,但是在client1第二次读取之后,client2来读取x的值,因为读到了别的副本,因为这个副本还没有同步完成,所以读到了旧的值0 。
线性一致性要求,任何一个客户端读取返回新值后,后面所有客户端(包括相同客户端和不同客户端)读取也必须返回新值
下面这个图就是线性一致性的:
OceanBase开源,11张图带你了解分布式数据库的核心知识

文章插图
 
2.2 全局时钟从上面的描述可以看到,线性一致性是建立在事件的先后顺序之上的 。所有操作必须记录在一条时间线上,任意两个事件都有先后顺序 。但是,集群中各个节点都有各自的时间线,怎么实现时间上的顺序性呢 。这时就需要一个全局的绝对时间,就是这里讲的全局时钟 。
一般来说,从一台时间服务器获取时间,就可以实现全局时钟,但是必须保证高可用 。下面介绍几种全局时钟的实现方式:
2.2.1 TrueTimegoogle Spanner采用GPS加原子钟来分配时间,支持多点授时机制 。有两个明显的优势:
  • 多点授时去中心化,实现了高可靠 。
  • 支持全球化部署,这样可以减少客户端和时间服务器的通信时长 。
但是也存在一些问题:
  • 采用物理时钟可以出现时钟偏移和时钟回拨 。
  • 多点授时可能出现系统整体的时间误差 。
从Spanner的介绍看,时间误差在7毫秒以内 。
2.2.2 混合逻辑时钟(HLC)HLC(Hybrid Logical Clock),因为Truetime依赖于硬件设备来实现,实现难度大,所以有的数据库采用了混合逻辑时钟,即物理时钟和逻辑时钟配合使用,同样采多时间源、多点授时,所以也会有系统整体的时间误差问题 。


推荐阅读