OceanBase 高可用原理技术和实践

数据库是组织、存储、管理、分析数据的系统,是 IT 行业最重要的基础软件,目前各行各业所有的信息系统都需要使用数据库系统管理业务数据。数据库在软件和硬件之间起到承上启下的重要作用,是 IT 行业最重要的核心技术。

伴随着 IT 信息化、产业数字化的浪潮滚滚向前,企业的信息化建设经历了逐步发展、逐渐成熟、加速转型的过程。作为信息化核心的数据库,出现了百家争鸣、百花齐放的繁荣发展。特别是近几年,数据库技术不管从学术上到应用上,都得到了突飞猛进的发展。

此次墨天轮 2021 数据库大咖讲坛 ( 第 7 期 ) 活动中 ,竹翁老师为我们讲解了 OceanBase 高可用原理技术和实践,从核心技术、架构设计、发展趋势等角度,诠释解析数据库前端技术,通过落地行业实践,助力企业信息化发展,共同推送行业信息化建设。

直播视频回放地址:https://open.oceanbase.com/community/activities/1721825/review/800364

以下是本次直播中收集的问题,欢迎大家踊跃发言和学习~


hnwyllmm问:OB开源后,目前数据库内核主要研究方向是什么?

竹翁答:数据库内核一直在持续演进,包括HTAP混合负载支持,提升事务处理性能等很多方向。


王宇问:OceanBase 创造了7.07亿 tpmC 在线事务处理性能的TPC-C 世界纪录,那OceanBase能否在关键核心领域替代Oracle?主要有哪几个方面的原因?

obpilot答:OB除了把支付宝的核心的oracle替换掉了外,在外部传统领域,已经在保险(中国人寿)核心、运营商核心(山东移动、福建移动)开始逐步替换核心ORACLE。 银行核心也在替换过程中了,主要是替换 DB2 、ORACLE。


Zaki问:OB集群是怎么解决各个读写节点间内存的数据一致性?故障转移会做事务补偿吗?应用需要回滚当前事务重新建立连接么?

obpilot答:OB数据有三副本,读写默认针对的是主副本。主副本事务提交时,事务日志会在多数派副本里落盘成功后事务才算提交成功。主副本故障的时候,会选举新的主副本(这个新主拥有老主全部的事务日志),新主应用完所有事务日志后数据自然就跟老主故障前保持一致(未提交事务会回滚)。


Menkar问:OB为什么没有选择逻辑时钟?时间戳服务在实际中如何满足业务需求?

obpilot答:因为不需要。OB 有 GTS 。GTS不是逻辑时钟。GTS是一种集中式的时间戳服务。GTS本身实现了高可用,所以在可用性方面影响不大。性能方面,事务层做了各种优化,实测使用GTS还是local ts对业务性能几乎没有影响。


jieyancai问:zone_1,zone_2,zone_3如果同时坏了两个zone,这个集群是否还可用?业务就彻底瘫了吧?

obpilot答:paxos协议是这样的,多数派故障的时候集群为了保证数据一致性就不可用了。这个时候加上 OB 集群主备方案来弥补。


psufnxk问: OB关于ACID中的I使用的是什么级别?如何实现的?

obpilot答:OB 支持的事务隔离级别跟oracle是一致的。即使是mysql租户,ob也选择了oracle的隔离级别:rc 和 serializable 。


psufnxk问:读操作是读的Leader节点数据库吗?如果是的话,为什么不读非Leader节点的数据?如果不是的话,如何实现的?

obpilot答:OB里读默认是强一致性读,读主副本,强一致指写后读数据是正确的。OB数据有2个备副本,通过设置弱一致性读,也是可以读取备副本,可能数据不是最新的。这就是常用的读写分离方案。不过OB 还有只读副本可以用于专门的读写分离。


陈宇明:请问一下 OB主备 与 Oracle的主备有什么区别:

obpilot答:OB 的主备是对OB 两地三中心和三地五中心方案的补充。OB 主备的架构目标跟ORACLE 主备 基本一致(都支持最大保护、最大可用、最大性能)。


jieyancai问:oracle 远程 rac的架构 rpo不就做到0了吗?

竹翁答:做不到的。如果是最大保护,RPO可以做到0,但是此时每次事务提交都必须写入备库,那么备库如果发生了故障,主库就无法做事务提交,牺牲了可用性。