Rockset云原生系统软件是中国几乎一无所知的初创企业。当然,云原生系统软件这个词现在还不流行,可以称之为Rockset大数据企业。搜索微信Rockset,只有两篇文章,加起来阅读量才2000出头。其中一篇将Rockset在今年最具潜力的20家科技初创公司中,另一家将是Rockset今年最值得加入的25家公司之一。这是什么样的神奇公司?
我找到Rockset我之所以深入研究它,是因为我在定向研究云原生系统软件的主题(可以参考之前的微信官方账号文章再谈云原生系统软件),自然关注云原生KV这样就发现了系统RocksDB Cloud然后找到项目Rockset。
Rockset种子轮成立于2016年,从红杉筹集了300万美元,去年年底从红杉筹集了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。06年加入Yahoo,是HDFS和创始人一起也很重要HBase contributor。08年到16年在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度客户分析、安全等。面对这样的应用场景,目前的技术有两个挑战:
两类数据的综合是关键挑战。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其他对象存储(支持1)SSD 1对象存储和2SSD 对象存储两种配置),热数据缓存到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介绍到中国的第一人?哈哈。