1

“小强show科技”,不一样的感知,展示科技带来的魅力生活。感谢您的阅读!

前言

OceanBase是阿里巴巴和蚂蚁金服完全自主研发的通用的分布式关系型数据库,定位为商用企业级数据库。金融级别的可靠性,目前主要用于金融行业和其他行业。

OceanBase目前主要有1.x和2.x两个版本序列。1.x版本兼容MySQL常用语法,2.x版本以兼容Oracle常用语法为目标。OceanBae支持多租户,即在一个OceanBase集群里会划分出多个租户(即实例),而租户的类型是兼容MySQL或者Oracle。业务方使用的只是租户(实例),是集群能力的一个子集。在使用体验上会感觉租户像MySQL或Oracle,但又不完全一样。OceanBase并不是在重造一个MySQL或Oracle,而只是在功能接口上兼容它们,在底层架构上,不管哪种租户都有分布式能力。

OceanBase是什么?

Oracle软件是多进程程序,启动后会开辟一块共享内存。Oracle部署形态有单实例、集群RAC、主备Dataguard。MySQL软件是单进程,进程名叫mysqld,有的还会有守护进程mysql_safe。MySQL的部署形态有单实例、主从单向同步或主主双向同步和MySQL Cluster(用的比较少)。

OceanBase的软件是单进程,名字叫OBServer。OceanBase是分布式数据库,集群部署,通常每个机器(后面统一称为节点)上会启动一个OBServer进程,各个节点的OBServer进程组成一个集群运行。虽然应用可以直接访问任意一个节点的实例,但不推荐。

通常是在OceanBase集群前面启动一个或多个反向代理OBProxy。OBProxy只负责数据路由和传输,不涉及到数据运算(如连接、统计、合并或排序等)。OBProxy的作用类似Oracle的监听程序,不同的是数据返回的时候也是从OBProxy回去。这个以后再专门详细介绍。对于业务而言,OBProxy就是数据库的代表,可用性也很重要。所以一般会部署多个OBProxy挂载负载均衡设备或软件下面以VIP形式对外提供服务。

OceanBase的开发

锁、事务和超时机制

OceanBase的租户兼容MySQL或Oracle,常用的数据类型和语法都还支持。这点使用没什么问题。需要注意的是在锁和事务方面。

OceanBase的锁是行锁,也有表锁,但是没有锁升级策略。OceanBase的事务都有版本号,类似于Oracle的SCN,读默认是快照读,不阻塞写。OceanBase的事务隔离级别目前只支持读已提交(RC)。如果要规避不可重复读问题,则需要在读上加锁(支持SELECT ... FOR UPDATE)。

在租户内,如果事务修改的分区跨越节点了,就是分布式事务,OceanBase目前也是支持的,原理是两阶段提交,强一致。业务感知不到也不需要知道这个是分布式事务。如果业务事务跨越了租户边界,则这种分布式事务需要借助于分布式事务中间件产品解决。

OceanBase针对慢SQL有个超时机制,以防止慢SQL占用数据库资源,默认时间是10秒。慢SQL不仅包括查询慢的SQL,还包括SQL自身性能没问题但是被阻塞的DML SQL。在MySQL里对于锁等待也有超时机制,对于慢SQL也有强制中断机制(默认没有启用)。

OceanBase对于长事务(长时间不提交)采取的是强制超时机制,默认时间是100秒。由于OceanBase没有UNDO,并且事务未提交之前,Redo都在内存里,所以大事务会占用一定内存资源。

这两个超时参数都可以调整。调整为很大时效果就等同于不干预,跟Oracle/MySQL就一致了。我们并不建议简单调大。慢SQL和长事务是业务设计问题,需要业务层面尽可能的解决。

SQL调优

OceanBase的SQL执行设计参照了Oracle的设计,有硬解析、软解析,有执行计划缓存。执行计划目前也很丰富,连接算法有嵌套循环、哈希、归并连接、半连接(semi-join)、anti-jon。支持左连接或右连接,子查询等,支持SQL改写等等。这块以后再详细总结。

查看执行计划的命令是explain,这点跟MySQL保持一致(简洁)。

