本文由云 + 社区发表
作者:堵俊平
在数据爆炸与智能革命的新时代,新的平台与应用层出不穷,开源项目推动了前沿技术和业界生态快速发展。本次分享将以技术和生态两大视角来看大数据和人工智能技术的发展,通过分析当下热门的开源产品和技术,来梳理未来的行业生态以及技术趋势。
我们今天的主题分为三块,第一是从开源的角度看技术、产品和生态,第二,我们从腾讯云大数据的角度梳理开源的实践,并跟大家分享一下我们最近一段时间或者最近一年以来我们的贡献和成果。最后会跟大家一起探讨一下开源的大数据以及 AI 这个生态当中的一些热点和趋势。
最近在大数据这个圈子里,开源圈或者是整个大数据的圈子里有一个公共性的事件,做发行版的厂商,大数据领域两大技术巨头 Cloudera 和 Hortonworks 突然宣布合并,这两个公司其实从开源界从商业界,都是互相打的不可开交的两个公司。从历史上去观察这两个公司,我们当时认为是完全不可能合并的两个公司,为什么呢会突然合并?
我之前曾经在其中一家公司工作过,长达 4 年时间。当时从我的观察,这两个公司在这段时间里面到了老死不相往来的地步,四年的时间只有一个工程师跳到了对方公司。但这样的公司在今天这样一个时代,大数据、AI 或者云时代,这两个公司合并了。合并意味着什么?外界有很多猜想,这是强强联手,还是抱团取暖,是主动求变,还是来自资本的压力,一千个人有一千个答案。我们从外部角度可以看出一些端倪,或者说从整个开源的运动或者开源的社区,生态发展可以看出一些端倪。
第二个开源重要的消息就是说有些开源的厂商在最近这段时间里面,从完全开源的许可证协议转向了部分开源,或者说有条件的开源,把一个完全开放的生态变成了变更的许可证协议,mongoDB 更改开源协议是可以继续用我的代码,如果把它作为一个服务开放出来的话,要开放所有的支撑服务代码。Redis 加了一个规定是可以正常使用分发,但不能销售这个产品。我们看到这些曾经乐于开源的厂商,现在对开源的许可证加了很多限制和条款。
总体来说,站在支持纯开源的、个人的角度来看,这是从开源到部分限制性的一种倒退。造成倒退的原因是什么呢?对于基于开源项目的产品,我的总结是可能面临所谓的冰山困境。什么意思?就是说从用户视角去看开源产品也好,或者说非开源的产品也好,可能很多时候关注的是产品的功能和性能。冰山下面的这些技术的复杂性、成熟度可能关注不足,可能在挑选类似功能产品的时候往往从功能、性能、价格等外部的维度角度来考虑。
基于用户对于功能、性能以及性价比的追求,软件供应商可能更加放大或者专注于这些差异化的软件的开发和研发。对于冰山底部的大开源平台,这个开源部分的能力,他本质上是属于同质化的。很多软件供应商会去想:如果我在这里投入大规模的研发,实际上与市场上的竞争对手的产品之间就体现不出差异性。所以这里的冰山困境是指对开源产品,不管是用户还是商业组织,会更多的关注水面以上的部分。造成的结果会是什么呢?如果大家真的只关注水面上的部分,只关心上层建筑是否搭的越来越高,越来越好看,而不注意维护冰山底座的部分,会造成底部消融,如果底部不稳,整座冰山都会出现问题,围绕开源项目所构建的生态体系就会垮掉。这样的事情发生的多了,会影响公众对开源项目与软件的信心,我们这样一个开源大发展的时代又会回退到闭源的状态。
开源的产品发展到今天,我们一起要反思一下,为什么会出现所谓的冰山困境,怎么样突破这些冰山困境。我觉得从一个开源软件的整个生命周期来看,我们可能有不一样的观点。对于开源软件供应商来说,开发阶段用所谓的拿来主义,基于现成的软件来构建,可以降低他的开发成本,包括在社区里面利用一些社区外部的资源来促进开发流程或者开发的进度,这些都是很好的布局。
但是对于测试部分和维护部分,不管是开源软件的发行商或是云厂商,可能都有关注不足的部分。什么意思?刚刚我们说到基于开源可以做开发,可以降低所谓的开发成本,但相应的测试成本并没有太多的降低,因为测试的复杂度很高,这些开源软件都是独立的社区去开发的。它们之间在版本发布的时间点上无法做到同步,所以这些不同步造成了很多时候版本之间有版本或者时间点上的冲突,需要你去测试不同软件之间的边界与协同。
所以在这个层面上,虽然使用基于开源的软件去打造一个企业化的软件,我们可以降低一些开发成本,但是在测试成本这块,不要轻易降低这部分的成本和投入。在这块,需要厂商并且清醒的认识和严谨的态度。如果测试不到位,对用户的感觉是开源软件很不稳定,实际上这不是开源软件的错,而是软件提供商没有经过严格意义上的测试。不管是开源还是闭源,没有经过充分测试的软件是不稳定的。
不管是开源的,还是闭源产品。重要的不是代码,重要的是后面的社区、后面的人,如果没有后面精通这些代码的人,拿了这些代码也没用,因为有些技术债,是迟早要还的。对于维护阶段的技术债,现在的开源软件提供商、尤其是开源社区投入资源不足的发行商,完全没有这个概念。如果从软件整个生命周期来看这个问题,如果在用户侧和软件提供商侧达成这样一个共识,就自然不仅会专注冰山上面的一层,冰山下的广大的底座也会相应的重视和加强投入。这样整个开源生态就会走一个正向、积极的循环。
从维护开源生态健康的角度来说,腾讯云也有一些相关的尝试,这里以云上的大数据产品为例,做一些分享,包括后面的一些实际的成果。
举一款产品,我们叫腾讯云数据仓库产品 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 项目等,与社区里的其他开发者一起协同开发这些项目,尤其把云厂商的能力和经验带进来,最终会使整个社区受益。
Apache Hadoop 是在 2006 年左右成立的,这十几年有了很大的发展,甚至可以说是如日中天的过程。近期的热点主要在云原生,包括与 AI 平台的集成与协同。还有一个简单的列表,列出大数据每个细分领域,比如:SQL,流计算等等,可以看到在每个领域都会有很多竞品和精品,为什么会有这么多出来?总有人对之前的项目不认同,或者认为还有改进的空间。从研发资源的组织来说,开源这种跨企业和组织的协同和传统的企业内组织是很不一样的。但从结果来看,开源是一种很有效的资源组织方式,既避免了大量的重复车轮子的工作,又保证了更新、更好的轮子能及时出现。
对于数据的访问之间,我们计算和物理分离,有很强的优势。数据平台还会往外进展,可以把 GPU 能力集成,在这上面通过加强调度,统一数据的训练以及推理。包括 Spark 社区也提出了氢计划,在应用层把大数据和 AI 开源的框架全部串联在一起,通过分布式的调度方式,把这些框架调度到分布式数据与 AI 平台之上。
传统的机器学习和大数据,两个社区、两套技术,能不能做一个融合,或者有没有关联?相对于传统的机器学习,深度学习对于数据、大数据的利用,应该说效率更高。因为传统的机器学习到一定规模之后,训练的指标和效果就上不去了,但是 Deep Learning 是不一样的,海量的数据可以让大规模神经网络有更好的训练效果。腾讯也开源了 Angel 的框架。所以在融合的基础上,我们认为未来的技术方向,会是 AI 与大数据技术相互融合的过程,从原始数据导入到数据准备、数据训练到模型部署,整个是一套闭环,这是未来的一个趋势。
最后做一个简单的总结,我们认为开源项目属于社会公共资源,就像是水,上善若水,水润万物,虽然需要有人来维护,但其核心属性仍然是免费的公共品。在开源生态圈的利益相关方,包括我们的用户,包括我们的软件提供商,包括我们的开发者,我们都是有义务来投入资源,来维护这片水源地的。我们需要建设好社区生态,让开发者可以对接用户的需求。未来这个社区的开发方向和用户实际的需求可以做直接的对接,而不一定通过软件供应厂商,因为厂商的优先级很多时候体现了付费客户的需求,尤其是大客户的优先需求。面对海量的开发者与社区用户,我们需要这样一个平台,让长尾的用户能够把声音传递到社区,和社区长尾的开发者对接,这样才有助于社区的健康发展。
我们要重视社区、重视人,而不是重视代码本身。有些公司开源的代码,会有人跳出来会说你这个代码写的不好,我觉得这是一个对开源非常不友好的行为。不管是任何公司开放任何代码,这都是值得鼓励的一个现象。如果代码写的不好,你可以帮助它变好,哪怕是写一个类似的东西开放出来和它竞争。开源在中国还是一个萌芽期,在这个情况下过分强调代码质量,而不是开源本身的行为,我觉得会有点拔苗助长。
最后一句话总结今天的演讲,第一个是作为我们的开发者来说应该大胆开源,把一些产品还有技术大胆的开源出去,开源有很多的商业模式,我觉得开源软件的商业模式在云时代下会越来越成功。第二个是对于用户来说,要放心、大胆的使用开源软件和技术,因为这个时代基于开源技术的产品完全可以满足大多数的场景和需求,而且能够保证你不被少数的闭源软件所绑架。
此文已由作者授权腾讯云 + 社区在各渠道发布
获取更多新鲜技术干货,可以关注我们腾讯云技术社区 - 云加社区官方号及知乎机构号