蚂蚁金服近期开展的 “共战‘疫情’,技术破局”数字课堂线上直播系列演讲咱们将整理并发布在 “蚂蚁金服科技” 微信公众号上,欢迎关注。
今天将全面解读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进程,它们组成了一个集群。
那么接下来咱们就看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后面还会详细的介绍。
咱们来看另一个问题,三副本的内容是怎么保持同步的?好比说t1(p0)有三个副本,默认只有主副本提供读写。它们之间的同步是靠主副本上面的事务日志,也就是clog。当主副本上一个事务要提交的时候,它会把clog同时发给两个备副本。而后三个副本会把日志持久化到磁盘上,当三个成员里面,绝大多数成员把这个事务日志写成功以后,主副本上的事务就能够提交了。这里协议使用了Paxos协议。
除了保持数据同步之外,当主副本出现故障时,OceanBase会自动的从两个备副本里选出一个新的主副本出来,而且会保证新选出来的主副本拥有所有的事务日志,因此数据是不会丢的。OceanBase的故障切换的力度很细,它是分区级别的,因此咱们不会说某一台机器是主某一台机器是备,从这个图里面咱们能够看出来有5台机器有主副本,凡有主副本的机器均可以提供服务。当你的业务表不少的时候,每台机器上实际上均可以有主副本,因此OceanBase的机器是没有主备概念的。
接下来咱们详细的讲解OBProxy的功能。OBProxy的功能其实提及来也很简单,它就是只作SQL路由,不参与运算。当收到业务的SQL请求,分析出里面要访问的表,而后找到表对应的分区的主副本在哪一个机器上面,就把它转发过去,取出数据以后原路返回。对于用户来讲,OBProxy就是OceanBase数据库的一个代理,因此OBProxy的可用性很是重要。一般状况下咱们会部署多个OBProxy,而后把它们挂在用户已有的一个负载均衡设备上面,好比说F5上面,而后F5提供一个VIP给业务用,但F5的高可用是靠自身的备机去提供。
这里顺带提一下,除了OBProxy有路由功能之外,OBServer自身也是有路由功能的。
接下来咱们来看一下OceanBase的SQL兼容性。
前面说OceanBase支持多租户,它能够兼容MySQL或者Oracle,实际上只能2选1不能同时兼容。下图左侧是MySQL经常使用的SQL功能,右侧是目前实现的Oracle经常使用的SQL功能。就Oracle功能这一块,如今是重点发展的方向。
数据类型的话,咱们已经实现了75%的类型和86%的函数。存储过程也支持了很多功能,有些场景下业务客户的存储过程是能够平迁到OceanBase上的。在事务方面,OceanBase支持两种事务隔离级别,一个是读已提交,还有序列化隔离级别,这点是跟Oracle一致的。
OceanBase支持跨节点的分布式事务,内部原理是两阶段提交,强一致的,而且这个事务对业务是透明的。使用的时候,业务只要稍微注意一下额,这个事务必定要及时提交,以免长事务在OceanBase里会超时报错。此外,OceanBase还支持自治事务。
下面为你们介绍OceanBase相关的解决方案。在OceanBase的周边生态产品中,除了OceanBase集群外,咱们还开发了一款OceanBase运维平台——OCP(OceanBase Cloud Platform),这款产品的目标就是让运维人员绝大部分的工做均可以经过运维平台来自动化完成。
第二个产品是OceanBase开发者中心——ODC(OceanBase Developer Center),面向开发人员,目标是让开发人员能经过这个平台去链接数据库,而不用直连数据库,这样咱们能够控制权限和审计功能。
第三个就是OceanBase的迁移服务——OMS(OceanBase Migration Service),咱们重点看一下OceanBase的迁移服务。为你们分享一个客户案例,某银行有一个Oracle业务,有一个MySQL业务,咱们如今须要把它迁移到OceanBase上来。刚开始的时候客户应用是读写Oracle和MySQL,而后咱们部署OMS以后,就把Oracle和MySQL的数据分别同步到OceanBase的Oracle租户和MySQL租户。这个时候业务是不停的,这个同步是实时同步,它会同步增量。当增量追上的时候,咱们再寻找一个业务低峰期的时候,让业务短暂的停写原来的数据库,这个时候OMS能够对两边的数据作一个全量的校验,确保两边数据是一致的,而后再作决定,即切换。所谓的切换就是OMS把数据同步的方向给调整一下,从OceanBase同步回原来的Oracle数据库,这时候客户的业务再把链接指向新的OceanBase数据库,那么这样的一个切换过程就完成了。这里咱们会把OB的数据同步回Oracle,这个是为了方便回滚,一旦客户决定再切换回去的时候,咱们只须要把这些操做反过来作一遍就能够。一样的在回切的时候,咱们依然要两边作数据校验,校验一致以后,咱们再把同步方向返回来应用,把链接改回去就能够了。
OceanBase的容灾方案经常使用的就是两地三中心。两地三中心中整个集群是三副本架构,分布在三个机房,其中同城两机房,延时是2毫秒,异地机房延时是7毫秒。任何一个机器或者机房故障的话,数据库的服务均可以很快的恢复,而且保证不丢数据。固然有个缺点,故障以后写性能会降低一点点,若是应用不能承受性能降低的话,咱们一般会作5副本,也就是三地五中心。
最后咱们来总结一下OceanBase的几个核心关键字,低成本、高可用、可扩展、高性能的分布式关系型数据库,同时它又像云数据库同样,而且适合金融行业的异地容灾和多活。OceanBase目标就是作一款分布式的Oracle。
PPT下载:https://files.alicdn.com/tpsservice/e099a7f95bca0aa3f6707c79f782093d.pdf