Rockset 陈博玚:从数据库创新看云原生技术
物联市场 线上对谈第三期:Rockset 技术负责人 陈博玚
云计算产业对整个IT行业产生了革命性的影响,云化的趋势不可逆转,容器、K8s开始成为从业者和投资人口中最常提起的名词,这背后所代表的云原生赛道也成为云时代的下一个方向。
Rockset是新一代的云原生OLAP数据库,通过多维聚合索引和存储、计算、导入三层分流,使得各种企业的实时高并发查询需求得到很好的解决。打通物联网的孤岛,是Shifu和他的合作伙伴共同的愿景。
“物联市场 线上对谈”是由边无际发起的立足物联网行业的访谈栏目,第三期邀请到Rockset陈博玚,与边无际CEO陈永立、COO郑凯文、CTO李翔共同探讨云原生为数据库与物联网带来的机遇与挑战。
对谈内容
陈博玚:我是一名硅谷的软件工程师,现任职Rockset,是一家做云原生数据库的公司。我就职过两家独角兽创业公司,其中一家是Confluent,是做开源的Apache Kafka项目,围绕这个开源项目做了一整套的企业级服务的解决方案。再之前我是在Pinterest的做广告系统架构工程师。
我现在任职的公司Rockset规模相对小一些,现在是B轮融资阶段。Rockset在2020年的时候进行融资,公司团队规模在100人左右。我现在的主要工作是关于实时数据注入的。Rockset公司的产品定位是云原生的数据库方向,主要做OLAP(大数据查询)方面。
Rockset的产品比较独特的点是强实时性与高并发。传统的产品更多针对的场景是某一个具体的数据去做一些分析型的查询。Rockset的产品是面向用户的用户,我们称之为tenant,举例来说如果一个体育网站的用户需要看NBA球赛实时的一些总结、赛况、运动员信息等,这个时候Rockset就可以提供很好的支持。
郑凯文:对比传统数据库,云原生数据库特点是什么呢?
陈博玚:首先讲一下云的特点。在平常提到云的时候是多概念混杂在一起的,人们也会比较奇怪为什么一些词语加上云以后就变得更强大了。云之所以强大,是基于2015年左右亚马逊最早推的AWS项目,那个时候也是云的发展势头最强劲的一个阶段。
有一句话很好地概括了云的特色:在以前传统的机房落地的数据库里,租一台机器可以跑1个CPU,1个CPU做的工作需要100分钟,但是现在把这个工作放到云上可以变成100个CPU跑1分钟,这在以前是无法想象的一件事情。
云计算可以在短期有一个爆发性的算力,这改变了很多,包括数据库、技术结构等,也就是说人们可以有极强的在云上的弹性。所以我认为各种云原生的技术的关键就是在于弹性,这种弹性彻底打破了以前理解的互联网技术。原来互联网技术被当作一种需要预先买设备、算成本的行业,比如服装行业需要先去买布料才能开工。但是在云原生的时代的话,很多事情就会有一个非常大的效率的提高。互联网企业可以先不去想要买多少的机器,这些机器怎么维护,在哪儿设厂开机房等问题。这就是云原生带来的巨大的优势。云把所有的理念都虚拟化了,需要买的时候就买入,不需要的时候资源就被释放出来。这降低了很多互联网公司起步的难度。
数据库不是一个新兴概念,尤其在上云的热潮里。数据库本身的概念其实很简单,它能够让使用者以一种与人对话的方式去查询数据,并对数据做各种各样的操作。Rockset现在主要做的是查询这一部分,是一个读多写少的场景。
数据库以前用的一种语言就是我们经常听到的SQL。SQL语言做得很出色,它把很多人类想要表述的几个不同的数据因子去做聚合或者交叉,然后去搜索并加很多搜索限定条件。SQL把一些比较抽象的概念,用一种更自然语言的方式表达出来,而不是像以前一样作为程序员才能用的工具去写查询模式。
其实数据库也有一个演变:一开始是用SQL去做完成,后来大家发现这种方法太复杂了,做很多的架构是比较困难,所以会有新一代的NoSQL出现。NoSQL彻底退化成了机器似的语言,就只有程序员写代码才能去查询一个数据库的信息。但是,在新一代云原生以后,人们又把SQL搬回来,因为人们意识到SQL是一个通用的语言,不管是谁做这一代的数据库产品,没有人去避开SQL,不管MySQL还是PostgreSQL,仍然是基于SQL这一套表达方式。
所以云原生数据库主要还是云原生改变它底下的技术架构的底层,但是数据库本身没有很大的变化,它还是以前的那种用户用一种关系式的方式去把数据存储起来,然后有很好的方式能再把数据取出来。
郑凯文:OLAP这个数据库属于云原生数据库里一种是吗?
陈博玚:应该这样解释,OLAP的A的是Analytics,就是做分析查询这个方向。另外一个跟它对应的概念叫OLTP,T是Transaction事务,是主要针对写的场景的。
现在市面上的数据库产品多数是针对AP来做的,原因就在于AP的查询量大而且访问并发度高。反之TP应用场景更狭窄一些,更有挑战性的场景没有AP那么多。
可以看到AP的市场,获得了资本很高的青睐,比如20年上市的Snowflake,这家公司可以以这个当年营收的百倍作为它的市值,这是很夸张一件事情,可能是历史上最高的营收跟市场估值比。所以当时整个的市场就被Snowflake上市给带动起来了,大家都意识到这个市场有这么宽广。这个市场也还是很大的。
郑凯文:Rockset在这个市场中主打的特色是什么?
陈博玚:Rockset创立的时间正好是Snowflake整个体系在逐渐地占领市场的时候。Rockset在2016年创立的,那个时候Snowflake已经成立4年左右了。Snowflake当时做的很多的是data warehouse,就是数据仓库,Snowflake希望把用户各种不同的数据从不同的地方拿起来,放到一个一个仓库里面,比如用户有一个仓储系统,他们可以从这里面随便的把几个不同的数据结合在一起。
但是,这个数据仓库缺乏了几个要素,这就是Rockset想解决的问题:
第一,现在整个互联网用户的耐心正在降低。很多的事情会干扰人们的心智,不管有多么好玩有趣的东西人们可能看一会儿而就要换下一个,所以对耐心最大的挑战就是网页加载速度。我小时候上网的时候我要是有什么东西想看的话,那个loading在那儿转很久,我可以有很大的耐心去等待。但是现在完全不会了,现在没有人会看一个网页加载超过10秒钟,基本上两三秒就不想看这个网页了。所以,在信息的实时性上普通用户的要求变高了。
第二,在很多场景下,信息如果不够实时就等于是无效信息。这句话怎么理解呢?在一些跟广告相关的环境下,很多的时候需要去捕捉用户的关键信息的窗口其实没有很大,可能就几分钟或者半个小时内,用户突然有兴趣想要去了解一个事物。比如说用户可能看家具途中突然想去买把椅子,可能就这一会儿他有买椅子的需求,那如果系统不能有这种实时的反应,不能有实时的模型去计算得出这个结论的话,意味着错过了一个真正贴近用户的窗口。所以,很多人意识到传统那种一天跑一个模型的速度已经跟不上了,分析昨天用户的行为应用到今天可能偏差非常远,所以现在需要很多实时的信息去这个矫正原来的模型,让它能够更精准的贴近用户的需求。在这个基础上,大家也越来越意识到实时性这很重要,Rockset就是去解决这个问题的。Rockset整个数据的集成都是走实时的通道,很多的信息可以控制在1秒到5秒左右的延迟。
第三,数据推送的速度也要快。在传统的数据库上有一个概念叫索引,就是index。索引就仿佛一本书里面的目录,读者能很快去查到他需要的信息。比如一个学校可能要去查高二一班所有人的信息,那就可以在每个人的班级上去做一个索引,在这种结构下的数据库里可以很快的把数据拿出来。但是,建立索引不是那么容易的,它需要一个工作经验丰富的、或者对整个公司的业务非常了解的人,才能在传统数据库上建立出很好的索引。这项工作是完全根据业务走的,比如今天建一个索引是给班级做的,明天可能要按照学号来做,但是整套索引要重新做其实是很麻烦的。以前有一个工作叫DBA,是专门负责数据库管理的岗位,现在这个岗位的需求量没有那么大了,它需要很多的经验并处理过很多的数据库系统,能根据一个需求建立索引使查询的效率更高。
Rockset提出了一个概念叫“多维索引”。即Rockset选择暴力建索引,比如数据库有20个不同的column,即有20个不同的这个信息在里面,Rockset把每个信息都直接建立索引,这样不管用户按什么维度去查效率都比正常的数据库要快5到10倍。但是显然暴力建索引是有代价的,它带来的问题就是存储成本迅速增加。这个问题上云原生的优势就可以体现出来,在现在这个时代的存储成本其实没有计算成本高,我们完全可以靠这个空间去换时间。
这就是Rockset开始创造产品的核心理念:我们认为在查询端的加速就是要保证把用户的时间释放出来,不要让用户不停地调整索引条。调整索引是一个非常痛苦而且不稳定的工作,可能今天索引对了明天数据形态变了以后旧的索引就彻底废掉了。这就是Rockset想解决的问题,我们把整套索引都做好用户使用时就不会有太大的问题。如果用户有特殊的问题,Rockset还会有一些后续的方法帮助用户解决问题,保证开箱的用户体验达到最好。
李翔:您刚刚提到存储是有代价的,那么Rockset建立这么完整的索引保存在哪里呢?这么大体量的存储也是需要相当大的开销了。
陈博玚:所有的用户数据会做一个副本,传到Rockset的云平台里,用户的所有的查询直接访问Rockset。
Rockset做了一个前人没有做过的优化,比如说某一个家公司有全球各地的业务,他们希望把巨大的数据库表放到不同的业务中心里。正常的逻辑会把这张表做一个分片,把欧洲的所有客户的信息放到一个分片里面,北美的、中国的分别分片。但是由于Rockset索引量太大了,就选择了不同寻常的道路,即把某一份数据的索引做在一台机子上。不同类型的索引比如按照国家的、按照商业业务的方式,可能会做出好几个不同的数据的备份。Rockset的优化点在于,只有一份用户数据就可以把它所有的索引都放在一起。
这种方式为什么没人做呢?原因也很简单,比如我要查北美用户的信息,为什么要访问欧洲的数据中心呢?比如本来分100片的时候,只需要访问一台机子,这样的查询延迟是可以保证的。但现在这100份数据每一条查询都要去访问100台机子,查询延迟可能会增大并且所有都要同时运行。但这就回到了刚刚提到的问题,在云上可以用这个100台机子的1分钟CPU来换取1台机子100分钟的CPU,等于同时利用了100台机子的算力。哪怕这种方式看上去会带来更高的延迟,但其实在时间换空间的权衡里面是赚的。以前做索引要跟数据走,做两三份数据量就非常大了,但是现在Rockset不再做分片而是把所有数据的索引做在一起,并且每次查询都会去查所有的机器,所以这是一个比较有意思的优化。
李翔: Rockset是怎么建立索引的呢?是像SQL那样按照row来建立还是自己create index来建立呢?
陈博玚:我们建立了3个维度索引,一个是row index,还有column index,还有 inverted index就是逆向索引,在文件里面把关键词拿出来作为一个逆向索引。 Rockset用的全是AWS的服务,但是有一点跟边无际很有缘就是也用Kubernetes系统,Rockset的部署都是容器化的,因为我们也发现这样可以更高效的去管理我们的资源。
郭琦:请问Rockset进一步优化的方向是什么呢?
陈博玚:现在的主要方向是隔离,我们现在的很多用户资源是共享状态的,包括一些计算资源。但是长期来看,我们会去支持一些更高级的特点去让特定用户可以有自己的专属的数据的注入通道和查询模式。
其实这也是一个非常有争议性的话题,在云原生的大背景下很多人强调另一条路,是叫做多租户的计算资源共享。一台机器上既然能放很多容器,那理论上其实是可以让很多用户用这台机器资源把资源效率提高,但是另一方面, 万一有一台容器出问题了直接吃掉了一些其他人的资源,可能某一个算子的问题导致这台机器不可用反而影响了其他用户的查询体验。这仍然是一个比较难平衡的点。
郭琦:请问陈永立,云原生在软件架构上做到了什么才能去适配那么多种场景?
陈永立:这是一个特别大的话题,但是核心其实是两种技术。一个是Docker所代表的容器技术,另一个就是Kubernetes所代表的容器编排技术。如果没有容器技术的话,以前大家用虚拟机的消耗是非常大的,一般虚拟机里边都会跑很多的应用。有了容器以后人们把每一个应用都单独封装成一个image,很多的image串起来的话就可以做成微服务架构。这就是云原生技术的底层技术。
有了微服务以后怎么去管理这些微服务又是很大的问题,原来管理一个容器比较简单,但是现在管理成百上千个容器了怎么办?这个时候就有了Kubernetes,用它来管理container fleet变得很简单,Kubernetes会把容器自动调度到不同的计算资源上面。而且Kubernetes还有很多运维自动化的功能,比如某个容器挂掉了以后Kubernetes可以自动重启,相当于把运维极大地简单化了。这也就使整个云原生的极度弹性的做法成为可能。这是一个底层的技术基础设施的进步然后推动上层的应用革新的过程。
Rockset也是基础设施的一部分,但是Rockset的技术进步也会让上层的用户的应用变得更快,然后就能开放出来非常多的新的场景。
郭琦:请问陈永立在实际过程中有遇到云原生有一些固有的障碍需要突破吗?
陈永立:肯定是有的,它既然叫原生就说明得从头来设计架构。很多传统的架构就需要打翻了重新设计,然后才能真正的用到云带来的便利。所以真正能做云原生架构的人才也不是特别多,这肯定是限制大家转型的一个很大的问题。未来云原生的应用会变得越来越简单。
另外一点,云原生本身也会带来新的问题,比如说我原来我骑马的时候马要吃草,现在我改成开车的时候车也得加油。Kubernetes可能会出现各种各样的问题,人们有没有能力去运维它出现的各种问题。我原来在Azure Kubernetes Service工作,经常有客户能起1000个虚拟机,然后他过一段时间就删掉了,所以这也给整个的架构开发运维带来了很大的挑战。当然我认为这都是好事,因为业务驱动的问题就是确实有这样的业务需求,然后才会出现技术变革。
郭琦:陈永立之前在微软用Kubernetes做了第一套云厂商出品的云原生分布式防火墙,请介绍一下如何在Kubernetes的基础上做一个网络安全的解决方案?
陈永立:云原生时代有云原生时代自己的问题,安全的风险也在增加。原来只需要考虑一个一个虚拟机的攻击面。但是在云原生的时候一个虚拟机里边的,可能有上百个容器,攻击面就会相应的变大。别人如果跑到一个容器里,可能可以从一个个容器渗透到整个的系统里进行攻击。
所以我做的这套云原生的分布式防火墙本质上其实用的是Kubernetes network policy(网络策略)的思路,相当于可以设定哪些容器到容器之间是可以通信的,哪些是单向通信,哪些是双向通信。也可以用各种方式来更抽象一层,比如说这个应用到那个应用可以通信,那个应用到这个应用不能反向通信。这个是我做的云原生的分布式防火墙Azure network policy manager也是开源的,大家也可以去看一看。
郑凯文:如果把物联网比作是血管,那数据库应该比作大脑皮层,这句话怎么理解?
陈博玚:我觉得与其说物联网是血管不如说它是神经末梢这样一类的东西,因为它其实是一个把信息载入的点,它的位置非常关键,保证数据有具有准确性可靠性。
我有一些朋友是做监控的,他们会有不同的除了camera之外的一些副产品,比如说sensor。可能平时在墙上看到sensor只能监控方圆很小的一块区域,但是它可能要监控10种不同的数据,这些功能可能还会互相干扰,我相信一线工作的技术人员,肯定要面临很多的问题。但是我更多地了解把数据载入以后连接到互联网连接到云以后的部分。
陈博玚:请问可以展开讲一下边缘计算的问题吗?这也是我比较关心的一个话题,边无际选择做边缘计算这条路的想法是怎样的呢?
陈永立:边缘计算是未来的一个大趋势。那么深扒一下边缘计算的底层到底是什么呢?计算总是用来计算数据的,那么它这个信息和数据是从哪儿来的?其实就是互联网里的数据。边无际从先从物联网入手,就是因为如果没有把物联网现在的一个一个的孤岛的这种现状给打通的话,那么在上层去开发应用是非常困难的。如果没有应用,边缘计算的意义其实也就不大了。云原生的技术实际上是也是由业务驱动的。
我们发现做各种各样的数据处理和分析可能需要解决实时性的问题,就需要用到边缘计算的技术。但是物联网生态割裂的问题限制了边缘计算的发展,所以边无际就准备先把物联网生态割裂的问题解决掉。解决方式就是把一个个的设备封装成一个个的微服务,把它的能力用API的方式开放出来。那么这样,传统物联网比较碎片化的低效开发模式就转化成互联网上面的web开发模式,这样就把物联网的开发门槛大大降低了,我们相信这是未来的技术趋势。
陈博玚:边无际的商业模式是怎样的呢?
陈永立:边无际的商业模式分为两个部分,核心部分是开源。之后会附加更多各种各样的企业级服务,边无际会基于我们的产品——Shifu Framework开发相应的产品,让人们可以托管物联网开发的全流程。
因为Shifu Framework把每一个设备都封装成了一个一个微服务,最终做到了一个一个模块的感觉,用户可以基于模块像拼乐高一样拼出来他们的场景。然后Shifu Framework会把底层以及上层的应用一起打包,形成一个一键安装的产品放到客户那边部署。这个流程是边无际之后的商业模式。
Shifu Framework尽量把运维自动化,打包在基础设施里边去尽量降低客户的负担,然后让客户可以轻松地在本地运维。
因为Shifu Framework完全可以跑到云上,如果用户对实时性的要求没有那么高,我们可以通过Shifu Framework把设备虚拟到云上,变成一个Kubernetes的pod并与传统云上的数据库跑在一个集群里边,所以应用可以同时对接数据库也可以同时对接各种各样的设备资源,自动完成所有的建设与管控。
本文由博客群发一文多发等运营工具平台 OpenWrite 发布
转载自:https://segmentfault.com/a/1190000041902269