蚂蚁金服近期开展的 “共战‘疫情’,技术破局”数字课堂线上直播系列演讲我们将整理并发布在 “蚂蚁金服科技” 头条号上,欢迎关注。
今天将全面解读OceanBase 2.2版本的核心特性,解析在异地容灾多活、在线数据迁移等场景下OceanBase的完整解决方案,以下为OceanBase团队的庆涛老师演讲整理全文:
大家下午好。我是来自蚂蚁金服OceanBase团队的庆涛,很荣幸能在云栖社区直播平台为大家分享OceanBase数据库的相关知识。OceanBase官网最近发布了2.2版本的安装包,大家可以免费下载获取。安装文件里面包含了两个重要产品,一个是OCP(OceanBase Cloud Platform)和OceanBase 2.2版本,其中OCP是OceanBase的自动化运维平台,这次分享打算分两期给大家介绍OCP和OceanBase 2.2的功能,以及OceanBase 2.2的运维和开发。
首先跟大家分享一下OceanBase产品的定位和发展历史。
一个常见的问题:很多人会问OceanBase数据库到底是什么?首先OceanBase和Oracle / MySQL一样,它是一款关系型数据库,但是跟Oracle和MySQL不同的是,它是分布式架构的关系型数据库。而且它是一款原生的分布式数据库,不是分库分表中间件架构的数据库。OceanBase数据库由阿里巴巴和蚂蚁金服完全自主研发,不依赖于任何开源项目。目前OceanBase的定位是一款商业数据库,主要用于替换Oracle和MySQL,在部分场景下可以替换DB2数据库。
下面为大家简单介绍一下OceanBase的发展历史。如今OceanBase已经有9年多的历史,我们的第一个业务是淘宝收藏夹,业务的特点是在上百亿的大表之间做关联查询。如今大家打开手机淘宝,这个业务其实依然是跑在OceanBase数据库之上。OceanBase的版本分为三个阶段,其中从0.4版本开始就在支付宝承担核心交易业务去O以及在网商银行承担全部的核心数据库。1.0版本后,OceanBase架构完全重构,兼容MySQL 5.6的SQL语法,从1.4版本开始逐步走向商用,第一家使用OceanBase的客户是南京银行。2018年9月,OceanBase 发布了2.0版本,OceanBase开始兼容Oracle的SQL语法,如今内部版本已经到了2.2.3。目前我们可以做到兼容70%左右的Oracle常用语法。
接下来为大家介绍OceanBase的几个重要的外部客户,目前网商银行全部的核心业务数据都在OceanBase上,南京银行的互联网核心业务,参照网商银行的架构搭建,也使用了OceanBase数据库。全国各地有越来越多的城商行、农商行、以及一些互联网保险、证券公司的业务,目前也开始在OceanBase上部署。
OceanBase能在金融行业扎根,除了有支付宝强大的业务场景背书外,还离不开OceanBase最核心的六大产品能力:
第一就是高可用。OceanBase的架构设计天然就是为故障容灾而设计的,它的数据至少有三副本,任何时候机器故障,只可能会出现局部的数据访问中断,并且会很快地自动恢复,恢复时还可以保证数据绝对不会丢失。这就是我们通常说的 RTO约等于30秒,然后RPO=0。这里30秒是包括故障探测时间。
第二个能力就是分布式架构,OceanBase数据库可以在线扩容、缩容、迁移、以及做负载均衡,并且整个集群可以异地部署,跨城市部署。成熟的方案有两地三中心和三地五中心。
第三个能力就是兼容Oracle和MySQL的常用语法。我们现在重点是兼容Oracle的语法。
第四个能力就是高性能,2017年,OceanBase支撑了支付宝双11大促活动,交易峰值达到每秒钟25.6万笔。2019年,OceanBase得到了国外权威机构TPC-C的认证,测试结果达到6088万tpmC,荣登性能榜首,是 Oracle结果的两倍。
第五个能力是低成本。OceanBase基于普通的PC服务器,只需要SSD盘、万兆网络,不需要小机,存储,还有光纤网络。
第六个能力就是多租户的能力。OceanBase使用的时候很像云数据库,但是它跟云没有必然的关系。在OceanBase集群里面,我们可以按需分配实例,还可以在线的资源扩容或者缩容。
那么接下来我来带大家详细了解一下OceanBase 2.2版本的核心功能以及背后的原理。
首先是集群,OceanBase集群架构至少包括三台机器,上图里实例是九台机器,机器会分为三个区域存放,每个区域我们称为一个zone,zone可以是小到一个机柜,机房,大到一个数据中心。三个数据中心的机器,整体上我们是做成一个OceanBase集群,每个机器都是普通的X86服务器,普通的SSD,万兆网卡彼此互通。
我们会在每个机器上面运行一个OceanBase的数据库软件,它是一个单进程程序,叫OBServer,每个机器上的OBServer进程的作用基本上是一样的,都包含两个模块,一个是SQL引擎、一个是存储引擎。整个集群里面会有一台机器比较特别,它会有一个RootService,我们称为总控服务。所以从这个架构图上来看,当9台机器全部运行了OBServer进程以后,在我们眼里它就是9个OBServer进程,它们组成了一个集群。
OBServer进程有一个特殊的能力,进程起来之后,它会把主机的绝大部分的CPU内存和磁盘空间资源占为己有。所以9个机器启动了OBServer进程之后,在我们的眼里的话就变成了9个资源单位,每个有30个CPU,200G内存、4T空间。它们组成集群就形成了一个超大的资源池子,270个CPU、1800G内存、36T空间。实际上这是所有的分布式数据库都要具备的基本能力,就是把各个机器的能力、资源聚合在一起。
那么接下来我们就看OceanBase集群的资源池,这么大一个资源池它怎么使用?这就要提到OceanBase强大的多租户能力。首先OceanBase会有一个内部租户,这个租户,也就是我们说的内部实例,主要是用于管理用的,它会占用少量的资源。15个CPU,60G内存,那么剩下的这些大部分资源就是未分配的,是留给业务用的。这时候我们来了两个业务,每个业务它会说我需要多少资源,那么在OceanBase里面就会划分出一块资源给业务使用,没有分完的,就留待给其他的业务使用。
从这里的设计可以看出,当我们的业务方需要一个数据库的时候,我们的运维人员在一分钟以内就可以把数据库创建好,运维的效率大大提升。
接下来再来看一下OceanBase里面数据分布的特点。首先OceanBase里数据的最小单位,不是表而是分区,但分区跟表是有关系的,我们说一个普通的表就是一个分区,像这里的t1表,表明它就是一个分区,我们给它编个号叫0号分区,所以这里写t1(p0)就表示 t1表的分区,但是一个分区表会有多个分区,像t3表、t4表的话,它就是分区表有0号分区、1号分区、2号分区,有三个分区。这些分区是分布在OceanBase集群任意的机器里面,没有固定的位置,这是第一个特点。
第二个特点是每个分区会有三个副本,副本就是指一模一样的内容,像 t1(p0),它也会有另外两个t1(p0),三个副本在角色上面会有所区分,我们通过颜色来区分,比如绿色的是主副本,我们也称为leader副本。黄色的是备副本又叫follower副本。默认情况下只有主副本提供读写服务,follower副本不提供读写服务,并且每个分区的三个副本一定是分布在三个zone里面的,我们横向看是三个zone。在OceanBase里有一个反向代理软件叫OBProxy,它的作用主要就是接受应用的SQL请求。收到SQL之后会把请求转发到主副本所在的节点上面,OBProxy后面还会详细的介绍。