Modern Data Stack,简称MDS,中文翻译为现代数据栈,是一个在美国及其他一些国家近几年来十分流行的概念。由于各种原因,这个名词在国内并没有像深度学习、云原生、web3等概念一样被炒的火热。我在搜索引擎上搜索了一下“现代数据栈”这个中文名词,发现绝大多数文章也是更多的直接翻译英文文章,或者是笼统的介绍一下基本概念。作为一家打造现代数据栈上软件产品的公司,我们对现代数据栈这个名词有着自己的理解。在本文,我想结合中国与美国的实际情况,谈谈我对现代数据栈的产生、落地与发展的一些思考。
什么是现代数据栈?
现代数据栈通用(也可能是不清晰)的解释是一系列构建在数据仓库周围的简化数据集成的工具。现代数据栈根本的出发点是节省工程师/分析师的时间。所谓数据集成,其实就是将不同数据源的数据放到一起,然后进行分析与操作。比如,在一个电商网站内,肯定有用户访问数据、用户下单数据、商品信息数据等数据源。通过把这些数据通过某些方式放到一起,我们就能够得到一些知识,比如哪类用户对哪些商品感兴趣,哪类商品好卖等等。现代数据栈总的来说,就是在帮助人们将数据变成知识。
看了以上对于现代数据栈的定义,大家很可能会说:这个架构哪里“现代”了?听起来是不是就是为了商业推广而硬生生造的词?的确“现代数据栈”这个词听起来太广告,以至于大家可能对这个词有所抵触。在更深入理解现代数据栈之前,我们先探究一下谁先发明了这个词。
谁发明了“现代数据栈”这个名词?
坦白说,我们可能很难找到一个非常明确的答案。但可以确定的一点是,这个词是由Fivetran,dbt,以及其他同类公司和他们背后的投资机构所发扬光大的。
通过查阅互联网,我们可以发现,这个词先火起来的年代是2020年以后。关于现代数据栈,其实有名的是来自于dbt的CEO Tristan Handy在2020年下半年的演讲/文章:“The Modern Data Stack: Past, Present, and Future”(The Modern Data Stack: Past, Present, and Future)。这篇文章把现代数据栈分成三个时代:寒武纪大爆发一期(2012-2016),部署(2016-2020),与寒武纪大爆发二期(2020-2025)。具体这个定义是什么,我建议还是阅读原文。在同年,另一篇来自于美国知名风投a16z文章也发表了,文章名为Emerging Architectures for Modern Data Infrastructure: 2020 (https://future.com/emerging-architectures-for-modern-data-infrastructure-2020/)。 这篇文章从投资机构的视角来阐述了在2020年美国各类科技公司所使用的技术架构。
实际上,经过更加深入的搜索,我们会发现,另一家创业公司Fivetran的CEO George Fraser在2019年的一个演讲中就提到了这个概念:https://www.fivetran.com/blog/competitive-analytics-requires-modern-architecture。而在Twitter上,dbt CEO又提到,他自己早在2016年就提出过类似的现代BI栈的概念。
为什么要有现代数据栈?
知道了现代数据栈的历史,那就可以回到之前的问题:这个架构哪里“现代”了?我们为什么要有所谓的“现代数据栈”?以前的技术栈不好吗?要回答这个问题,我觉得大家应该把焦点放在“数据”上,而非“现代”上。现代数据栈的核心是数据,而非技术。这个词本质的地方在于让大家改变了公司使用技术的看法:公司不再会为某一个技术产品建立堆栈,而是为自己的数据建立堆栈。
我们回想一下20年前企业管理数据的方法。20年前,无论是美国还是中国,企业的数据基本都是存储在Oracle,IBM,Microsoft这些厂商所销售的数据库中。这边有几个特点。,Oracle,IBM,Microsoft这些老牌厂商所售卖的数据库价格昂贵,并不是所有企业都买的起数据库的。第二,数据库厂商提供的是咨询与支持服务,而非运维服务,通常企业需要自己雇佣一个专门的DBA团队来运维这些数据库,在这些数据库上搭建应用。第三,不管是数据量还是应用量都不会很大。由于这些事实,当企业管理自身数据的时候,与其说是为自己的数据搭一套架构,还不如说是选用一个数据库之后,为这个数据库搭建一套架构。
而时代变了。过去的20年中,企业的数据规模与应用数量明显呈现指数型增长,企业的需求催生出了一批数据库产品,而云计算的产生与推广,进一步刺激了更多企业使用数据库,并反过来推动了数据库领域更持久的发展。相比于20年前,数据软件的价格与使用门槛已经大幅降低;数据软件提供商不再仅仅出售软件,而是出售服务;数据软件不再比拼性能,而是比拼可用性。当面对海量的数据与应用,且数据软件的价格足够低廉、性能足够时,企业自然而然的就会去考虑如何让数据的管理变得更加简单。让数据的管理变简单,这就是现代数据栈产生与发展的初衷。
如何使数据的管理变简单?
上面提到,现代数据栈的倡导者包括了dbt,Fivetran,a16z等一众数据软件公司与投资机构。他们是什么关系?实际上,a16z投资了dbt与Fivetran,而dbt与Fivetran是紧密合作关系,而两家都想改变的东西就是数据的导入与使用方式:他们都希望企业导入与使用数据的方式,从传统的Extract,Transform,Load(ETL)变成Extract,Load,Transform(ELT)所谓ETL,就是从数据源到数据仓库中,需要经过数据抽取,数据转换,数据导入三个步骤。而ELT说的是,从数据源到数据仓库,只需要经过数据抽取与数据导入,而数据转换直接在数据仓库中进行。用更通俗的语言来表述,ETL所倡导的方式,就是将数据源中的数据经过一定加工再插入到数据仓库中,而ELT所倡导的方式,就是数据直接从数据源插入到数据仓库,让数据仓库来处理数据加工的步骤。上面所说的Fivetran公司,就是在做E跟L这两步,而dbt就是在做T。
把传统的ETL变成新型的ELT,让数据的复杂计算从数据仓库以外挪到了数据仓库内部,这样就把整个数据的管理变简单了。这听起来还是有点玄学:ELT如何简化我们的数据管理了?就这么简简单单一步就能够把公司里的“陈旧技术栈”变成“现代数据栈”?
想象一下没有ELT的时候我们数据管理是怎么样的。一个公司的员工希望对原始数据进行分析,TA使用ETL工具构建出管道来将数据清洗、加工成数据仓库中的表X,然后在数据仓库中对表X进行分析。在分析的过程中,TA发现自己少提取了一列数据,或者数据加工的方式不对,又或是数据的单位等是错误的。那这时候,TA该怎么办呢?的办法就是重新从数据源拿数据,重新构建ETL管道,重新进行数据分析。而往往数据源中的数据是有时效性的,通常企业只会将数据源保存7天或者30天,也就是说,当TA想要重新拿数据、构建管道、进行分析的时候,原始数据可能就已经丢了。
ELT用一种简单粗暴的手段解决了这个问题:直接将原始数据存在数据仓库中。当原始数据存在数据仓库中,那么就不存在所谓数据丢失的问题了, 历史记录通通能够找到。当想要进行数据加工的时候,我们也不构建任何管道进行处理,而是直接写SQL,利用数据仓库本身的计算能力进行加工。
这听起来太简单了,简单的不像是2020年代出现的东西。为什么20年前不用ELT?为什么直到近些年才开始推崇ELT?我觉得原因有几方面。一方面,20年前的数据量比较小,数据格式相对现在比较单一,处理需求不高,大家开发应用哪怕挺麻烦,但是都能够通过堆工程师的方式来解决。另一方面,20年前的数据库系统实在太贵,大家买不起或者说不愿意在存储大量数据上花费很多钱。还有一方面,就是当时的数据库系统性能还是比较弱的。而如今,工程师成本高昂,应用复杂多样,再也不能够简简单单靠堆工程师来解决问题;云计算的出现让数据仓库的成本大大降低,使得廉价存储海量历史数据成为了可能;数据仓库的性能得到了大大的提升,在数据仓库内进行大量数据加工变得不再困难。
仔细思考一下,我们就会发现,ELT的本质其实就是将数据仓库变成整个数据管理的中心,尽可能的使用数据仓库的能力来处理数据问题。而回到本文的主题,这种以数据仓库为中心的构建栈的方式,就是现代数据栈所倡导的方式。大量利用数据仓库的能力。ELT只是现代数据栈中的一环,实际上,现代数据栈还囊括了其他各个方面,包括了数据可视化,元数据信息的管理,数据发现,数据分享,等等方面,在这里我们就不一一展开讨论了。
现代数据栈与云计算是什么关系?
现代数据栈与云计算是强相关关系,但并没有必然的因果联系。而云计算从事实上的确是催化了现代数据栈的发展。现代数据栈的本质是为了数据管理变简单,而云计算是为了数据管理变低成本,出发点是不一样的。但是,如果没有低成本的方案,就无从谈论如何将数据管理变简单了。
现代数据栈上是否会出现一个大一统的系统?
这里所谓的大一统,是指一个什么都能做的系统:既能支持事务型处理,又能做分析型处理,还能做流处理,还能搞数据可视化,再把数据分享、发现等等方面都用一个系统做掉。我觉得这是一个非常美好的想法,但是从实际情况来讲,我认为这种系统很难被广泛使用。大家一定会用Snowflake、Databricks等例子来证明这么做是可行的。但我想强调的是,这里的问题不在于技术上可不可行,而在于产品上能不能为人所广泛接受。
我觉得可以从产品竞争与用户需求两个角度来去探讨这个问题。从产品竞争来说,现代数据软件所竞争的点已经不止于性能与价格两方面了,厂商已经把竞争的点扩展到了安全性、易用性这些更加“软”的层面。大一统的产品往往很难在单一维度跟一些专攻这个维度的产品所抗衡。一个很好的例子就是Zoom。尽管很多办公软件,包括Slack,Microsoft Teams等等,都能打视频会议,但Zoom通过它的专业性与易用性成为了视频会议这一领域当之无愧的赢家。从用户需求方面,用户其实很少有需求用到大一统系统当中所有的功能。对于中小型企业,往往使用到的仅仅是一堆功能中的两三个功能,这时候他们可能更加倾向于把这两三个功能做的好的系统。成熟型的用户的确会使用到各种功能,但是当想要说服这样的用户替换掉自己的一揽子现有系统的时候,用户往往会由于高昂的迁移成本而却步。
当然了,也有各种观点支持大一统系统存在的合理性的。常见的观点就是,企业级用户往往只想把事情解决,而不会想用什么系统,而大一统系统的存在可以大大解决的企业选择产品的问题,而这样的系统提供的统一的使用体验更适合企业用户来使用。
我觉得这个问题是讨论不出一个标准答案的。我会认为未来的趋势是共存,而大一统的系统还是会是少数。无论是瑞士军*刀还是水果刀还是美工刀,都是有自己的生存空间,不至于是瑞士军*刀把其他各种刀的市场都卷完了。
为什么现代数据栈在美国流行,而在中国不流行?
现代数据栈这个名词提出于美国,经过美国的一众创业公司与投资机构的鼓吹,毫无疑问会把这个概念普及到美国的千家万户。而对于中国来说,这个词现阶段还是陌生的。我认为一个很重要的原因就是在于中国的云市场相比于美国还是落后了不少。查了一下新的数据,发现阿里云与腾讯云的总和加起来也只有8%,与市场的前三AWS,Azure,GCP还是有不小的差距。如上面所说,尽管云计算与现代数据栈没有直接的因果关系,但在一个云计算还不成熟的市场上推现代数据栈,我相信是很难的。
当然了,除了云计算这方面之外,我认为还有用户习惯的问题。中国的用户已经习惯于使用大一统的产品。而大一统的产品对现代数据栈这种涵盖了各种各样软件产品的东西来说肯定是一个抑制作用。而美国的用户已经习惯了散装,让他们使用大一统的产品反而会让他们担心所谓供应商锁定(vendor lock-in)的问题。使用散装的产品,给了用户极大的选择的权力,我相信这也是美国社会所倡导的东西。
总结
现代数据栈为用户的数据服务,彻底改变了20年前用户为巨头产品服务的情况。现代数据栈的目标是大大简化用户管理数据的难度,让用户更加关心于数据本身,而非软件。当然了,由于种种原因,现代数据栈在中美两国可能会面临不同的命运,让我们拭目以待。