RDS算不算数据库这个争论在几年前有过,DB-ENGINE把RDS收录为数据库产品后,这种争论少了很多。实际上RDS是关系型数据库服务的简称,本身RDS不是数据库,而RDS使用一些开源的数据库产品作为服务的基础数据库组件,向云用户提供数据库服务。RDS提供给客户的并不是一个完整的数据库,而是用户使用数据库的某些接口。
前阵子应一个客户的要求,d-smart对接私有云部署的阿里云中的RDS FOR MySQL。我们的开发人员惊奇地发现他无法连接到数据库所属的OS上来采集数据。当我给他介绍了RDS是什么以后,他才恍然大悟。RDS通过这种封装让用户更关注于使用数据库,而不需要关注数据库运维的细节,从而简化运维。
在阿里云上,RDS MySQL版也是被称为云数据库的,因此我们如果不去抠某些字眼,把RDS说成是一个云数据库也说得过去。那么下一个问题就麻烦一些了,RDS MySQL算国产数据库还是开源数据库呢?实际上,如果真正是业内的人士,甚至阿里云的产品经理或者研发人员,对这个问题的回答肯定是十分坚定的,RDS MySQL属于开源数据库,因为其基础来源于开源代码,虽然经过了云厂商的优化,其优化的代码也是要开源的。因此阿里云的RDS MySQL数据库属于开源数据库,这一点大家都不会否认。在我的这张截图上,也可以看到开源两个字。
不过在阿里云RDS MySQL算不算国产数据库这个问题上,就没那么简单了。我曾经听到过不止一个企业的领导说我们用了国产数据库RDS MySQL,我也曾试图解释RDS MySQL使用了开源的MySQL,应该不属于国产数据库,不过大部分人并没有被我说服。甚至有些人提出了这样的观点:“开源的就不能是国产的吗?开源软件使用在国产的云平台里,那么就应该算是国产的”。
只能说销售的洗脑水平十分高超,开源的也可以是国产的,这个观点是无论如何都驳不倒的。实际上我们也并不一定要纠结RDS MySQL是不是国产数据库,算不算信创只是一个文字游戏。很多企业的IT主管心里也清楚这些产品的来源,只是如果落实到一个统计数字上,那么算不算的问题就比较敏感了。
我们现在讲的国产化替代问题,实际上也并不需要去纠结某些统计数字。国产化率,信创率等等,这些比例实际上也没有太大的关系。我们做国产化替代的目的是为了安全,而不是去全球化。俄乌战争后西方国家对俄罗斯的眼花缭乱的制裁让我们看到了国产化替代的必要性,因此在关键领域用国产数据库替代不安全的产品的必要性是不言而喻的。不过我们仍然不需要纠结这个国产化率的指标。企业中大量的安全性要求没那么高的系统,用用开源的数据库产品又如何呢?而对于涉及到国计民生的系统,那么使用国产数据库也是必然的选择。这个选择并不是一种去全球化的思潮所致,而是真正的从安全出发。这些年开源软件的安全漏洞事故层出不穷,开源软件的安全性肯定是要打一个问号的。
说到开源软件的安全,再来看我们的国产数据库产品。根据工信部信通院截至2021年6月的统计,国产数据库产品有名有姓的已经有140个了,再加上一些衍生产品,RDS等,据说已经接近300个了。如何判断这些产品是国产的呢?工信部有一个标准,自主代码比例超过70%。那么如何判断自主代码比例呢?自主代码比例这个指标够科学吗?
这个问题很尖锐,也确实不好回答。比如说,我开发了一个数据库产品,原来的开源数据库有1000万行开源代码。我们把这1000万行代码中的300万行核心代码提取出来,不做修改或者仅仅做一些小的修改,再把那些JDBC驱动,客户端工具,数据导入到处工具等的边缘代码做大改,再加上一些乱七八糟不太会用到的自主研发的代码,里面也许有一些不太成熟的存储引擎,系统插件等,反正正式环境中也不会推荐客户使用。如此再产生1000万行代码,和原来的300万行核心代码放在一起,妥妥地超过70%的代码自主率,又不会让数据库产品伤筋动骨。那么这种国产数据库的核心的300万行代码中可能存在的安全漏洞就完全消失了吗?虽然明眼人一眼就能看出这种国产化的弊端,不过这可能也是我们国家数据库国产化中的一个难以言表的痛点。
实际上这种国产数据库的安全性还不一定比得上一些大厂的RDS MySQL产品,很多大厂虽然使用了开源的数据库引擎,但是在RDS层上做了很多安全增加,比如防SQL注入,安全审计等。这样的RDS产品不见得就会比我们的国产数据库在安全性上更差。
从上面讨论的一些情况来看,我们是不是应该更加客观地来看待数据库国产化替代这件事呢?解决安全的问题是数据库国产化替代的初衷,而做起来是不是已经忘记了我们出发时的目标了呢?