2019年10月31日~11月2日,由 IT168 旗下 ITPUB 企业社区平台主办的第十一届中国系统架构师大会(SACC2019)在北京成功召开。本届大会继续沿用四大主线并行的演讲模式,设置业务系统架构设计、大数据平台架构设计、数字化转型实践和开源架构设计四大主线,为广大参会者提供了一场最具价值的技术交流盛会,深得参会者好评。
达梦公司北京公司副总经理(技术负责人) 郭一兵
武汉达梦数据库有限公司(以下简称“达梦公司”)作为国产数据库领域的推动者,在本届大会中进行了精彩议题分享,演讲嘉宾是来自达梦公司北京公司副总经理(技术负责人)郭一兵,其拥有十年以上数据库研发、产品规划、架构设计和咨询解决方案等丰富经验。拥有多个超大型业务系统去IOE化、数十个国家部委级数据库项目建设经验,带领团队实现了达梦数据库在国家电网、中国神华、中国铁建、中国民航等重大行业的核心生产系统中的广泛应用。目前致力于达梦数据库核心技术研究及达梦数据库的推广工作。
摘要:
提到达梦,相信很多人都会有所了解。作为中国数据库自主原创路线的坚定践行者,达梦公司产品已成功应用于金融、社保、民航、电力等众多行业。本次的分享从达梦数据库的关键技术演进过程出发,对国产数据库的技术发展和推进经验进行了总结,重点突出新一代自研数据库DM8及分布式数据库的相关内容,并对国产数据库未来的发展方向进行了相关展望,以下为郭一兵的演讲实录:
大家好,今天我给大家介绍一下达梦数据库推进的实践与思考。
首先我先简单介绍一下我们达梦公司的情况和产品。然后说一下技术的路线发展,再重点介绍一下DM8,也就是我们今年推出的一个新产品。
达梦公司是做国产数据库的,企业愿景是坚持原始创新、实现产业报国。这是我们公司的四个历程:
70年代末,华中科技大学的冯裕才教授带领一些学生研究数据库的理论,当时更多的是兴趣爱好;到1989年,在华中科技大学成立研究所,开始了产品的研究;到2000年我们由研究所进化成商业公司,进行了成果的转化,一直到2012年,在这个过程中国家持续对我们进行支持;到2013年之后,我们通过市场运作模式,进行全面市场化竞争。
接下来是我们产品的发展历史,从1992年依托华中科技大学成立研究所,到发布DM1、DM2、DM3,这些其实是一个产品的不断升级迭代。
后期又有DM4、DM5、DM6,中间有一段时间是在2000年之后,是开源数据库的兴起时期,对原来达梦的数据库产生了很大的冲击,对此,达梦坚定走自主研发路线,并不断提升自身能力,推出了满足市场需求的产品。2012年我们推出了DM7,当时Oracle作为事实上的数据库标准,依据于市场需求, DM7功能实现全面对标Oracle。
今年我们推出DM8,DM8在DM7的基础上进行了性能优化,在功能方面主要增加了透明分布式,因为分布式现在在金融领域的应用越来越多,我们也逐步向金融行业进行推广。
达梦数据库的理念是重视细节,简单实用。比如用过Oracle数据库,都觉得它是一个重型的数据库。达梦数据库的功能很全,也可以完全对标Oracle,同时使用起来非常简单。
根据市场需求,我们在持续改进、勇于创新,不断完善产品性能,目前已支持事务型、分析型和分布式数据库。
目前,关系数据库现在最高版本是DM8,达梦公司初期产品就是关系型数据库,后期我们也将产品线进行了扩展,以数据为核心,提供一些工具,包括数据同步平台等等,可以说,达梦是一个以数据为核心提供全产品线的的服务商。
下面和大家介绍下我们的技术发展路线。
通过上面的技术路线可以看出,早期达梦数据库都是单机运行,逐步发展到现在的分布式集群架构。详细地回顾发展路线,达梦数据库首先支持了高可用的主备架构,之后包括读写分离架构、MPP并行计算架构,后期是提供了DSC,就是共享存储集群,到最后的是分布式集群的架构,整体随着版本的提升我们所能提供的高可用方案越来越全面,我下面来一一介绍一下:
达梦最早支持的集群架构是主备集群,当时在国家电网智能电网调度项目时,用户提出来的需求,我们当时攻关解决了这个问题,就是主机将重做日志传到备机来保证一致性,也可以自动进行切换。其对标的是Oracle的Dataguard。我们通过这种方式,包括自动使用切换也好,实时复制也好,系统整体可用性可以达到较高的水平。
另外,2012年,国产数据库厂商面临着一个问题,国产数据库要和国产CPU、国产平台进行适配,之前的都是基于x86进行适配的。而国产CPU存在包括主频、内存、带宽等一些问题。
基于国产CPU在电子政务领域进行使用,大多数业务场景都是读多写少,在这样的场景模式下,我们提供了一个读写分离的方式,主机是可以写的,备机是只读方式打开。基于刚才提到的主备集群发展来的架构,它会在接口驱动层自动会将SQL语句进行分发。如果是读SQL语句就分到备机上,如果是写SQL语句就分到主机上。
实际上是把读事务的读事务给充分的并行起来了,当然这套解决方案不能解决所有的场景,但是对于读多写少的场景它的有效性还是非常高的。
我们在一些部委和央企的实际使用,如果是单节点200个并发,登陆就已经超过五秒,而对项目验收来说,他要求500个并发不超过五秒,所以只能通过读写分离的方式来提升性能,替国产CPU分担压力。如果是基于x86的,我们用单机就可以把这个问题解决,但对于国产CPU的我们必须用读写分离的方式。
另外我们还提出了并行计算的方式,在2011年大数据兴起,数据量基本上达到TB级别,现在就更大了,可能是达到PB级别。数据量对于单条复杂SQL语句并行执行来说,其他的集群都很难解决,达梦提出了MPP+列存储的方式,来将一条SQL语句充分并行起来,提高执行是金;同时也支持MPP+行存储的方式,行存表可以快速转入列存,行存表和列存表进行进行关联查询,实现了行存和列存真正进行融合。
如果是纯列存,频繁的进行插入和更新是非常不合适的,性能也很差,但是基于列存我们做了行列融合,先给表创建一个影子表,是行存表,如果你对列存表进行更新时,先更新到行存影子表里,然后在后台进行合并,把行存表的信息合并到列存表上。如果查询,能够做到对没有合并完的数据会进行必要的综合,返回给用户,会保证数据的一致性。
达梦公司MPP可以做到高频的插入和并发精确查询,也可以进行大规模数据集上的统计分析。另外我们MPP是支持事务ACID的,就是事务的强一致性。所以在一些案例中还是可以满足一些需求的,比如说市场监督管理总局的某系统,就是大量使用了达梦MPP集群,系统主要是查询,同时必须能够处理事务,所以只能说是达梦这种MPP集群可以满足用户需求。
另外一个架构发展就是共享存储集群,Oracle现在主推的是他的RAC共享存储集群,几乎所有的用户在用Oracle进行事务处理时,肯定选择RAC方案。
这可能是国产数据库的一块心病,因为我们大部分国产数据库厂商无法实现技术突破,被认为是在高端集群上国产数据库和国外主流商业数据库最大的一个差距。达梦经过多年的研发,我们突破了此类技术, 推出了达梦的共享集群DSC。
从2011年我们就开始做,但真正成熟是在2018年。因为他不是那么容易做出来的。2016年时,一些案例中跟合作好的一些伙伴也陆续进行了大量使用,所以我们认为2018年它已经成熟。可能有一些人也听说过大家总是在宣传他们的RAC,但是迟迟没有拿出来。但达梦现在首推的方案就是共享存储集群。
另外我们在今年发布了DM8,其中提出了分布式架构,现在的一些友商,他们提出的都是一些分库分表集群,类似于MySQL这种方式。这种方式有个问题是通用性很差,例如我的应用系统很可能需要根据你的数据库进行修改。之前可能大量的SQL语句、存储过程需要修改,甚至触发器都无法使用,针对这些问题我们提出了达梦的解决方案。
其实是分布式DSC的方式,各个节点也可以读写。首先是分了三层:计算层、日志层和存储层,每一层都是独立服务器。计算层的各个节点都可以读写,实际上是个DSC,但是他们对存储层都可以访问到,其实存储层对计算层是共享存储集群,每个节点都可以访问存储层所有节点。
通过这种方式,计算和存储分离的方式解决了分布式自动扩展的问题,计算节点和存储都可以自动扩展。传统的方式或共享存储方式都达不到这个水平,但说我们来说是可以实现的。
另外日志节点,负责将重做日志应用到存储层,会对数据进行分区,同时来完成数据的多副本,分布式的主要特点都能满足。他的优点是对业务系统的兼容性非常好。因为之前所用的所有SQL语句在这个系统上不需要进行修改,这是我们的最大的一个优势,我们把历史的一些积累应用系统,和我们现在的创新点结合起来,这是我们提供的一个分布式数据库。
接下来介绍一下DM8,它对原来的功能进行了增强,比如说达梦数据库兼容性比较好,我们对国际标准、对兼容业界的测试标准(Oracle)都进行了全面的兼容,包括他所能提供的系统包以及视图,都能进行全面兼容。这样就做到了保护用户的原有投资,基于Oracle开发的系统移植到达梦上不需要修改代码。对于用户来说原有的代码完全可以在达梦上进行使用。移植过程成本费基本为零,也非常容易做到。
首先我们对面向对象的过程语言存储过程进行了改进,优化了调优和调试功能,现在通过各种方式可以达到像调试C语言或Java语言的水平,相对来说对存储过程的运维或开发会比较得心应手。
其次我们DM8对优化器方面也做了很好的兼容,传统关系数据库最难的一点就是优化器,像开源数据库和Oracle的差距也非常大。
达梦数据库在这方面也做了很深入的研发。像我们DM8在兼容性方面是兼容机器生成的复杂SQL,因为现在我们在一些应用系统中有一些机器生成的SQL语句特别长,可能达到上万行。所以这种SQL语句是机器生成的SQL语句,人看起来是非常恐怖的,对于数据库来说也不好对付。像这一类复杂的上万行一条的SQL语句的分析,我们也做了针对性的优化。
我们也提供了一个虚拟机,DM7也有,我们在虚拟机上来完成SQL语句和面向对象语言的支撑,包括我们数据库设计核心的工作日志、回滚段,分区进行了全面的改进和优化,它的性能更好,并发性也更好,稳定性也更好。
这是我们性能提升的标准。TPC-C的标准是100万,是在单台两路CPU上的测试结果,16G的内存、300G的SAS磁盘。另外我们在TPC-H的基准测试可以达到17分钟,这两个指标在国产数据库中是非常领先。
同时DM8也提供了更加完善的运维管理工具,这部分是达梦数据库之前相对的一个弱点,诸如Oracle在这方面做的相对完善,DM8已经把短板补齐了。
我们提供了一个图形化界面,对曾经发生的一些瓶颈、等待等一些问题都可以进行记录,同时给用户提供报警。也可以对目前状况提出建议,如果出现某种问题,可能的分析原因在哪里,它会自动对一些运维、经验不太丰富的人员提供综合考虑的建议。
此外DM8也在挖掘硬件的潜力,现在CPU的核数越来越多,如何去支撑多业务扩展以及TB级别的内存,包括一些固态硬盘。现在越来越多的应用系统是用在固态硬盘,非常好的服务器上。另外国产CPU也在不断的进行持续进步,我们要利用性能的提升来改进达梦数据库的性能。
DM8架构新的趋势,一个是行业融合,提出了HTAP的方式,就是通过高级日志的方式来实现。
我们写一份数据,我们会把实际情况存储两份数据,一份是以传统的行存储组织,一份是以列存储组织。这样的话,你对这个表如果要进行分析,我们直接在列引擎上查就可以。如果要进行频繁的查询操作,我们在行引擎上查,但是它是一个表,它会自动地进行分发。根据发来的SQL语句会判定是事务型语句还是分析型语句,进行自动的分发,这是DM8的一个能力。
DM8集群设计的理念是同源性,我刚才说的所有包括关系型数据库、分析型数据库、分布式数据库,主备集群、读写分离集群、共享存储集群还有MMP集群其实是一个产品,我们内部只有一个产品线,我们只用一个产品可以满足所有的场景。这个理念和Oracle是一致的。
我们提出了数据守护与读写分离的集群,每个点实际上是一个DSC集群,主DSC可以读写,但备机以只读方式打开,但它不是单机的,它是一个DSC集群,这个集群也可以实现故障自动切换、实时归档。可以实现读写分离的集群,可以自动把对方把一些读事务分到备机。
DM8对大规模并行处理MPP也进行了增强,一个是在优化器上,另外我们之前发现我们的通讯代价是比较大的,我们也会对这一层进一步的优化。
达梦公司会根据软硬件技术,发展一些新的东西,我们把一些SSD、大的一些内存结合起来完善我们的一些优势。实际上是共享存储的一些优势,多点读写、完整的数据库特性,这是达梦数据库最大的两个特点。
数据共享集群,我们在DM7主推的是两个节点,我们在DM8的时候我们已经扩展至八个节点,未来我们可能会扩展到更大,就是32个节点。因为分布式集群的扩展性比传统的架构要好很多,我们实际测试的时候它能够承受这么大的压力,所以我们现在主推是最多可以扩展到八个节点。另外我们也可以支持同城跨机房多活部署,就是我们的DSC的各个节点可以跨机房部署,机房之内可能有几十公里的距离。如果一个机房发生意外,另一个机房仍能对外提供服务。
达梦数据库透明分布式集群,是综合了分库分表,像KV集中写入KV键值数据库等数据库的优势,结合我们的优势来实现我们透明分布式的技术。
方式也可以进行扩展,这个方式的优点是鱼与熊掌兼得,一是要有分布式数据库的优点,比如可扩展性、多副本、数据的分区、避免热点这些方式我们都可以支持,另外是以前开发的一些SQL语句、应用程序,他有大量的SQL语句重组过程我们也可以继承,使用上没有大的问题,应用程序以及基于传统数据库的开发移植到分布式数据库上不需要大的修改,这是达梦最大的一个业务优点。
上图展示的是DM8的融合架构,是把分布式架构、TDD架构和达梦分布式的统一存储,包括DSC架构和RWC架构在分布式存储的统一。另外DM8要把MPP架构融合进来,像分库分表在未来也会支持。现在达梦公司主推的是DSC分布式架构,或者读写分离架构。
化繁为简,合而为一。是达梦数据库的自身优点,只用一个产品可以将所有的场景都可以兼容,因为数据库最难的一点是通用性,数据库一套产品要满足相当多的产品,我们不会把它做成多个产品。如果是一个产品,可以对我们人员、资源投入进行集中。
最后进行简单的总结。数据库国产化的关键:
一是复杂应用如何进行有效的移植,达梦数据库会向Oracle进行全面的兼容,基于Oracle开发的应用程序移植到达梦不需要修改程序。像Oracle的接口我们也进行了完整的兼容,不需要再对接口进行修改。把接口处Oracle的驱动换成我们的驱动,修改下连接串和头文件并重新编译,就可以从原来连接Oracle的数据库连接到达梦数据库,这个方式移植成本为零。
数据库国产化的发展关键是什么呢?,用户对达梦数据库存有疑虑,例如我基于你上线总是害怕会宕机或出现严重故障。针对这样的疑虑,达梦公司提出了解决方案,原来Oracle的数据库不用扔掉,可作为备机来使用,建议用户通过一个实时同步工具——DMHS,是达梦公司的一个独立工具,是异构数据库,它可以将达梦数据实时同步到Oracle库上。
达梦数据库通过软件工程化实现的方式来柔性迁移,从国外数据库迁移到达梦数据库上,用户不需要大量的修改,用户虽然换成了国产数据库,但他仍然会感觉是原来的国外商业数据库,设计理念、使用习惯都是一样的,这会是一个平滑的过渡,对用户来说是可以接受的,也节省了用户的成本。
此外对于达梦来讲,无论是架构的演进、产品的策略,我们都是以用户需求为引导,未来,我们依然会以用户和市场的需求为导向,打造满足时代需要的产品!我今天的分享到这里就结束了,谢谢大家!