前阵子和一家大型企业讨论数据库国产化的方案,这个工作实际上是去O,在技术层面上并不难,弄清楚企业数据库应用现状,确定几条迁移路线,剩下就把各个系统往这几条路线里套就可以了。
我们讨论确定的总体思路也不复杂,对于新建中小型系统,原则上使用云上RDS;对于存量大型核心系统,选择裸金属部署的国产数据库或者云原生分布式数据库,经过系统改造后完成替代;对于新建大型系统,采用裸金属部署的国产关系型数据库或者云原生分布式数据库;对于存量的原来使用Oracle数据库的中小型系统,已经计划上云改造迁移的,尽可能使用云上RDS,暂无升级改造需求的,挑选一款与Oracle兼容性较好的国产数据库做迁移。
按照这个方案把上千套系统归类到这几条里虽然工作量不小,不过也很快完成了。本来以为方案让领导认可了,就可以开展选型工作,然后就可以进行试点了。没想到领导看到这个方案后觉得这个方案考虑的太复杂了,他觉得,反正所有系统都要上云,那么为什么不全部使用免费的云上RDS,还花钱去买什么国产数据库呢?他觉得云平台比传统架构强太多了,以前没上云用Oracle的时候还总是今天这个系统出问题,明天那个系统出问题。自从上云后,他还没听说哪个云上系统出过问题呢。
经过领导这一番教导,前阵子花了一个多月搞的方案算是白搞了。虽然不太甘心,但是也觉得很难去说服领导。会后企业中一个搞技术的朋友和我聊这件事,他说目前上云的系统虽然有好几百套,但是都是一些很小的非关键系统,哪怕真的出了事,领导也不会知道。而企业的核心系统目前还都没有上云,都在Oracle数据库里跑着呢,那些系统出点小问题,都会反馈到领导那里去,所以领导就自然而然的认为,系统上云了就万事大吉了。
另外一方面,以前稍微大一点的系统搬迁上云,改用RDS的时候,都是做了拆库分表工作的,在研发上大大投入了一把,把数据库都切分为多个小型数据库了,这么一切分,数据库变小后,哪怕缺个索引啥的,也都不怕了,确实是上云用了RDS后反而问题比以前少了很多。只不过采用这种方式研发投入比较大,很多没钱的二级企业搞不起,像他们这种大型的比较有钱的二级企业,目前的整个应用架构都改成这样了,自己下属的IT公司的研发目前也比较适应这样的应用模式了。
领导的思路也不是完全不可行,也不是完全不正确。如果所有的应用系统都能够比较彻底的完成上云适配改造,那么把所有的Oracle上的应用系统迁移到云上RDS也并不是不可行。这种方式还可以省去购买国产数据库许可证的费用(事实上这个费用是省不下来的,因为企业购买的商用版云平台,RDS节点的授权费用基本上与国产数据库许可证授权相当,只是领导认为这是云平台投资,不是数据库许可证投资而已),因此在领导眼里,数据库国产化改造并不需要花那么多心思去区分各种技术路线。几个核心系统单独考虑,其他的系统全部用RDS替代就好了。因为在领导眼里,Oracle和RDS虽然有区别,但是都只是数据库而已,因此数据库国产化替代不如化繁为简。
不过在技术人员眼里,数据库的差异就大了。应用从Oracle迁移到不同的数据库,应用改造,性能优化、高可用运行、日常运维,都有极大的差别。而作为企业IT部门的高级管理人员,领导并不一定了解这些不同,甚至无法理解这里存在什么不同。再加上领导身边也经常有些半懂不懂的人忽悠忽悠,出现类似的情况就很难说了。
在和很多企业探讨数据库国产化的方案的时候,我经常提出一个总体成本的问题。实际上目前大多数领导都只关注购买数据库许可证的费用,并不会去考虑总体的成本。我曾经和一个企业的IT主管讨论过数据库国产化改造的成本问题,最后发现实际上最难解决的是存量系统的问题。一个大型企业,经过近三十年的信息化建设,至少有上千套大大小小的系统使用Oracle数据库,这些系统中至少一半系统使用了大量的PL/SQL存储过程。如果不选择一款与Oracle高度兼容的数据库系统作为迁移对象,那么整个迁移改造的成本是一个天文数字,这个数字远比已经让各位领导头痛的国产数据库许可证采购费用大的多。
除了迁移之外,选择不同的数据库,运维的费用也是需要考虑的。国产数据库哪怕在一些接口上与Oracle做的有多像,实际上内部核心与Oracle的差异还是巨大的。在运维上,以前我们积累的经验大多数不可用了。因此在运维、原厂服务、第三方支撑等方面都会存在巨大的差异。企业的IT主管在考虑数据库国产化改造的时候,往往会忽略这方面的费用投资,这将导致国产化迁移大规模开始的时候,一定会遇到很多运维方面的问题,导致应用系统不断出问题,IT部门疲于奔命。
与数据库国产化工作开展有关的技术路线选择、产品选型、费用与预算、人才培养、技术储备等相关的工作,无论哪一个环节没有做好,都会给数据库国产化工作带来极大的困难。但是如果这些无论哪一项都不是基层技术人员能够决定的。如果不让领导真正明白这些关键,那么这项工作想做好都不容易。
另外每个企业的实际情况不同,技术能力、投资策略、改革目标等的不同都会导致最后的策略在领导眼中与技术人员眼中存在巨大的差异。就像我开始说的这个例子,如果企业下决心要将所有的系统都做云化改造,也有大量的资金可以用于应用改造,那么领导的方案也并不是无法实现的,只是要花更多的时间,花更多的钱而已。而如果领导选择这个技术路线是想省钱,那么这个方案就很危险了。我们在讨论数据库国产化技术路线的时候,是不是也要想办法先让领导搞清楚数据库是怎么一回事?领导真的懂了,再结合企业的IT发展路线去做决定,可能会比基层技术人员只是从技术层面去考虑问题更全面一些。