OceanBase提供一序列内部视图(gv$视图或v$视图)用于诊断性能。这点跟Oracle的性能视图比较类似。

同时OceanBase还有一个视图gv$sql_audit拥有集群执行过的全部SQL,无论SQL是否成功还是失败。从中可以查看SQL的执行时间、节点、执行计划类型、报错代码、执行时间、等待时间、读取块数、返回行数、影响行数等等。

更值得一提的是OceanBase也实现了Oracle的Outline功能,能在线干预执行计划。如调整连接算法、顺序或者索引等。对于那些不可调整的慢SQL,为了消除它的影响,Outline支持对该慢SQL做限流处理。如强制串行执行等。

最佳贡献者
2

我一直说任何技术只有真正落地执行才是好技术,阿里巴巴的技术就是这样,大家看上去好像没有特别强,但是每一个技术你都能在阿里系找到应用场景。阿里先在自己的核心业务上用,用好了没问题再给你用,就像阿里云一样,阿里系所有核心业务淘宝、天猫、支付宝全在云上,你还怕什么呢?大不了要崩一起崩!

OceanBase是全世界最牛的金融支付数据库,支撑着全世界最大的电商流量洪峰天猫双十一的整个支付服务,可以说是全世界实战经验最丰富,也最为成功的金融支付数据库。写这篇文章时,刚好看到OceanBase通过阿里云向全世界宣布开源,有支付宝的平台效应和天猫双十一的实战背书,OceanBase有望成为全世界最成功的商业化金融支付数据库。

OceanBase与其他数据库的区别以及六大特性

数据库发展至今天,似乎关系数据库依然是主流,尽管Google、Amazon、Facebook都在推动非关系数据库向前发展,关系数据库依然是全行业使用最多的数据库。在中国互联网行业的实践证明,关系数据库依然可以应对超海量数据需求,而且能够很好的完成这样的需求。

OceanBase跟Oracle和MySQL一样,都属于关系数据库,不过OceanBase是一款基于分布式架构的关系数据库,还是一款原生的分布式数据库,并不是分库分表中间件架构的数据库,是由阿里巴巴和蚂蚁金服自主研发、完全不依赖于任何开源项目的数据库产品。2019年OceanBase得到海外权威机构TPC-C认证,测试结果超过6088万tpmC,登上行业性能榜首,是Oracle的两倍。

OceanBase有六个特性,分别是强一致、高可用、高可扩展、高性能、高度兼容、低成本。现在已经搭建起OceanBase数据库、OceanBase云平台、OceanBase开发者中心组成的三位一体技术和应用生态。

你不知道OceanBase,你还不知道双十一吗?

2019年天猫双十一狂欢节96秒破百亿,24小时总成交额2684亿,支付宝交易峰值54.4万笔/秒,我相信懂技术的都知道这几个数字意味着什么,尤其是支付峰值。天猫双十一的技术难度,在行业里面可能仅次于12306和春晚红包大战,也就是说天猫双十一也堪称是技术圣战、行业技术巅峰之一。

去年双十一,阿里巴巴集团和蚂蚁金服集团内总共有49个技术团队参加决战,双十一的核心系统完全实现了向阿里云的迁移。这其中支付宝技术团队作为影响交易体验最重要的一环之一,起到了举足轻重的作用。

每年到了双十一,马老师的天猫就要掏空妹纸的钱包,更要命的是,马老师还想要掏空妹纸男朋友或者老公的钱包,双十一的时候你要买东西,就要用到支付宝呀,用到支付宝,就会涉及到支付宝背后的OceanBase,这个数据库默默地在背后算计怎么掏空你的钱包,这些都需要很强的技术做支撑,要知道支付宝背后可是有几亿用户。

举个例子哈,你双十一用淘宝天猫买东西吧。天猫先得想办法给你一堆折扣券,然后再想办法给你一堆满减券,平时的天猫积分也可以抵扣一部分现金,很多人想到这里,可能会想,好像所有的技术难度都在淘宝技术团队上,这些所有规则最终都会运算好了以后才会提交支付宝。事实上不是这样的,淘宝分流难度远远低于支付宝的分流难度,支付是交易最重要也是最后一个环节,一旦出现错误,或者出现退款,就会十分麻烦,影响整个交易的完整性。支付宝还有各种支付产品,你可以选择多种支付途径,支付以后光确认支付的方式就有很多种。

