Rockset是一家在国内还几乎一无所知的云原生系统软件初创企业,当然云原生系统软件这个名词现在还不流行,那么可以称Rockset为一家大数据企业。在微信上搜索Rockset,只有两篇文章,加起来阅读量才两千出头。其中一篇将Rockset位列今年最具潜力的20家科技初创公司之一,另一篇将Rockset列入今年最值得加入的25家公司之一。这是一家什么样的神奇公司?
我找到Rockset并深入去研究它,是因为我在定向研究云原生系统软件这个主题(可以参见之前的公众号文章再谈云原生时代的系统软件),自然的关注云原生的KV系统,这样就发现了RocksDB Cloud项目,进而找到Rockset。
Rockset成立于,种子轮从红杉融了300万美金,去年底又从红杉等融了A轮1850万美金。
CEO Venkat Venkataramani在创办Rockset之前是Facebook负责在线数据平台的工程总监,在Facebook干了8年。在Facebook之前在Oracle干了5年,Principal级别。
CTO Dhruba Borthakur更资深,91年CS本科,94年Wisconsin-Madison的CS Master,上过之前提到过的数据库泰斗DeWitt的课(参见之前的公众号文章数据库泰斗DeWitt:Shared-nothing架构落幕,Shared-storage架构归来),而后在IBM、Veritas等很多公司都干过,还创业搞过电商。06年加入Yahoo,是HDFS和创始人之一,也是重要的HBase contributor。08年到在Facebook干了8年,一开始继续搞HDFS和HBase,后来成为RocksDB的创始人,应该是CEO的下属。
CEO也是Wisconsin-Madison毕业的,公司还有一位联合创始人工程师Igor Canadi也是Wisconsin-Madison毕业,前Facebook工程师。所以这个三个Wisconsin-Madison校友加Facebook队友创办的公司。这仨创始人在数据库和大数据领域的工程经验加起来就40多年了,虽然还比不上另一家云原生数据仓库公司Snowflake号称的加起来超过100年,但专业背景也算相当强。前面说到的文章将Rockset位列最值得加入的25家公司之一,主要就是基于这么牛的创始人背景。
整个公司现在还非常小,公司大合影才14个人。14个人,2150万美金,人均150万美金,Wow!
不过,老工程师多了去了,公司行不行主要还是要看趋势、战略和产品技术。趋势判断上,团队的理念主要是两个方面。一是云原生的系统架构,这点我的认同不用多说。二是认为需要综合大规模(TB级)流式半结构化数据和传统关系数据,实现实时、高并发(百级)、低延迟(毫秒级)的搜索和分析的应用场景会很普遍。CTO称这类场景为Operational Analytics(这个不知道怎么翻译,翻译成运营分析会觉得很土),核心是分析行为既高频又复杂,他称Rockset为OPAP(OPerational Analytics Processing)类系统。好哇,在OLTP、OLAP、HTAP之外,现在又多了一类新的系统OPAP。
趋势判断方面,我认为云原生系统架构的影响力远大于Operational Analytics应用场景,在接下来的产品技术介绍中,大家应该可以发现Rockset的设计用来做交互式查询啥的也应该会不错。云原生系统架构可能是时代性的,历史上一般硬件基础设施的巨变会导致系统软件市场的巨变。如分时系统造就了UNIX;Altair才Post了一个广告,艾伦就慌的赶紧去找盖茨说再不搞我们就要错过PC时代了,后来的故事很多人都知道,盖茨退了学,埋头几个月拼命码代码,为Altair搞了个BASIC解释器,成立了微软公司。所以,我的判断是,未来Rockset应该会淡化OPAP的概念,强化Cloud-Native的定位。
OK,大趋势没错,再说战略。可惜的是战略层面的信息不多(战略往往都是模糊隐晦的)。目前看出来的有几点。一是diss开源,CTO公开宣传开源模式快不行了,云原生环境下应该是Open Services的时代,意思是只要我提供的标准的API(比如REST + SQL),你管我开源不开源?Rockset的策略是开源了RocksDB Cloud组件,但整体系统不开源。二是SaaS,这点无需多说。三是极度傻瓜化的定价模式,一般情况下只按原始数据量收费,其他索引啊查询处理啊等开销都含在内不额外计费了。四是高的吓人的定价,每月每GB 6~9美金,要知道AWS的SSD存储才0.1美金,S3只有0.023美金,按两份SSD加一份S3算,原始数据基本成本才0.223美金哇。哥们这9美金的价格还真牛。
上述策略难以评价,我个人觉得diss开源没必要。不开源就不开源好了,像Snowflake那样闷头赚钱就好。不过SaaS、简化收费模式是不错的,定价嘛肯定是高价高折扣。现在也不知道有多少客户和营收,毕竟产品今年4月才发布。
最后说产品和技术。首先看Rockset假设的应用环境和场景。Rockset认为,大量的流数据 / 事件数据(如clickstream、log、iot传感器或GPS数据等)和结构化数据(主要来自ERP、CRM等)需要综合的高效的搜索和分析,应用于搜索、推荐系统、电商个性化、IoT应用、360度客户分析、安全等。面向这样的应用场景,当前的技术存在两大挑战:
1、综合两类数据是关键挑战。RDBMS擅长搞结构化数据,但要求模式建模和设计,不适用新的快速变化的环境;NoSQL系统模式灵活但进行SQL分析时需要做denormalization,且支持不了复杂的JOIN分析。这里说的denormalization指的是如果将XML、文档、nested array等半结构化数据映射到关系模型一般需要拆解到多张关系表,那真是麻烦。当年我PhD研究的就是这个。
2、既支持实时高速更新又支持低时延的查询分析是第二大挑战。这个概念上是HTAP的菜,不过大家马上可以看到Rockset在对比中我觉得是有意贬低了HTAP。
应用场景和关键挑战清楚了,那么要搞一个什么产品定位呢?官方对Rockset定位的说法是"Serverless的搜索与分析引擎,支持(实时)、多样化数据的快速SQL分析"。这里实时是我加上去的,否则后续官方强调的Live sync能力就理不顺了。另外,Rockset发明了一个新的名词OPAP(OPerational Analytics Processing),这样Rockset就可以成为OPAP系统的鼻祖了吧。
如下图所示,Rockset详细对比,无情鄙视了一干其他类型的数据库 / 大数据系统。
这个对比中,复杂查询能力干翻OLTP、KV和文档数据库,我觉得这点是中肯的。实时数据集成能力干翻除时序数据之外的所有其他数据库,这点不客观,实际上除了OLAP数据仓库产品,其他产品都支持实时更新,借助其他系统实现实时数据集成完全没问题。OPAP与HTAP其实很相似,但是HTAP产品事务处理能力远超Rockset,所以Rockset觉得千万不能让别人认为它是HTAP产品,否则就成了一个很挫的HTAP了。
怎么综合两类数据?关键是数据模式。Rockset采用的是一种和稀泥型的关系型文档模型(relational document model),采用动态模式。嵌套格式自动展开(flattened),以便支持对嵌套数据的优雅分析。Rockset还引入SQL扩展简化对嵌套的文档和数组类型的查询,比如a[index]这样的数组操作和a.b.c这样的对象操作。Rockset的基本数据实体是Document,每个Document有唯一的ID。Collection是文档的集合,Workspace是Collection的集合。
这样的数据模式设计,处理起关系表、JSON、XML,看起来还是比较方便的。
上面说的是逻辑模式。物理上,Rockset的核心是索引。Rockset采取的极致的为每个属性都建索引的做法。索引技术是Rockset的核心。
索引设计的核心目标是要使得点查询和聚合查询都要快,更具体的说是要对KV、时序、文档、搜索、聚合统计、图查询都要好。这样才能做到用户不需要事先知道数据特征和查询特征,都能搞定。这样的设计还是符合VUCA时代潮流的,但不可能占据绝对主流,后续Rockset也可能提供控制索引范围的能力。
Rockset的索引融合了倒排索引、列索引、文档索引(行索引)的聚合索引(Converged Indexing)技术,还申请了专利。同时Rockset的索引是覆盖索引(Coverage Index),查询时是不需要回原始数据的。索引更新是准实时的,宣称秒级更新,但似乎不提供最大lag保证。如果确实需要保证读到一致的数据,系统提供commit marker,实现很多系统设计中SELECT FOR UPDATE的作用。
索引都转为KV格式存在底层的RocksDB集群中是Rockset设计的一大特色。下图的例子可以很清晰的看出倒排、列、行/ 文档三种索引,以及它们分别是怎么转成KV的。
压缩是另一个底层设计要点。Rockset采用了delta-encoding(有序key之间)和zstd压缩。zstd是Facebook研发的开源一种压缩算法。不使用字典的普通压缩模式时压缩比比zlib稍高比snappy高很多,性能比zlib高4~5倍,接近snappy;字典压缩模式适合压缩大量类似小文档集合,压缩比可高达10:1且性能比普通压缩还要高好几倍。这个压缩算法看起来牛!
第三个要点是过滤机制,主要时Bloomfilter和针对时序数据按event-time排序和过滤。
从技术上我看好Rockset的很重要的一点是它确实在很多方面进行了彻底的云原生架构设计。我的理解主要有以下几点:
1、存储划分成很多很多shard,充分分布掉,这样利用云平台超大规模的特性使得存储突发的操作带宽可以很大。
2、计算资源做到高度弹性。系统持续监测调整资源配置,充分利用云平台特性按需分配资源,从而最大化的满足延迟SLA。
3、综合利用高性能的SSD和低成本的对象存储做到高性价比。如数据的一些副本放SSD另一些放对象存储(支持1SSD+1对象存储和2SSD+1对象存储两种配置),热点数据缓存到SSD冷数据放对象存储等。
Rockset CTO(名字太难拼就不拼了)对云原生系统的设计有很深的思考。他认为计算和存储应该分离,进而对存储而言,持久化和性能应该分离。计算和存储分离后,计算部分应该充分利用云平台的弹性,短时间使用大量资源,在总成本不变的情况下大幅降低相应时间。他举了一个例子,你租一台服务器花100分钟跑一个查询和租100台服务器花1分钟跑完一个查询,成本是一样的,但客户体验后者那就好太多了。确实好太多,所以Rockset才敢卖那么贵。同时,CTO同志认为任务调度要重新设计,传统的调度器只考虑需求端,云原生的调度器还应该考虑供给端资源的动态变化。同样认为应该用shared-storage架构代替shared-nothing架构(他在博客中也提到了DeWitt的报告),采用多层次的存储,持久化和性能设计分离,对象存储做持久化,按需使用高性能SSD数据副本或缓存提高性能。
当前Rockset都跑在AWS上,未来计划支持Azure和GCP。
查询处理方面,与经典的数据库执行引擎不同,Rockset采用bottom-up模式,执行节点不需要等到更高层节点拉数据时才做计算。这也是实现向量化计算的一种。
作为强调搜索和分析的系统,Rockset不太关注事务能力。系统只保证对单个Document的更新是原子的,多Document的更新就不保证了。
Rockset非常注重保障数据安全。传输都用SSL / TLS加密,存储的数据也都加密。使用AWS KMS管理密钥。
最后,官方还给出了Rockset与ES、MongoDB和Aurora的对比。当然,Rockset自然是再次秒杀其他选手了。
最后做个小结。我觉得Rockset团队是一群数据库领域的老鸟,又是对云上未来的系统软件应该怎么设计想的很彻底,很清楚的一个团队。全索引的架构和简单的计费模式,使得系统的使用体验会比较平顺,基本上不用设计,不用调,就可能用起来飞爽(如果考虑价格的话,可能是酸爽,总之是爽嘛)。Rockset当前的设计也较好的发挥了云端计算资源的弹性、低成本云端对象存储、海量存储池带来的突发性能等优势。
当前Rockset针对首创的OPAP场景切入,是一个很精准的点。但这个市场不是很大,我估计未来Rockset会提供更多的选择(如选择索引范围和类型),从而降低成本,应用于更多的分析场景。
期待Rockset顺利发展,特别期待Rockset在云原生设计上再作出新的创新设计。如果Rockset成功的话,我算不算将Rockset介绍到中国的第一人?哈哈。