Modern data stack的前世今生

2022-06-08 14:00:27 浏览数 (1)

古老的大数据技术孕育了云计算,从云计算中衍生出了SaaS、PaaS等云服务,而云服务又让大数据技术在新时代获得了新生。

这里的古老不是指几百年、几千年前,而是指二十年前。对于计算机科学领域,二十年前的技术已经足以称之为古老了。一切都要从谷歌发表的那三篇论文说起,《MapReduce: Simplified Data Processing on Large Clusters》、《Bigtable: A Distributed Storage System for Structured Data》和《The Google File System》,这三篇论文介绍了 Google 如何对大规模数据进行存储和分析。它们奠定了大数据技术的基础,《MapReduce: Simplified Data Processing on Large Clusters》让数据工程师可以在多台机器上进行稳定的计算,《The Google File System》意味着我们能存储的数据量不再受限于单台服务器的磁盘空间,《Bigtable: A Distributed Storage System for Structured Data》开启了分布式数据库的时代。虽然谷歌没有开源这三篇论文的具体实现,但是雅虎根据这三篇论文付出了极大的努力和代价写出了 Hadoop,而 Hadoop 被雅虎开源了,也因为这样,很多公司也拥有了大规模数据的存储和分析能力,并围绕着 Hadoop,衍生出了著名的 Hadoop 生态圈。在前十年,谈及大数据、大数据技术,某种程度上就是在讨论 Hadoop。

很多公司都会在 Hadoop 生态圈根据自己的需求选择合适的开源工具,按照数据存储、传输、计算、应用四个模块组成自己的数据平台,服务自己的业务场景,让普通人也能拥有大规模数据的处理和分析能力。这就是 1.0 版本的数据平台。借助数据平台的力量,公司获得了飞跃的发展,比如互联网时代津津乐道的机器学习、深度学习都建立在其基础之上。

除了 Hadoop 本身以外,谷歌那三篇论文还蕴含了一个新的思想,那就是存储和计算是可以实现分离的,而不是要求都要在一台机器上完成。这一点很重要,因为后续的云计算就依赖于此,虽然这一点对 1.0 版本的数据平台并不是那么重要。

说回谷歌,谷歌其实在这三篇论文里藏了一个小心眼,它没有开源其资源管理的工具 borg,这也导致了 Hadoop 在其资源管理上一直处理的不是那么好,比如指定某一个计算任务只能拥有有限的内存、CPU,而不是无限制的占用 Linux 系统资源。虽然Hadoop 社区自己发展出了 Yarn,但是依然不是那么令人满意。随着时代的发展(Tiwtter 的 Mesos 和 Docker 技术的发展),谷歌再也藏不住 borg 技术了,谷歌公布了《Large-scale cluster management at Google with Borg》,并在其基础上推出了 Kubernetes 项目。Kubernetes 项目不仅改变了软件开发流程,同样也改变了 Hadoop 等大数据技术。

借由 Hadoop 生态圈积累的大量的经验和 Kubernetes 项目,云平台获得了新生。有了 Kubernetes ,对于工程师而言,无论他们在使用哪一种云平台提供的计算资源,都能够将他们在自己便携式电脑上的工作环境无差别地迁移到公有云上进行开发、测试和最终的大规模投产。而2018年3月份发布的Spark 2.3 正式支持 Kubernetes,这意味着用户再也不需要为了运行 Spark 而创建一个 YARN 或者 Mesos 集群了。KubeFlow 则把TensorFlow、PyTorch 以及很多其它AI框架都搬上了 Kubernetes。

后来,工程师们把这种变化称为“云原生”时代,一切基础设施和服务都要“云”化。还记得 1.0 版本的数据平台吗?它们逐渐消失在了舆论场,取而代之的是云原生下的数据平台,刚开始还没人知道这意味着什么,直到 Snowflake 的上市引爆了市场,让大家的目光聚集在 Cloud Data Warehouse(CDW) 云端数据仓库这个概念上,大家给这个旧瓶装上了新酒,称之为“Modern Data Stack”--现代数据栈。

现代数据栈通常是指构成云原生数据平台的一组技术,对比传统的数据平台,使用它们可以降低复杂度。这个技术栈的构成组件不是固定的,但是它们通常包括

  • 一个云端的数据仓库,比如 Snowflake, Redshift, BigQuery 或者 Databricks Delta Lake
  • 一个数据集成服务,比如 Fivetran, Segment 或者 Airbtye
  • 一个 ELT 数据转换工具,几乎确定是 dbt
  • 一个 BI 层,例如 Looker 或者 Mode
  • 一个反向 ETL 工具,比如 Census 或者 Hightouch

