>>返回主页
浦发银行总行 资深数据库专家杨欣捷:《商业银行Oracle数据库DBaaS建设应用分享》

2018-08-14 14:30

杨欣捷.jpg

   大家好,刚刚龚总提到我刚刚接手Oracle的掌门人,概括下来将来怎么发展就是可能会失业,开个玩笑。

  我讲的东西和之前和之后的议题比起来比较异类,之前、之后都是开源技术,我今天主要讲的是Oracle,龚总也说了Oracle作为数据库的老大,不能不管,它的理念是怎么样的,不管我们技术有多大的区别,我们都是需要借鉴的。

  你听互联网公司讲数据库和云也好,随着互联网业务的爆发觉得Oracle不行了。这是一个伪命题,他们在换一些变动也好做了很大程度的应用重构,更多的是应用重构所带来的收益而不是数据库本身带来的收益,就好像一个人生病吃了十个药,可能有两个药是有效的,另外八个是安慰剂,把另外八个拿出来说是有用的。

  我们应对双十一高峰的时候就两节点的X86服务器,每台数据库的CPU还不到10%,在Oracle上面也可以轻易达到双十一的高峰值,而且我们用的硬件应该会少得多。

  我简单介绍一下自己,四年的运维经验非常重要,也是在运维要求更高的宇宙行做了运维要求更高的数据库运维,这个起点还是比较好的。到了浦发银行做了数据库,现在在浦发银行的数据中心,做了传统数据库架构体系优化,还有金融行业开源数据库治理这方面。

  首先讲讲什么是DBaaS,今天来会场的人多少对DBaaS有一些了解,我觉得了解更多的是对具像上的了解,比如什么产品提供了DBaaS,我们看看Oracle抽象出来是什么东西。首先有几个关键属性,共享、标准化、按需、快速获取,然后就可以称为XaaS。共享的话目的就是主要提高资源利用率,标准化是降低运维成本,不一定是运维,各种维护和使用成本,按需和快速获取相对于XaaS的核心价值所在,只要满足这三点很多东西都可以称之为XaaS,IT界的人看起来比较技术化,实际上还比较会发明新的词。

  这些在我们生活中早就有了,举个最简单的例子共享单车,它就是Bike As A Service,以这个做市场宣传,很多爷爷奶奶都不敢骑,不知道它是什么,觉得会有安全问题,人家还是比较亲民的。

  从Oracle的角度,这是Oracle原厂技术的图片,可以看到DBaaS就是在Middleware as a service这一层,Oracle作为数据库老大在这块确实想的比较早。

  关于Oracle DBaaS的演进,不管是叫DBaaS或者叫数据库资源池或者叫数据库云都是一样的意思,之前很多人在做它所达成的事情。最早最简单的就是虚拟机,虚拟机分布出来装数据库,也是相当于一定程度上的DBaaS。现在这种做法叫IaaS+,在IaaS层面上做自动化脚本。

  在共享OS上装数据库,在一个操作系统上建多个数据库。后面有专有Schema,稍微复杂一点,在一个数据库里面不同的应用拿不同的Schema,在Oracle里面有一个概念,相当于对上的集合,这个事情做的很早,我在工行的时候工行已经在搞这个事情了。可能是因为前面三种做的太多了,Oracle发现的确有市场需求,所以Oracle自己包装了官方DBaaS方案,就是叫多租户的方案,有CDB等等。整个的过程有一个东西被大家所忽视,有一个叫Policy Managed,这个技术做DBaaS是关键技术,这个后面会详细讲,现在大家很少谈这个技术。这是DBaaS不断演进的情况。

  为什么现在大家才去关注概念,之前大家都自己做过,但没有真正把它给大面积铺开,可能有很多的原因,最后想想为什么共享单车2016年才火起来,这是有很多的原因,比如说有移动互联网,没有移动互联网也不好玩,有GPS定位,有支付宝移动支付,当然也有一个反面因素就是堵车是越来越厉害,所以各种因素凑在一起才让共享单车火起来。如果没有这些因素的时候,也可以做自行车的共享,比如说100年前自行车刚发明的时候,大家在自行车上面捆绑一个小框,骑一次投一块钱,晚上把箱子里面的硬币收走,那时候也有人这样做,不是概念不行而是周边人没有做好准备。

  现在我们数据库面临同样的情况,虚拟机共享OS的时候整合度比较低,没有横向扩展的能力。Schema方式,隔离性有限,应用相关、无原生的快速发布接口,自服务能力差,多租户,有了命名空间隔离,有了权限控制,有了Policy-Managed Database,就有了灵活的调度,全面DBaaS的时机已经成熟了。

  时机成熟是一个关键,但是合理的规划和技术的应用才是DBaaS成败的关键,如果只是简单的技术堆砌,那也是不可行的。

  关于基于策略管理数据库,这方面相信大家做DBA或者按照DBA所写的操作手册肯定有一个印象,在DBaaS的时候大家都会说把传统架构勾上,不要勾云化架构,传统上DBA一定要牢牢控制在自己手里面,这个确实没有错,但是不是未来的方向。我上周跟Oracle的数据库掌门人交流过这个事情,他的说法就是基本上他认为五到十年之后DBA会逐渐失业,如果有什么朋友准备做DBA的,你要劝他不要做这个事情。所以我们认为DBA要赶紧转型,去拥抱新的策略管理的数据库的方式。

  这个主要的区别在哪儿呢?Admin Managed是做传统管道服务器的,这个大家都很熟悉。Policy Managed只是说我这个数据库给了特定的Server库而不是一个数据库,多对一的观念已经结束了,数据库永远对应到一个服务器池,这个其实就是应对的是数据库是在池中所有服务器上还是在池中一个服务器上。

  这个本质上是管理维度的上升,以前是管理维度在服务器上,现在是预先定义是一组服务器的优先策略,整个Oracle集群按照优先策略自动分配数据库资源。举个例子,这个不用到Oracle12,11的话我们已经在用了。举个例子,实际上服务器数量会多一些,我们把服务器分成dbd的Pool,这个只是我个人的定义,具体的是db1db2到一个服务器库,某一个服务器发生故障的时候就发生了漂移,每个库都有属性,Oracle会根据这些定义去做服务器的自动的分配。这个感觉和K8s的文件定义有点类似。

  创建数据库的脚本,主要是这个脚本就是用来自服务的,就是我们DBaaS的平台只要接受这么一个脚本就可以自动去创建服务,红色部分就是关键信息需要客户输入的信息。无非就是数据库的名字,到哪个服务器库的名字要输入。

  到了Oracle12C多租户的概念,多租户的概念和刚刚基于策略管理的数据库是什么关系呢?这块也是困扰了我挺久的一个问题,关于这个问题我也简单地跟Oracle的那边的人讨论过,基本上从他们的说法就是还是以12C的多租户为蓝本来做,具体的说法就是Oracle理解。我的看法是 Oracle理解就是这个在12C以后有一个大的CDB横跨了很多的Sever库,PDB骑在不同的服务器库下面,CBD跨越多个库,PDB只属于一个库,这样的做法我个人认为可能有一些资源的整合比较过度,因为整个这么一个不同的库实际上共用的东西相当多,包括每个节点的,包括整个数据直联。可能Oracle这么设计是为了18C自制以后能管理的比较好,至少这套东西现在我们用下来从维护的角度来讲互相影响大了一些,所以这套只是应用在测试环境上,还没有上生产,上生产我们用的多租户。

  从12C的方面来讲,就是创建这么一个DBaaS的服务就更简单了,只需要提供名字就可以了,PDB_DBA角色放出解放大量管理工作量,它的磁盘使用率也是可控的,以前的方式实际上多少个DB都是可以共用磁盘的。在12C的情况下,PDB在创建的时候就可以设立一个MAXSIZE,把PDB权限放出去也不会有太大的问题。它的问题也比较明显,就是过度整合、隔离性差。

  快速交付就是我们做的是收益,就是周到天,我们使用了DBaaS以后整个交付的周期明显变短了,本来是一天,可能因为银行里面沟通成本也比较高,整个交付可能要持续一周的时间,现在都是一些支付的窗口就可以交付。

  DBaaS收益,这也是我们开发环境反馈给我的数据,这是纯DB的角度来讲,从3小时缩短到5分钟,把环境准备时间算进去会更多,维护工作量也减少了,存储使用量也减少了资源,共享程度、标准化程度都得到了提高,备份方便我们统一管理,监控这块也是一样有所帮助。

  下一步的工作我们想了很多,因为Oracle从12C开始关于这方面有很多的改进,服务器库目前当成静态使用,但是实际上到了Oracle12C以后这个策略可以定义,一个是可以根据不同的标签定不同的库,我们觉得这台服务器I/O比较好,可以贴上I/O比较好的标签,分配服务的时候是可以考虑这个情况的,另外这个库是可以根据时间窗口动态变化的,比如我可以预先定义好晚上,因为晚上和早上不一样,晚上跑批的应用多一些,有一些服务器会自动飘到跑批的业务里面来,白天那些服务器会自动飘到连接交易里面去。可以看出Oracle的DBaaS已经想的非常细了,比如用的人不多,但是深究它的话功能还是比较强大的。后面一方面就是要细化服务器库的特性,探索动态的Policy,我们要把自服务这块做的更好、更友善一些。

  这个是开源DBaaS的技术,这是盗图,是龚总的图,这个图很不错,基本上把开源的DBaaS的技术栈全部给描述出来了,这个不一一去讲了,这个栈基于容器、加容器编排,加上开源数据库。后面做开源DBaaS的时候我们也会依据这个框架来做,可以看到里面还有很多已有的东西,开源很多觉得不怎么完善的地方可以主动地进来完善这个事情。

  我自己画了一个Oracle DBaaS技术栈,技术都是相通的,几乎在开源技术栈在Oracle DBaaS里面都有对应。首先CMP管理平台这块,它好不好不说,我是觉得这个东西越做越好,但是定位就是CMP的定位。从右边的多库支持的角度来看,Oracle现在有12C,我相信这块的需求比较大,后面会有新的东西会出来。在底层那一条可以看到有Container Runtime,在Oracle这边就是CDB,PDB就是去跑的东西,运行环境就是CDB。Network做的好一些有GNS的服务,Storage大家很熟悉了,是ASM,,Image Registry,就是Seed/PDB Clone,最重要的一块有状态的就是服务编排这块,Oracle是有对应的,编排层就是整个服务的管理层就是Stateful Service Orchestration。有ServerPool做服务器的统一管理,还有一些管理工具,有Policy Managed DB,还有Service,还有对外访问的接口,还有FAN/TAF做持续连接的管理,基本上都可以找到对应。

  简单做一下开源跟Oracle DBaaS的对比,首先隔离级别或者说共享级别,可以看到之前谈的是虚拟机还是容器,大家都说了容器的性能更好,因为它更贴近上层,不需要虚拟机操作系统,它共享的就是Redo,命名空间隔离、数据文件隔离。Oracle推行的DBaaS从隔离来讲更像容器,相当于进程共享,连内存都共享,共享的SGA,Oracle的服务调度整合度更高,这些事情尽量都想在DB层面做到,可以看到整个DB就像大的OS一样,对外暴露出不同的PDB的访问接口。

  弹性实现,Oracle这方面是RAC,Sharding和GDS,开源DBaaS有MyCAT、DRDS、HotDB、DBLE。服务调度,现在相对很火的,在Oracle里面都有差不多的对应,Server就是对应K8SNode,Service对应的K8S的Service。

  其实通过讲这些,大家可以看到,OracleDBaaS这个概念很早就兴起了,而且功能叶比较强大,为什么感觉现在用的人不多,我觉得这块我个人简洁就是一个开源的力量,实际上我在挺早以前,我就想做OracleDBaaS这个东西,2013年多租户已经出来了,但是到现在我现在了解到也没有几个传统的做这个实践,我个人很想用这个东西,想尝试用,用的人少就坑多,原厂不熟悉,然后就不推荐用。K8S我理解是晚于Oracle的,确实有这个需求的话至少有源码可以自己研究,出了问题可以有一条路,我可以深入源码,可以做一些优化,并且回馈社区,形成一个良性循环。这就是开源和商业性质上的区别导致了开源界的DBaaS,为什么今天下午有五、六个开源界的DBaaS,就是这个区别。

  我基本上就做这些分享,谢谢大家。

 

0