当今第一独角兽 Snowflake

Snowflake 是一个初创公司,也是一个完全基于云端构建的弹性数据仓库和云端数据仓库公司。它是大数据时代数据分析的一个重要的公司。目前价值120亿美元。

Snowflake 成立于 2012 年,总部设在加州下属的一个小城市圣马特奥。Snowflake 的创始人是本纳特·达格维尔(Benoit Dageville), 蒂里·克鲁安纳(Thierry Cruanes )以及马尔辛·茹科夫斯基(Marcin Zukowski)。这三位都是欧洲人,不过,现在都在美国发展。本纳特早年在欧洲计算中心做研究,主要工作是并行数据库。后来,他来到了 Oracle 公司发展,并在 Oracle 待了 16 年。前 6 年是负责领导 Oracle 的并行执行引擎组,后面 10 年一直在做 Oracle 的架构师。在 Oracle 里,架构师是一个明确的级别,这个级别非常不容易达到,需要公司里所有架构师全部同意才能晋升。能够在 Oracle 里面做到这个位置的,自然是非常厉害的人。蒂里也是欧洲人,他在巴黎攻读完成数据库方向的博士,来到美国之后,先在 IBM 工作了四年,又在 Oracle 工作了 12 年,也是一位资深的数据库专家。

1
Snowflake 的产品主要是一款基于云的数据仓库。2014 年发布的时候,所谓的云当然是指亚马逊的 AWS。确切地讲就是 S3 的存储和 EC2 的虚拟机。这款数据库是由 Snowflake 的成员从头开发的。它的主要想法是存储和计算要分离。Snowflake 的数据被压缩以后存在亚马逊的 S3 上,每个文件的大小大约是 16MB。文件的格式是列存,每个列被单独存成文件。当数据需要处理的时候,Snowflake 的处理引擎会启动 EC2 的虚拟机,虚拟机从 S3 读取数据,然后使用本地的磁盘作为数据的缓存。如果多个数据查询发生,每个数据查询的执行引擎在本地各保留了一份数据。当然查询结果被写回 S3 的时候,如果两个查询需要更新同一张表,Snowflake 有某种写保护方式避免数据写入发生冲突。

参考 Snowflake Architecture
Snowflake’s unique architecture consists of three key layers:

Database Storage

When data is loaded into Snowflake, Snowflake reorganizes that data into its internal optimized, compressed, columnar format. Snowflake stores this optimized data in cloud storage.

Snowflake manages all aspects of how this data is stored — the organization, file size, structure, compression, metadata, statistics, and other aspects of data storage are handled by Snowflake. The data objects stored by Snowflake are not directly visible nor accessible by customers; they are only accessible through SQL query operations run using Snowflake.

Query Processing

Query execution is performed in the processing layer. Snowflake processes queries using “virtual warehouses”. Each virtual warehouse is an MPP compute cluster composed of multiple compute nodes allocated by Snowflake from a cloud provider.

Each virtual warehouse is an independent compute cluster that does not share compute resources with other virtual warehouses. As a result, each virtual warehouse has no impact on the performance of other virtual warehouses.

For more information, see Virtual Warehouses.

Cloud Services

The cloud services layer is a collection of services that coordinate activities across Snowflake. These services tie together all of the different components of Snowflake in order to process user requests, from login to query dispatch. The cloud services layer also runs on compute instances provisioned by Snowflake from the cloud provider.

Among the services in this layer:

  • Authentication
  • Infrastructure management
  • Metadata management
  • Query parsing and optimization
  • Access control

不同于传统的三类云服务,Snowflake提出了data-warehouse-as-a-service(DaaS)的概念。什么是DaaS?可以简单理解为原生于云端并专注于数据仓库的SaaS服务。

No hardware, no software, and completely maintained on cloud

注意Snowflake的云端原生性,和很多数据仓库提供商支持云端服务并非同一概念。传统大厂例如Oracle,Teradata,Netezza,乃至后来穿上马甲的AWS Redshift,都并非诞生在云时代的产品。尽管或多或少支持云端,因为本身产品架构的局限性,他们常常被证明并不能良好地解决很多现代企业面对的各种数据需求与问题。

用户要什么

数据的重要性不言而喻,但用户需要怎样的数据平台与服务却并不是三言两语就能说清的一件事。或者说,从Bill Inmon定义数据仓库之后至今50年,面对眼花缭乱的技术和产品,企业在数据仓库的解决方案中最需要的价值服务在哪里?

1、性能(Performance)