虽然现代数据栈的概念是因为 Snowflake 而引爆的,但是 Tristan Handy 认为现代数据栈的源头应该追溯到 Redshift (2012)。Redshift 带给技术圈最大的影响在于它第一次把数据分析使用的数据库性能提升了10-1000倍,并且是第一个你可以按照160美元一个月进行购买而不是一年花超过10万美金购买的服务。

10-1000倍的性能提高往往会改变你对产品构建的看法。在Redshift发布之前,BI面临的最难的问题是速度:即使在一个中等规模的数据集上做相对简单分析都可能会非常对耗费时间,并且构建了一整套生态系统来缓解这个问题。一夜之间,所有这些问题突然都消失了。Redshift速度很快,而且对于所有人都很便宜。这意味着围绕解决这些性能问题而构建的BI和ETL产品都立刻成为了遗留软件,构建适合新的世界的产品的新的供应商也应运而生。企业家看到了机会并且蜂拥而至,这些产品在很大程度上定义了我们今天生活的世界。

发展到后来,一系列的软件和服务都被纳入到现代数据栈这个概念下面了,我认为与 1.0 版本的数据平台最大的区别在于:

  • 提供一个托管式的服务:1.0 版本的数据平台需要公司投入不少的运维去保证数据平台的正常运行,但是云服务环境下,用户不需要了解那么多技术细节,也不需要工程师介入,仅仅通过简单的配置就可以完成数据的处理和分析。
  • 以云端数据仓库为中心:所有的数据都存储在 Snowflake、Redshift 等云端数据仓库之上,其它工具是为云端数据仓库服务的。
  • 以 SQL 为中心的生态系统:所有工具的使用都要考虑到数据分析和业务人员,只需要使用 SQL 就可以完成所有的工作。
  • 弹性工作负载:按照使用量付费。对于突如其来的大型任务,可以随时进行扩容。对于现代的云来讲,金钱是限制规模的唯一因素。

这一切都是为了让用户不再受限于以 Hadoop 生态圈为核心的 1.0 版本的数据平台的高门槛,充分使用云作为基础设施,并且通过对服务的解耦,让用户可以根据自己的需求选择合适的服务组建自己的数据平台,一切都是配置化的,上手难度极低。

在现代数据栈的影响下,机器学习的开发也会迎来新的发展,走向声明式的数据优先的机器学习平台,典型的例子就是 MLOps。

MLOps 是为项目持续提供高质量的数据的重要保障,包括数据版本,数据质量测试,血缘管理,线上数据监控,feature store等。

也得益于现代数据栈的持续发展,数据治理迎来了一大波的开源浪潮,例如:

  • Linkedin有DataHub
  • Lyft有Amundsen
  • Wework有Marquez
  • Airbnb有Dataportal
  • Spotify有Lexikon
  • Netflix有Metacat
  • Uber有Databook

毕竟没有很好的数据治理,更多的数据就是更多的混乱,也是更少的信任。

说了这么多,但是我个人认为现代数据栈依然存在着一些隐患:数据安全。对于使用阿里云、腾讯云等云公司提供的数据存储、计算等服务时,如何保证数据安全,打消使用者的疑虑是一个值得研究的问题。对于中小公司而言,这个问题并不能成为大问题,但是像央企、国企等大型企业,数据安全就是一个超级大问题了。虽然云原生让开发者使用方便了,但是一旦自己公司的数据存上了某个云服务公司,后续就会受限于这家公司所能提供的服务。也正因为这样,各大运营商都有着自己的云服务,像移动云、联通云和翼云。

虽然我觉得现代数据栈有些造概念的嫌疑,但是云原生改造传统的大数据技术,并开始影响机器学习的发展,最后让公司使用数据更加方便和高效,却是无可否认的事实。同时,云原生也让数据平台不再局限于大公司,而是将复杂、艰难的大数据技术普惠给了小型企业。这是云原生所带来的影响,至于要怎么称呼云原生下的数据平台,则是一件小事了。

参考链接:

  1. https://zhuanlan.zhihu.com/p/481398324
  2. https://www.modb.pro/db/377598
  3. https://www.modb.pro/db/377597
  4. https://www.modb.pro/db/377596
  5. https://developer.aliyun.com/article/868034

0 人点赞