回到最后,大家也都知道Google和百度技术很强,他们的很多技术就算是不懂技术的人也会觉得很强,像百度和Google的无人驾驶技术,确实很厉害,可是阿里的技术就是给大家一种放心的感觉,第一是阿里自己有应用场景、人家做人工智能先在淘宝“拍立淘”先用起来,第二是他们自己先用,用好了再给大家伙用,谁都会很安心。

3

某部委人士指出“OceanBase测试指标虽高,但在关键领域仍不能使用”、“互联网和银行场景完全不同”、“不能支持跑批”。

OceanBase完全不兼容Oracle,分布式数据库性能尚待证明。结构上更像是一个数据库存储而非完整数据库,替换Oracle缺乏理论支撑和实践证明。

为什么说OceanBase在关键领域不可能替代Oracle

2019年10月9日,某部委人士在公开会议上指出,“OceanBase测试指标虽高,但在关键领域仍不能使用”、“互联网和银行场景完全不同”、“不能支持跑批(批处理业务)”。问题本质是“什么样的分布式数据库在关键领域可用”?

从用户的角度,答案很明确,兼容Oracle功能且满足性能要求。兼容Oracle,意味着“不改造应用系统无缝升级模式”,用户责任小,风险低。满足性能要求,意味着业务可运行。

那OceanBase是不是这样一个产品呢?

先说Oracle的兼容性:

数据库核心功能,OceanBase在分布式架构下,不兼容Oracle的存储过程、触发器、视图、多表关联、大表关联等常用数据库核心功能,需要通过大规模改造应用系统来弥补功能缺口,工程繁复,且不保证改造一定成功;

隔离等级,OceanBase不支持Oracle的隔离等级“可重复读”,存在不可知数据错误风险及高失败率;

锁机制,和Oracle严苛锁机制相比,OceanBase是松散锁机制,在有数据冲突的金融场景,必然导致跑批(批处理业务)中断,存在业务连续性风险;

结论:OceanBase完全不兼容Oracle,其缺口源于结构性差异,不可能通过适配解决。

再说性能,分布式数据库性能的关键是处理分布式事务的效率:

两次tpc-c测试,分布式事务均不是由OceanBase数据库完成的。按tpc-c规则,存在随机15%和1%跨仓交易,如果完全随机,总交易量的6.896%,即8小时共有520.017798亿个交易,成为跨数据库节点的分布式事务。蚂蚁金服披露“OceanBase1557节点集群时,压测tpmC/理论tpmC=0.987”,集群与单机相比性能0损耗,即分布式架构却完全没有分布式开销,显然tpc-c测试里的分布式事务不是由OceanBase数据库节点完成的。

2019年6月,中国信通院和中国软件评测中心搞过一次分布式数据库的公开摸底考试,不允许大规模修改应用系统,OceanBase性能不佳,没有进入复试。

支付宝场景,有专业人士认为:“网络支付场景,更多是连接,而资金的清算早期在商业银行,现在在人行网联平台,而非支付公司。相反,说明银行的核心系统大有进步。”支付场景与金融场景差异明显,OceanBase分布式事务能力仍需证明。

OceanBase多个外部测试场景,目前均未见到OceanBase单独完成分布式事务,更多是由应用系统分担,OceanBase作为数据存储。

高斯分布式数据库与OceanBase同属一类,实战效果不佳,已下架。

小结:没有直接证据证明OceanBase分布式事务处理性能。

综上所述,OceanBase完全不兼容Oracle,分布式数据库性能尚待证明。结构上更像是一个数据库存储而非完整数据库,就像没有发动机的裸底盘,替换高端整车Oracle缺乏理论支撑和实践证明。

以上观点均可快速验证,当众迁移一简单Oracle系统即可,如某标准OA。

4

阿里出品,必须烂尾,阿里开源项目,后期都不会更新了

你的回答

单击“发布您的答案”,即表示您同意我们的服务条款