无论在什么行业,客户一定会要求:快!更快!性能是数据平台的准入门槛。如何在petabyte级别的海量数据量面前展现优秀的性能,同时尽可能的降低成本,是传统数据仓库的死穴。只有借助云端的资源才有可能在这个数量级上讨论这些问题。

2、并发性(Concurrency)

数据仓库的业务逻辑是提供给企业一个统一版本的数据层。当不同的用户同时访问同一数据时,如何保证性能不受影响是并发必须解决的问题。尤其在self-BI的时代,终端用户不用通过IT生成报表,数据要求越发实时性,安全需求更加复杂,都给数据仓库的建设提出新的挑战。

3、易用性(Simplicity)

传统数据库,乃至新兴的开源系统,都逃不出运维的魔咒。大部分的数据解决方案都建立在必须雇佣专业的admin进行调试和维护的假设上。事实上,企业不应过多投入到自己不擅长的技术领域,而应该专心于业务上的开发以创造价值。相反,数据平台则应该尽可能多地担任自动化的角色,涵盖底层服务,面对用户提供最简单易用的功能。

全新的底层架构

针对以上的需求以及现有技术的诸多局限性,Snowflake提出了独特的存储、计算以及管理服务分离的架构。这里我们要先提到一些传统架构以及其代表性的产品。

Shared-disk顾名思义,数据存储在同一位置,大家享用同样的资源。这种架构很容易在多用户访问的情况下导致系统崩溃,同时也难以满足高频读写、数据复制与迁移等需求。Oracle Exadata采用了这种传统的数据仓库架构,几乎在延展性和并发性上都落后于时代的发展。

Shared-nothing是近年来更主流的一种做法。系统通过优化规则将资源分摊到各个节点,而每个节点不共享任何数据。这样一来,数据的处理过程就不存在争抢资源的情况,从而提供更有效率的延展性和并发性。像Netezza,Teradata,以及Redshift都采用了这样的架构,这也是Hadoop工作的基本原理。这种架构对于数据仓库应用来说有独特的问题,那就是节点资源没有将存储和计算分开。举个例子,当升级或者扩容发生时,系统需要重新分配节点资源,那么数据本身就会面临大量的迁移。这样的操作不仅费时费力费钱,也会大概率降低甚至暂停数据的查询功能,给终端用户造成使用上的影响。

Snowflake在Shared-nothing的基础上提出了Multi-cluster, shared data的概念。这种架构的关键在于将存储和计算彻底分离,从本质上解决了传统架构的痛点。

1、存储层(Storage)

存储层目前支持AWS S3和Azure Blob,相信Google Storage在可期的未来也会兼容。所有数据在存储层被全部加密以及columnar压缩,最大限度的优化存储效率。理论上讲,存储层可以在无关计算资源的情况下进行无限扩容,所以我们不需要加任何节点就能自动沉淀所有数据,这也是为什么Snowflake也可以作为data lake的原因。从表结构上讲,Snowflake将所有表自动划分为接近固定大小的micro-partition,用以支持更加高级的time travel和data sharing功能。举个例子,即使对数据库进行了clone,在逻辑上有了两个数据库,而底层的存储仍然只有一个版本。这也很好契合了数据仓库在并发性上的业务逻辑。

2、计算层(Compute)

计算层由诸多virtual warehouse组成,其本质就是处理数据的虚拟机节点。Snowflake很贴心地用T-shirt尺寸定义了算力,相比较其他云计算资源,极大地简化了provision的过程。由于计算层独立于存储层存在,我们可以想象出很多传统架构中遇到瓶颈的应用场景。譬如可以随时提高或降低计算资源以应对需求,可以在搬运数据的同时进行查询,可以给各个LOB提供合适的资源并独立出ETL和DevOps的处理需求。而最令人兴奋的是,这些不同计算资源看到的都是同一版本的数据。

3、服务层(Services)

服务层的独立是另一个我认为Snowflake走在正确道路上的原因。它由众多global services组成,涵盖了我们传统意义上数据仓库的诸多admin任务,包括operation management,optimization,tuning,security,availability,metadata,caching等等。这一层还有transaction management这个重要的使命,对所有计算层的virtual warehouse进行管理,保证不同的数据处理请求被高效稳定地应用在存储层的同一数据上。服务层解决了数据仓库易用性的问题,目前我还没有看到任何一款数据平台产品能够帮用户处理这么多的非功能性任务。即使是同为云数据仓库的Azure Data Warehouse,需要的管理和运维成本不可同日而语。

