所以在这个层面上,虽然使用基于开源的软件去打造一个企业化的软件,我们可以降低一些开发成本,但是在测试成本这块,不要轻易降低这部分的成本和投入。在这块,需要厂商并且清醒的认识和严谨的态度。如果测试不到位,对用户的感觉是开源软件很不稳定,实际上这不是开源软件的错,而是软件提供商没有经过严格意义上的测试。不管是开源还是闭源,没有经过充分测试的软件是不稳定的。
不管是开源的,还是闭源产品。重要的不是代码,重要的是后面的社区、后面的人,如果没有后面精通这些代码的人,拿了这些代码也没用,因为有些技术债,是迟早要还的。对于维护阶段的技术债,现在的开源软件提供商、尤其是开源社区投入资源不足的发行商,完全没有这个概念。如果从软件整个生命周期来看这个问题,如果在用户侧和软件提供商侧达成这样一个共识,就自然不仅会专注冰山上面的一层,冰山下的广大的底座也会相应的重视和加强投入。这样整个开源生态就会走一个正向、积极的循环。
从维护开源生态健康的角度来说,腾讯云也有一些相关的尝试,这里以云上的大数据产品为例,做一些分享,包括后面的一些实际的成果。
腾讯云大数据的开源实践与贡献举一款产品,我们叫腾讯云数据仓库产品Sparkling,是基于很多开源的技术,打造了一款云仓库,它可以对云上多种数据源进行存储,比如说云对象存储COS,云数据库,弹性MapReduce等等,还有传统的关系型数据库也可以对接。后面通过数据集成来构建数仓,数据集市来满足BI等数据应用。它基于非常强大的Hadoop以及Spark开源大数据技术,并进行了相应的一些优化。这些优化已经以patch的方式回馈给社区。同时它提供一个数据开发IDE,这样用户可以写传统的数据分析SQL,也可以支持机器学习常用的python,R等语言。除此之外,对于数据资产管理、数据门户、数据质量控制这块也都有相应的解决方案。
值得一提的是,因为它是一款针对云的特性而设计的一款数仓产品,所以对于云特性的利用已经到了一个比较高的阶段。我们把所有的节点分为三种,主节点、核心节点和弹性计算节点。主节点是一些重要的控制性节点,核心节点包含数据节点和计算节点,而弹性计算节点只有计算节点,所以支持可伸缩的部署。我们对开源的项目做了很多改进,比如说支持一些企业级的安全特性,包括对于数据授权和鉴权的支持等等,我们还跟英特尔一起合作,在社区里面持续优化SparkSQL的任务执行器,在执行的时候可以动态调整执行计划。我们对于数仓的列式存储层,也做了很多优化工作,包括我们也回馈到Parquet社区里的bloomfliter功能来支持更快速的数据扫描。我们当前也在针对于列存做基于MVCC的ACID支持,也有计划把相应的方案和代码回馈给社区。我们的这款产品会在开源的基础上把相应的技术优化提升之后,再回馈给开源社区。
所以我们试图为这些开源项目做更多的贡献,如果每一个云厂商都能够积极主动的贡献技术力量、技术资源给开源社区,这对开源的生态健康是非常有意义的。我们还是Apache开源软件基金会的白金赞助商,这个组织有很多大厂来支持它,为什么会有这些大厂来支持?因为它是很多软件,包括大数据,包括人工智能等核心软件背后的一个很重要的源泉,是水源地,我们做这些贡献和赞助不是因为有相应的权利保障,而是为了保护好这个水源地,这对开源生态是非常重要的。我们是国内第一家白金赞助商,我们以后也会持续赞助下去。我们今年也帮助Hadoop,Spark社区发布了最新的release,我们投入了团队的committer和PMC在社区里组织协调这些release的发布,促进社区的健康发展,也开了国内大数据厂商的先河。我们还是很多开源项目的积极参与方之一,比如Hadoop社区的Ozone项目以及Spark社区的Hydrogen项目等,与社区里的其他开发者一起协同开发这些项目,尤其把云厂商的能力和经验带进来,最终会使整个社区受益。