一、OcceanBase是什么
以下是oschina的介绍:
OceanBase是一个支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务,由淘宝核心系统研发部、运维、DBA、广告、应用研发等部门共同完成。在设计和实现OceanBase的时候暂时摒弃了不紧急的DBMS的功能,例如临时表,视图(view),研发团队把有限的资源集中到关键点上,当前 OceanBase主要解决数据更新一致性、高性能的跨表读事务、范围查询、join、数据全量及增量dump、批量数据导入。 https://www.oschina.net/p/oceanbase
OcceanBase是淘宝开源的一个分布式关系数据库,以下是其官方地址:https://oceanbase.alipay.com/
二、OcceanBase的开发背景
我们来大概了解下淘宝为什么要开发这个数据库,在去IOE之后,淘宝核心场景都使用了Mysql,Mysql的好处是免费,并且可以运行在普通PC机上,但Mysql的扩展性是个大问题,虽然可以通过分库分表等中间件来做,但这些中间件多多少少有如下问题:
1、运维复杂 因为引入新的中间件,所以系统链路会延长,并且运维的工作量增加,需要对Mysql中间件做好监控,配置等操作。
2、扩容麻烦
现有Mysql中间件扩容都比较复杂,即如果某个表原来分成8张子表,现在业务量增大,需要再增加即扩充成16张表,整体过程操作比较复杂,需要运维、开发一起配合,并且可能有不少手工操作,整个过程工作量大并且容易出错,对于淘宝前几年业务量增长迅猛的情况下肯定就不适合了。
当然还有其他原因,但主要是以上2点。
三、OcceanBase功能介绍
我们看下Occeanbase有哪些功能:
1、兼容MySQL 协议
兼容MySQL 5.6 版本大部分功能;
因为现有业务大量使用Mysql,如果业务升级还要改代码,则升级就会有不少阻力,所以设计的时候就采取兼容的方案,这样业务方只改改配置就可以快速上线了。
2、分布式,可水平扩展
注意:扩容时不停机这个功能,这个主要就是解决上面说的问题2的。
3、高可用
基于 Paxos 协议,少数派故障,数据不丢,服务不停;
这个是趋势,Mysql官方8.0也有这个功能了。
4、强一致
5、高性能
四、整体架构分析
接下来我们分析Occeanbase的架构设计,是如何做到这么高性能,又强一致的。
先看下整体架构
RootServer:管理集群中所有服务器,及数据分布和副本管理,即元数据服务器;
UpdateServer:存储OcceanBase增量更新数据;
ChunkSerrver:存储基线数据,即不会变的数据;
MergeServer:接入用户请求,做完词法分析、查询优化等工作后转发给ChunkServer或UpdateServer;
可以看到,整个OcceanBase的计算和存储是分离的,MergeServer负责计算,ChunkServer和UpdateServer负责存储。
另外元数据是中心化的,这个也是目前分布式系统设计的趋势,只要元数据不要参与每一次请求,通过客户端缓存、增量更新等措施可以大大减少元数据服务器的压力。
OcceanBase独特的设计在于将增量更新数据全放到UpdateServer上 。
这个设计也决定了OcceanBase使用场景为一段时间更新不是特别多,像电商主要是写少读多,特别适合这样的场景。
这个设计有好有坏,好处有:
1、完美地支持分布式事务
因为修改只在一次,就不存在数据同步和一致性的问题,事务就可以很好地支持,这样的设计也是为了淘宝这样的场景:一段时间内写入不多,但又要求强一致性
2、大大简化系统设计
因为淘宝的场景是读多写少,在整体OcceanBase架构里写是单点,但读是可充的,即一段时间内没有修改,直接从ChunkServer返回,根本不用走到UpdateServer,而ChunkServer是可以水平扩充的,这样就可以在支持业务的条件下简化系统的设计,不用做数据同步,面对分布式锁等复杂问题。
当然这么设计的弊端也很明显,最大的问题就是单点,即整体系统写入都必须经过UpdateServer,但UpdateServer又无法水平扩容,当然OcceanBase做了很多设计来减少UpdateServer的负担,像读写分离,定期整理基线数据,这个后面慢慢分析。