它的传奇,不该只存在于财经报道:Snowflake设计揭秘

2,220 阅读6分钟

要问近年最火的大数据公司,那肯定是Snowflake了!就在技术圈的主流声音都评价说Data Warehouse数据仓库概念太老了,要拿Data Lake数据湖或者lakehouse说事儿时,人家就能把数据仓库玩出花,玩到主流都仰望的地步。2020年9月,高举DataWarehouse-as-a-Service(简称DAAS)大旗的Snowflake正式IPO,首日市场估值便高达700多亿美元,成为迄今为止规模最大的软件IPO。Snowflake一跃成为资本市场炙手可热的超级独角兽,更是各大互联网公司战略部的头号研究对象。

这个系列,我将从大数据码农的角度,分析其底层设计架构,来说说,它,凭什么

(以下关于Snowflake的设计内容均来自其公开论文《The Snowflake Elastic Data Warehouse》,想看原文的同学,自己找去)

先有痛点,再有解决方案

毕竟,技术再怎么发展,都是要解决实际问题的。

大数据发展至今,各个公司的大数据架构体系基本趋于一致。

数据从终端诞生,通过对应的采集方案流向大数据集群,以底层是HDFS的形式存储。接着,数据会被整合和定义,有了一层一层的整合和面向不同领域的分支,这也就是我们说的数据仓库。最终,需要数据分析的用户会使用已经被处理了的,定义好的数据进行分析和处理。

在硬件方面,基本有两种选择。

(1)租用公有云的机器,按年和资源收费,好处是不用自己运维。

(2)自己买机器甚至租用机房,雇用专业或不专业的运维人员。机器一次买断,人员需要薪水。

所以对于硬件,一般数据量不大的企业会选择第一种,年租金算下来还是比买机器雇人的要便宜些。数据量大的,那肯定还是自己买机器自己出薪水划算,毕竟一个人能管一堆机器,而且机器好几年才需要维修换新。

那些今年数据量不大,但是预估明年数据量要增长,但又无法准确预估的企业,要怎么办呢?

在软件方面,基本也有两种选择。

(1)用别人的,付费。国内外都有很多成熟的数据平台服务企业,可以一次买断,还可以选择SAAS(Software-as-a-Service)的方式按年付费。当然现在公有云厂家也推出了自己的平台,主打从选硬件机器到软件服务,一站式解决。

(2)自己开发,付薪水。可以选择自己搭建大数据团队,负责平台的开发,数仓的建设等。虽然成熟度不一定能一下子赶上别人要挣钱的那种,但是自家用肯定没问题,毕竟底层技术都有开源的,也很稳定。

很明显,对于软件的选择,一般数据使用频率不高的企业会选择第一种,SAAS是很好的设计,在数据使用不稳定时能减少成本,甚至可以直接一站式选购,更简单。但是数据使用频率高,而且处理方式很复杂的团队,就会花薪水自己建立,虽然早期开发进度和稳定性不能一步到位,但是软件成本是能摊薄的,随着企业的不断扩大和大数据应用的丰富,这个均价非常划算。

那些今年使用不复杂频率也低,但是预估明年数据使用要增多应用要丰富的,但又无法准确预估的企业,要怎么办呢?

这就是Snowflake核心要解决的问题。

  1. 对资源的使用仅能靠人工经验进行预估。无法预估具体使用而只能提前预购公有云资源,但实际使用会造成浪费,如果临时发现不够再次补充,公司流程又走的慢。
  2. 半结构化、非结构化数据需要纳入分析。相比于网站埋点,APP采集数据等这类数据格式较为清晰的情况,越来越多的非结构化数据需要纳入分析范围,例如iot回传数据,音频、视频等。
  3. 数据仓库搭建需要T+1,等不了。越来越多的数据需要快速分析反馈,等不了T+1的时间来一层层构建。

这些问题,既是商业上的问题,也是技术上的问题。

就从架构开始吧

从论文里截图的,可以直接去下论文

这张图应该算是全网流传度最高的一张图了。毕竟,不管懂不懂技术,开局一张架构图,逼格就够了。

Snowflake是怎么做的呢?我们就从这张图开始分析:

Snowflake设计了一个平台,相较于现在大家能看到的各个自研的或者卖钱的平台底层用的都是开源Apache那一套,人家是直接把底层计算引擎都自研了。

整个平台分为三层,自下而上分别是存储层,虚拟仓库层(计算引擎层),云服务层。将计算和存储拆分,是存算分离的设计,这个设计也是snowflake能够做到“弹性”的秘密武器。

存储层:托管给亚马逊S3对象存储。Snowflake认为对象存储已经能很好的满足弹性存储的需要,因此直接托管了。但是S3也有所有对象存储的通病,就是读写数据经过网络,会有性能损耗的问题。

虚拟仓库层:简称VM,是Snowflake用于评估计算的节点,换言之用户选择节点时,不是按照公有云厂商那种提供一堆专业名词选择机器的方式,而是说你要计算,就要用VM来计算,至于大小分为S/M/L/XL/XXL/XXXL。这种类似选衣服的方式,直接有效的表明每个VM具体的可执行任务的复杂程度,对用户也是相当友好地。这个特点也是Snowflake在所有的商业案例中被认为成功的最大亮点来源(说明三位技术创始人还是有一些产品设计头脑的,哈哈)。

云服务层:作为三层中的“大脑”,这一层用于对用户提供服务,以及管理VM。当然从技术上来讲,它还要管理所有的查询啊,事务处理啊,元数据啊,schema啊等等。

在下一篇中我们会详细说明Snowflake在这三层的设计方案。(有可能一篇说不完,拆成两篇吧)