最近因为贵阳银行使用易鲸捷全栈国产化项目的上线,在技术圈引起了热议,各种真真假假的文章充斥在互联网上,让大家难以分辨,这篇文章将带大家了解国产化,了解国产化数据库。
网上的这些文章的主要观点,无外乎如下几个:
1.怀疑数据库国产化的必要性,进而怀疑国产化的必要性
2.质疑贵阳银行和相关的国产化厂商
3.支持国外产品,唱衰国产化产业
针对这几个观点,我做为一个16年的国产化数据库研发从业者,发表一下一线工作者的个人观点。
我们今天先分析一下第一种观点,抛开数据库,说说国产化是否必要?我相信只要是有常识的人都不会说没有必要,总书记也说过“关键核心技术是要不来、买不来、讨不来的”,这是做为一个最高决策者的最切身的感受!
要谈论国产化是否必要,先来看看国产化在做什么事情?
1.科技研发和创新投入:
o中国加大了在科技研发方面的投入,通过各种研究项目和科技创新基金来支持国内企业和研究机构的创新活动。这包括基础研究、应用研究以及关键技术的攻关。
o难道你不希望国家在科技研发和创新方面投入吗?
2.高端制造业发展:
o中国着力发展高端制造业,包括航空航天、新能源汽车、电子信息等领域。通过引入和培养高层次的人才,提高技术水平,推动制造业的升级。
o难道你不希望中国人从事高端行业,希望中国人只是从事拧螺丝的底层重复劳动吗?
3.数字化转型:
o数字化转型是中国产业升级的一个重要方向,包括数字化生产、智能制造、物联网等。这有助于提高生产效率、降低成本,并增强企业在全球市场的竞争力。
o在互联网发展已经完成,移动互联网发展如火如荼,物联网和智慧城市等发展呼之欲出的时候,你不希望中国参与其中吗?
4.新能源和绿色技术:
o中国致力于发展新能源和绿色技术,包括太阳能、风能、电池技术等。这有助于降低对传统能源的依赖,推动清洁能源的应用。
o在发动机技术被国外垄断,中国只能通过电动车弯道超车的时候,你不希望中国的电动车得到快速发展,并走出国门吗?
5.人工智能(AI)和大数据:
o中国在人工智能和大数据领域进行了大量的投入,通过推动相关产业的发展,提升在人工智能领域的创新和应用水平。
o在AI技术成为新的风口,各行各业正在经历大洗牌的重要节点,你不希望中国的AI和大数据发展应用名列前茅,并造福国人,甚至是造福人类吗?
6.生物技术和医疗科技:
o生物技术和医疗科技是中国国产化自主创新的重要方向之一。这包括生物医药、基因工程、医疗器械等领域的研发和应用。
o在经历过非典、新冠的折磨后,难道你不希望我们国家自己能快速的研究出相关检测试剂,疫苗甚至是药物吗?
7.信息技术和互联网:
o中国在信息技术和互联网领域取得了显著进展,包括5G技术、人工智能、区块链等方面的研究和应用。
o在5G建设的中期,6G技术正在研发的关键点,你希望国家在这些方面都落后吗?
8.知识产权保护:
o加强知识产权保护对于鼓励创新至关重要。中国正在加强法律框架、执法力度,以保护创新成果和知识产权。
o难道你不希望你竭尽所能才得到的创新成功和知识产权被得到保护吗?
9.国际合作:
o中国积极参与国际科研合作,吸收全球先进科技,同时也将本国的科技成果推向国际市场。这有助于实现共赢,加速科技创新的步伐。
o难道你不希望中国技术推向国际市场,帮助实现共赢吗?
只要前面的问题中有一个问题你的回答是肯定的,那国产化就是非常必要的。
其实在中国,很多方面一直都受到国外限制和打压,尤其是军事相关领域,更是举步维艰。有识之士建国之初就开始了国产化相关的工作,两弹一星由此产生(两弹一星工程见:https://baike.baidu.com/item/%E4%B8%A4%E5%BC%B9%E4%B8%80%E6%98%9F/201355),有了两弹一星这才保证了中国这几十年的安全和稳定。
要说两弹一星工程的成功是被逼的,其实中国的那一个国产化得细分领域不是被逼的?
中国空间站:要不是米国拒绝中国加入,中国在30年前的经济状况下,怎么可能投入巨额资金研发建设空间站?
北斗导航:要不是GPS被当做武器使用,中国怎么可能会研制自己的独立的导航系统?
芯片:要不是米国对华为芯片断供,怎么会有人想到一个普通的商品还可以这样使用?
光刻机:米国为了围追堵截中国芯片的发展,不惜杀敌一千自损八百的代价,不仅禁售芯片,还禁售光刻机等造芯设备,以中国长期形成的造不如买,买不如租的理念,怎么可能去研发这些设备?
可能你会说这些都是硬件,软件没有那么好禁。这是一个非常大的误区,硬件的禁售需要一个相当长的周期,这个过程中可能还有机会开发出这些硬件,而软件的禁售是立竿见影的,根本没有任何时间反应。
当高端芯片被禁售以后,我们至少还有以前得到的高端芯片使用,只是没有办法得到更新的高端芯片,也没有办法得到更多的高端芯片。
而软件往往都会设置授权限制,这个限制在软件运行过程中控制,只要服务期限一到或者服务期限被恶意修改,软件立马停止运行。难道忘记了Windows升级以后直接导致黑屏无法使用的事情了吗?难道不知道数据库导致某些国家全国断电了吗?即使你的网络比较独立,没人能远程修改这些信息,那软件的服务时间到期以后,别人不给你新的许可,软件也就没法使用了。
怀疑数据库国产化的必要性的观点中,主要有如下观点:
1.开源软件唾手可得,国产化数据库就是圈钱
2.开源由社区主导,单一国家想制裁没有办法
3.真正应该做的是把现有内核用好的能力,言外之意就是没必要掌握核心,只是做做插件和周边工具
第一个观点对不对?我相信你看了由公众号“白鳝的洞穴”写的文章《数据库国产化是在套壳圈钱吗》以后会有自己的答案。我这里再补充一下:其实作者已经提到“Windows可以被制裁,Linux可以被制裁吗?Oracle/MySQL可以制裁,PostgreSQL可以制裁吗?”,这里作者提到的MySQL可以被制裁,其实MySQL也是开源软件,那作者为什么认为MySQL可以被制裁,而PostgreSQL不能被制裁呢?
第二个观点我想作者是完全基于现在的现状,没有进一步极限思维。MySQL可以被制裁,一方面是因为现在MySQL主要由Oracle公司维护,另外MySQL的协议对于基于它做产品很不友好。而PostgreSQL协议非常宽松,几乎对使用PostgreSQL的源代码没有任何限制,这也是为什么国产数据库大部分都基于PostgreSQL的原因。但作者忘记了一点,协议是可以修改的,下面是修改过开源协议的例子:
1.MySQL:
oMySQL 是一个广受欢迎的开源数据库系统,最初采用的是GPL(GNU通用公共许可证)。然而,在2000年,MySQL AB公司发布了MySQL 3.23版本,并将其授权从GPL修改为GPL with FLOSS Exception。这项修改的目的是为了允许开发者将MySQL用于非开源软件的应用中。
2.ReactJS(Facebook):
oReactJS 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。在2017年,Facebook 宣布将 ReactJS 的许可证从BSD修改为MIT许可证。这一变更是为了消除在软件社区中引起争议的专利条款,以促使更广泛的使用。
3.MongoDB:
oMongoDB 是一个流行的 NoSQL 数据库,最初采用了AGPL(GNU Affero通用公共许可证)。然而,在2018年,MongoDB公司宣布将其服务器端软件的许可证从AGPL修改为SSPL(服务器端公共许可证)。这一变更的目的是为了防止云服务提供商将 MongoDB 作为服务提供而不开源其修改。
除此之外Elasticsearch也修改了开源协议,看起来有些协议是往更开放改,但在一些极端条件下怎么保证就不往闭源方向修改,你怎么就能保证PostgreSQL的协议不会被修改?即使PostgreSQL协议没有被修改,米国的法律也会被修改用于限制出口,米国联合其它国家一起制裁一个国家也不是没有的事情。俄乌冲突一爆发,红帽、Docker、SUSE在俄罗斯停服,这里边哪一个不是开源?GitHub、Node、React等公开站队,这里边哪一个不是开源?
第三个观点我认同一部分,但这观点只是停留在使用没有碰到问题的阶段,数据库软件你使用个三年五年不出问题可以理解,但用个十年八年不出一次问题打死我也不信。据我了解,即使是数据库领域No.1的Oracle,金融行业每个月都会发布一个Oracle的问题清单,并提醒各金融机构避免。何况是没有经过千锤百炼的开源数据库,如果开源软件出现问题,如果你不掌握核心只是做做插件和周边又怎么能解决这些问题呢?
通过我前面的论述,我相信大家都没有人再怀疑国产化的必要性,也没有人会怀疑国产数据库是不是需要国产化。其实早从2006年国务院发布的《国家中长期科学和技术发展规划纲要(2006-2020年)》开始,其中就提出了“核高基”重大专项,其中的“核高基”就是“核心电子器件、高端通用芯片及基础软件产品”的简称。是与载人航天、探月工程并列的16个重大科技专项之一。
我再从一个数据库一线研发的角度说一下国产数据库:
一、 国产数据库为什么都要基于开源软件做
这是几个常见的开源数据库软件的代码量:
a.sqlite:核心代码量40万行,所有代码量300万行
b.PostgreSQL:核心代码量156万行,所有代码量615万,这不包括周边的任何扩展,PostgreSQL周边扩展有些项目大的惊人,像PostGIS有170万行代码,像pgjdb也有35万行
c.MySQL:核心代码量430万行,所有代码量3304万行
一般的数据库的代码量都在100万行以上,所有代码量有些达到了几千万行。一名研发人员平均下来一天的有效代码产量大体上是100行左右(这个数字可能让你感觉很惊讶,但这就是事实,因为研发人员不是所有的时间都在写代码,有很多时间是花在调研,了解和理解现有代码,构思和设计,测试和修复问题等事情上,花在写代码的时间还不到所有时间的20%),国内数据库公司的规模大部分都是几十到几百人之间,其中的研发人员大部分都在几十人。我们以20名核心研发人员粗略估算,光是码出这样一个庞然大物,需要的时间大体上等于15.3年(代码总量/一名工程师的一天的有效代码量/一年的工作天数/核心研发人员数量=6150000/100/200/20),这还不包括写文档,各种国家认证测试,应急的PoC功能开发,项目应急功能开发等。
所以从公司成本角度出发,不太可能花大量人力去从头码一个数据库。其实这也完全没有必要,我们应该站在巨人的肩膀上前进,所以大部分数据库公司也是这么干的,都基于开源软件研发公司的数据库产品。其中因为开源协议的原因,大部分也会选择PostgreSQL类数据库作为基础。
二、开源软件都可以用,国产数据库厂商还基于开源做什么?
当你看了公众号“数据源的港湾”写的这篇文章《核心系统国产化替换道路坎坷,易鲸捷应得到鼓励支持》。从文章中就可以看到做为实际参与者的艰辛,大家在用MySQL或者PostgreSQL数据库的时候,碰到和Oracle不一样的功能点,应用程序肯定需要做适配改造。但这个问题一旦到国产数据库身上,你就必须兼容,从数据类型,操作符,表达式,函数,到特有语法,再到存储过程和包等。因为国产数据库不做这些事情,就需要应用程序做改造,而这个过程中国产数据库处于绝对的弱势。国产数据库在支持完善兼容性的同时,还需要做一些优势功能,否则在200多加数据库公司中如何才能脱颖而出。另外国产数据库厂商还需要做周边工具,这主要包括数据迁移,数据同步,数据库状态监控、数据库管理运维,数据库备份恢复等等,而这些也会消耗大量的人力物力。
三、既然国产数据库也基于开源软件,客户都用开源软件不就可以了,还为什么用国产数据库?
有实力的公司已经开始这么做了,像阿里、腾讯、华为等,这些公司很多都是在自己的业务中先使用开源,后来到不得不维护开源,再到今天的形成自己的基于开源的产品。对于一些中小公司,如果业务也不是特别关键,其实也完全可以使用开源数据库,目前也确实有很多就是这么做的。
但是对于核心业务,尤其是要求7*24的业务,如果使用开源,一旦出现问题没有技术积累,是没有办法快速解决问题,这就会导致数据库宕机从而影响业务运行。国产数据库公司,都会有相关的专业数据库技术人员,在出现问题时及时解决这些问题。
另外开源软件测试并不充分,只是在各种客户使用过程中发现问题以后再逐步修复。而国产数据库厂商会对开源软件进行全面的测试和问题修复,周边工具也比开源要完善的多,这就和开源才会有优势。否则,大家都不傻,谁会当这个冤大头。
做为一名国产数据库研发的从业者,希望大家多多支持国产数据库的发展,支持国产化的发展,更要支持像易鲸捷这样敢为人先的企业。