Snowflake 一出来的时候,它就号称自己的 SQL 支持 SQL1998 和 SQL2003 里面的大部分分析函数。它的数据库产品和 SQL 的兼容性好,Snowflake 的数据模型并非只是基于纯粹的关系数据库,它同时也支持半结构化的数据。不过,作为一个数据仓库产品,Snowflake 本身并不支持索引。当然 Snowflake 还是会对每个文件记录最大最小值,这些信息可以用来让优化器过滤一部分的数据读取。Snowflake 的收费方式主要有两种,一种是存储的钱,这个按月收费。另外一种块是 EC2 上跑处理程序的时间,用了多少收多少。Snowflake 有很多不同档次的收费计划,其区别主要是数据库里面保存了多少个以前的版本。比较低级的计划只保存了 1 天的,而比较高级的计划可以最多保存 90 天内的所有版本。从技术角度来讲,Snowflake 的实现方式,因为是从头开始搭建的,所以它能够很好契合云计算的架构,也就是存储和计算分离。

Snowflake 和亚马逊之间的关系,最初是很友好的合作关系。但是后来亚马逊进军了数据库市场,并推出了 Redshift。Redshift 作为一个云端的数据库产品,由亚马逊自己提供,并且与自家的 S3 做了整合。亲儿子和干儿子之间的区别是很明显的。尤其是当亚马逊今年推出了 Redshift Spectrum 以后,Redshift 就具备了扫描 S3 文件进行查询的能力了。这个能力让 Snowflake 使用 S3 作为廉价存储的梦想受到了打击。总而言之,现在整个云计算市场上最为明显的竞争对手肯定是 Redshift,这一点,Snowflake 多少还是感觉到了威胁的。为了应对这种变化,Snowflake 的做法是在西雅图成立了分部。Snowflake 在西雅图的分部主要从微软 Windows Azure 招人,为的是在 Windows Azure 的存储和虚拟机上实现类似于自己在亚马逊上提供的服务。大概是 2016 年下半年,Snowflake 从微软的某个云计算部门挖了一个经理,开始组建这个部门。之后陆陆续续的,公司在西雅图的部门逐渐扩展到了 10 多个人。并在 2016 年底进军 Windows Azure 市场。目前 Redshift 还离 Snowflake 还有一段距离

Snowflake 有一些固定的客户,它的商业模式里面,最大的不确定因素是如果云计算厂商自己也想抢 Snowflake 想做的生意。云厂商对自己的存储和计算服务最熟悉。第三方开发怎么样也不可能比自己开发得到更多的支持。这是 Snowflake 尴尬的地方。那么,Snowflake 要如何打赢这场仗。当亚马逊做了 Redshift 之后,Snowflake 还是可以去做 Windows Azure 上面的生意。如果微软也介入这个市场,Snowflake 是不是只能去做谷歌的生意呢?如果要是谷歌也介入这个市场,Snowflake 怎么办?从这个角度来讲,云计算的数据库服务如果没有底层基础平台的话,要想在竞争对手的围攻下胜利,是一件不容易的事情。在云计算上非常成功的应用软件厂商 Salesforce,它之所以没有倒下,很大程度上也是因为它的服务是跑在自己的基础架构上,而不是 AWS 或者微软的服务上的。虽然 Salesforce 最近也在和 AWS 合作紧密,主要还是亚马逊目前没有进入企业 CRM 市场的打算。而当亚马逊或者微软自己也介入到同样的业务里面来的时候,这种竞争关系就会非常麻烦了。第三方厂商既依赖云厂商提供的基础服务,又和云厂商的服务竞争。这对它们显然是不利的。

根据最近的信息,著名的创业公司,云端数据仓库提供者Snowflake经过最近一轮的融资,其市值已经达到120亿了。这是一个很多创业公司上市之后都很难达到的高度。

撇开这一轮巨额融资,Snowflake之前做的另外一件事情就是把长期以来伴随公司成长的老CEO Bob Muglia也被换成了新CEO Frank Slootman。这两任CEO都不是省油的灯。

前者Bob Muglia从微软的一个产品经理开始做起,一直做到微软的资深副总裁,负责了微软2000年前后和美国司法部反垄断官司。离开微软公司,主要是和时任CEO Steve Ballmer不和。之后在思科蛰伏了一段时间,伴随Snowflake在steal mode的时候就出任其CEO了。

后者的简历也很辉煌。Frank Slootman是带领创业公司ServiceNow上市的CEO。有关这个临阵换帅,到底是啥目的,有些说法是看重了新CEO带领创业公司上市,以及在企业管理软件市场深厚的背景经验等等。

在这次融资以后,Frank Slootman接受了CNBC的采访。在采访里面,Frank Slootman表示公司并不缺钱,一年前融资的差不多的钱还放在银行里基本上分文未动。这次融资最重要的是和Salesforce建立战略合作伙伴关系。从融资上看,Salesforce Ventures成为了新的投资伙伴之一。

