>>返回主页
中国银联信息总中心 数据库团队负责人曾玉成: 《金融生产级数据库容器云平台》

2018-08-14 13:30

曾玉成.jpg

  大家下午好,我是来自银联的曾玉成,我今天给大家分享的主题是基于容器的金融数据库云平台DBaaS实践,这是我们今天这个主题有状态云的很重要的一个数据库的情况。

  我今天分享主要有四方面:

  第一,   我们为何会走做数据库云化这个方向?

  第二,   我们在走这个方向的过程当中一些解决方案。

  第三,   我们在做的过程当中碰到的一些问题和经验。

  第四,   我们这个产品和平台后期的一些远景规划。

  在一些金融行业里面或者是传统企业里面,都是关于Oracle数据库的,比如商业数据库或者商业的服务器,在产品设计上也是集装式的架构,运维就是手工和脚本形式运维。

  为什么会慢慢引发到这个地方来呢?

  第一,   是在一些开源技术的推动和国产化的要求下,这些几年国家也在强调自主可控,要做国产化这块。

  第二,随着技术架构的发展,现在的技术发展慢慢出现了微服务化,分布式化、平台化这样一些特性。在这样一个发展趋势下,加上业务上的需求驱动, Mysql、Hadoop等慢慢就用起来了。结构慢慢由集中式走向分布式的特性,走向了开源自主可控的这样一个发展。

  这是我们觉得在传统金融行业里面技术发展的一个趋势,我相信大部分的企业都在这个过程当中。

  具体到银联发展这块业务驱动,首先我们刚开始主要是做一些POS、ATM,是传统的现象服务。随着移动互联网业务的快速发展,比如很多Pay的APP,更多呈现的是互联网的业务特点,有一些大规模的用户,要求快速响应、要求比较弹性、灵活。需要做有更高的交付能力、更高效的资源利用、更灵活的弹性调度以及大规模的高效管理的产品,要求我们技术适应这块的发展。

  所以我们就要想办法找到一个解决方案,怎么来解决我们大规模的这种服务能力的这套技术方案。很重要一点就是在弹性这块,做技术的应该很清楚,最难做弹性的就是数据库,因为跟数据相关,要做好弹性首先就要把数据库做好。所以,当时就想到类似做快速交付的平台,DBaaS的平台,这个平台有几个目标:第一要有分钟级大规模交付能力、灵活的资源弹性调度能力、高效的资源利用率、服务安全可靠;以及具备大规模、多中心的服务管理能力。

  确定好目标以后我们怎么做呢?在2014年的时候,我们做了一些平台性的东西,主要是做了一些自动化的工作,把手工脚本的工作做成了平台的点对点的自动化。当时,我们做了第一代的DBaaS平台,做了多租户隔离等等一些,同年还做了弹性管理。

  2016年我们想把容器和数据库结合做一些事情,当时大规模的应用都在应用场景里面,数据库和容器化结合是非常非常少的。在网上流行的一些文章都是数据库未来容器化的七个理由。同时我们也看到容器这个东西带来了它的很多的好处的,如果这两个结合起来的话,对于数据库大规模的部署管理和弹性调度这块是一个非常大的一个好处,所以我们开始调研,做一些测算,就做了一些方案。2014年的时候我们就开始做这些方面的调研。

  2015年我们拉富麦一起做了一些POC的测算,当时觉得容器化确实不成熟,他们讲的也是很有道理的,为什么?在数据库方面我们面临最大的问题,就是怎样提高数据库的响应能力,在原来的容器的体系底下,更多的是一些无状态的,数据量不大的情况下的场景设计。在大规模的网络交互的情况下,性能非常差的。后来我们想只有把它改进,使之适应数据库,于是决定去做这个事。

  一年多的时间,2015年我们终于把基于其的DBaaS做出来了,2015年直接上了我们生产的环节,而且是应用于生产的很多核心的业务。在这个版本里面,基本上基于我们容器的框架去做。当时选择的是Swarm做的,主要是由银联定制的MySQL跟MySQL定制的数据库。这个版本实现了分布式化弹性管理的一些特性。

  这个我们叫金融级数据库的PaaS平台,为什么是说金融级的呢?这里面有很多结合金融场景的一些设置,其中包括提供的服务UPSQL和UPREDIS,是针对场景定制的东西。目前已经可以做到自动可控、弹性伸缩等等功能。在国内金融行业里面据我了解是我们是第一家,我们是2015年底到2016年初在生产环境下大规模部署的。

  用Docker分装数据库有五方面的问题需要解决:第一,选择什么容器管理框架,因为容器管理框架也挺多的。有状态服务的网络模式应该怎么做?存储管理模式怎么去做?集群服务管理能力,规模应该是集群组成的服务,这个集群服务本身的平台不提供这些东西的,你要自己去管理服务集群的能力。另外还有横向扩展方面。

  关于容器管理框架,我们为什么选择Swarm而不是K8s,当时不管是Swarm和K8s两种方案都不行,当时为什么选择Swmarm,因为是轻量级的容器框架,开发难度低一些,当时在K8s流行的情况下选择了Swarm,不管做哪个我们都要自己开发,把我们已经实现好的解决方案用K8s的方式集成出来,这两种我们都可以支持并且落地。

  关于网络方面,有状态服务区别于无状态服务非常重要的一点,就是怎么样把网络和存储这块的解决方案解决好。在传统的Docker的网络模式下,要么就是安全不行,无法提供独立IP,另外就是数据库损耗比较大。有没有办法网络安全隔离,而且是没有损耗的,而且支持大规模部署的,当时我们就找到SR_IOV的硬件虚拟化的技术,这也是网卡上的功能,可以把王扩虚拟成180颗物理卡,把这些物理卡怎么给容器独立使用,在上面做QOS隔离这块,我们把这套方案做出来了,实际的效果是这套技术非常好,可以解决有状态服务的情况下网络的需求,而且物理环境下是无损耗的。两块物理卡虚拟128,在里面挑两个VF,在里面做,端口都是一样的,可以提供网络性能的保证。

  而存储这方面是金融行业里面有区别于其他的一些互联网公司的做法,这里比较重要的是我们做了存储管理的Plugin,可以把金融行业的储备用的扇存储做起来了。

  在大量的虚拟化、容器化做隔离这方面,存储做的是不好的,但是用了三个存储,有天然的隔离性,这完全是可以隔开的,所以是满足了这两个比较好的特性。所以我们做了这样一个存储管理的管理器,既可以支持SSD,又可以支持SaaS盘,也可以支持存储,可以根据你的业务需求选择存储,去做这个动作,所以我们专门做了StorageMGM,很好地解决了存储的选择。我们应用场景里面大规模应用了扇存储。

  我们的SSD也是针对不同的场景选择不同的存储。

  另外我们自己定制了UPSQL的数据库,是银联定制版的MySQL,是结合我们金融行业要求去做的,比如在国密算法这块,还有一些复制容错这块,复制容错这部分是大家碰到很头痛的问题,还有高并发及复制性能优化,我们在这块也做了很多的定制。同时我们还做了Proxy层,这个是基于中间件的一个数据库的分布的解决方案,提供分布式数据库解决方案,这是我们自己研发的叫分布式数据库的中间件,我们现在已经实现了在生产环境实施投产,云闪付、扫码系统这块都已经应用,还有微信无卡的重要的接入系统我们都是用的这个系统。

  在安全方面,我们有黑白名单、国密算法,SQL监督,都是我们定制的。

  我们定制的缓存,也是完全分布式的架构缓存,这里面也是有一些特别的场景,比如说在安全方面,因为在金融环境这块讲究安全,所以定制了很多安全的功能。这是在我们平台上提供的服务,提供的都是自主可控的。

  DBaaS平台我们做了有两、三年了,我们觉得做下来也是有一些挑战和需要有一些投入的,从技术上来讲,这是一个新技术,一些传统的我们企业里面大部分接触到的都是一些传统的技术,现在新出现的技术可能是相关的一些技术储备这块还是有一些欠缺的,这个是需要在人力要做好规划。

  在管理上,因为平台化、云化是分布式架构底下,一些管理方案和措施还是要针对一些特点去做一些调整,比如说有一个总的意识,就是这个模块每个里面都是不可靠的,你在设置上要去满足它,可以允许启动任何一个节点。

  在应用场景上,我们这个平台,平台新上线的系统都是在DBaaS平台上的,创新业务和重要的业务都是这样的,我们做的规模也是很快的。现在我们是北京和上海的中心都是部署的,托管都是基于这个提供服务的。

  我们现在做中心级的灾备,将来要实现灾备业务,我们平台可以快速地提供灾备解决方案,帮助你实现双中心和灾备数据,我们现在灾备方案已经做完了,现在马上要上线了。我们的产品会不断地丰富,同时在纵向、服务这方面,我们在做智能化,数据库上去了,我们怎么把它管理好,做一些智能化的分析,同时做一些自动化、智能化资源弹性调度,包括现在搞活动的弹性调度,一分钟之内比如提交多少服务,一个小时之内提供一千套服务能不能做到这一点?这是我们马上要实现的东西。

  以上是我的分享,谢谢大家。

0