在采访中,Frank Slootman表示这次融资并非是普通意义上的一次融资,而是把一部分的share换成cash。从这一点看,让Salesforce在上市前成为股东,并和Salesforce建立战略合作伙伴关系,应该是这次融资的核心。

CNBC的采访还问了两个比较核心的问题:1.Snowflake会不会在总统大选之前上市,2. Snowflake会不会像Spotify那样用direct listing。CEO当然没有直接回答,但是总体的来说,第一个问题的答案听起来应该是yes,也就是说总统大选前会上市。第二个问题听起来是No。Snowflake不打算用direct listing。

对于后者其实是可以理解的,企业软件市场需要大金主能长期持有大量的股票,direct listing显然无助于这样。那么现在的估值已经124亿美元的Snowflake会以什么样的价格上市呢?这个问题显然是吸引很多人的。

Frank Slootman表示云是前所未有的机会,比之前的任何机会都大。CNBC的主持人还问,是不是以后Cloud会进一步整合,到巨头那边去。Frank Slootman的回答展现了CEO的狡猾。他说这个问题巨头们来回答最合适。。

简单来说,Snowflake作为一个在不同的云上都能跑起来的,企业级数据仓库,在成本和安全性上都有其优势。既可以避免企业lock-in到一个特定的数据仓库里(比如Redshift或者BigQuery),又提供了云端的数据仓库解决方案。

Snowflake的元数据层基于fundationalDB实现,对企业市场来说,security和governance是和性能一样重要的东西,Snowflake这方面做的就相当的好。

有人会问为什么Hadoop的生态圈里面就没有能够做出一个类似的产品来呢?Hadoop生态圈做的很多事情其实也和数据仓库差不多。只不过Hadoop的架构本身太基于文件层了,尤其是权限的管控方面,看起来不像是一个数仓的样子。而其上面的查询引擎的效率,一直都值得打个问号。

数据仓库的进化

Snowflake的架构完美诠释了数据仓库产品的进化史,它被设计成为精准的制导导弹用于解决众多的历史遗留问题。而Snowflake能做到这一点,自然是因为它诞生在云服务的企业化应用最成熟的时代。技术上,Snowflake可以一身轻松地摆脱底层引擎的限制,转而尽可能地借用现成的资源。无论是存储上用到的S3, Blob, 还是计算上的VM,都是最基础(也最便宜)的云端资源。这些资源对于企业来说就像我们生活中的水和电一样,而Snowflake则通过整合这些基础资源,制造出了电视机、洗碗机、微波炉这样解决具体业务问题的产品。

除了上文提到的那些传统数据仓库提供商,我们也能看到很多其他符合大数据和云服务气质的解决方案。例如Hadoop,Hive,Spark这样的开源大数据平台;或者是AWS Redshift, Azure Data Warehouse,Google BigQuery这样的云数据仓库。特别是AMG这三大主流云服务提供商,都具备自家成熟的云数据仓库服务,似乎在很大程度上和Snowflake形成了直接的竞争关系。尽管如此,我们在为客户做竞品分析的过程中,依然能发现这些产品服务在应用上的众多差别。除了技术上细节的讨论,我们应该注意到这其中策略上更有趣的问题。为什么Microsoft在力推Azure Data Warehouse的同时,还要和Snowflake这样的SaaS服务商合作来抢自己的生意呢?这里面的商业逻辑暂不深究,我们且谨记住,云计算对现代商业的性质已经变成了水和电。对服务提供商来说,重要的不是你买不买我家的电视机,重要的东西只有一个词:Consumption!

这些年做data analytics咨询也发现了一些有趣的现象。无论是对客户还是产品的提供方,传统的数据仓库(DW)和商业智能(BI)开始被疏远,大部分新的项目则来自与本地到云端的integration和migration的需求。在云计算和大数据的冲击下,成熟的数据仓库理论甚至成为了架构里的政治不正确。譬如我上一个服务过的软件公司,就明确表示过像EDW和ETL这样的字眼不能出现在市场定位中。

为什么大家开始对数据仓库讳莫如深呢?恐怕传统的数据仓库给人留下过许多不好的印象:花钱多, 灵活度低,令人头疼的运营管理等等。好在近年来,modern data warehouse这个概念火了起来,利用云计算的壳解释了现代数据仓库存在的合理性。而随着企业日新月异的数据需求和技术的进步,更新的架构层出不穷。有没有一种服务能提供把数据平台上的data lake, data mart, 以及semantic layer这些元素都取代的架构呢?未来的数据仓库又会在应用中扮演怎么样的角色呢?