作者: 康凯森
日期: 2022-12-13
分类: OLAP
2022 年即将结束,疫情持续了 3 年,StarRocks 也创立了快 3 年,今天就总结下 StarRocks 用户侧可以感知的十大 Fature 和 优化,也希望大家对 StarRocks 有一个更全面的认知。
图中是我们官网展示的 SSB 单表的查询性能对比,可以看到,相比业界其他优秀的 OLAP 数据库,我们 StarRcoks 在性能上有着明显的优势,不止是 SSB 单表查询,SSB 多表,TPC-H 查询,TPC-DS 等复杂的多表查询,我们同样拥有极致的性能。TPC-DS 查询在 100G 和 1T 规模下,StarRcoks 相比 Snowflake 有2到3倍的性能优势。
极致的性能不仅可以带来更好的用户体验,让之前难以实现的需求可以实现,更重要的是,可以节省大量的机器,为企业降本增效。
我们 StarRcoks 能拥有极致的 OLAP 分析性能,是因为2年多来,我们在以下几个方面做了大量持续深入的优化:
对上面技术原理感兴趣的可以参考我们 StarRocks 官方微信公众号和 B 站的相关技术分享。
当我们拥有了一个极速的查询引擎,可以实现极速 Olap 分析后,一个自然而然的想法就是,我们是不是也可以直接查询 Apache Hive、Apache Iceberg 和 Apache Hudi 等开源数据湖或数据仓库的数据上呢? 答案是 Yes ! 这样的一个巨大好处是用户省去了数据导入或者同步这个工作,对用户的易用性大大增强。
所以从21年开始,我们就成立了专门的数据湖分析团队,致力于提供开箱即用的极速数据湖分析体验。一年多来,用户侧可以感知的优化和功能如下:
过去两年来,我们从零实现了全新的 基于列存的 Delete-and-Insert 模式的主键更新模型,可以同时支持实时更新和极致的查询性能,在大规模实时数据写入的同时,查询性能可以做到其他行业领先 OLAP 数据库的 3-5 倍。
两年来,我们的主键模型做了如下优化:
实时化是整个数据分析的大趋势,而更新的需求也越来越多,有了 StarRocks 优秀的主键模型,你可以更好的支持下面的业务场景:
在生产环境中,大家一般都会遇到大查询的问题: 几个大查询吃满了整个集群的资源,影响了正常的小查询,大查询很难及时熔断和定位。 针对大查询的问题,我们从 2.3 版本开始,基于 Pipeline 执行引擎,实现了资源隔离。 目前 StarRocks 支持了内存资源的硬隔离,CPU 和 IO 资源的软隔离。
我们引入了 Work Group 的概念,每个 Work Group 可以配置使用的 CPU 和 IO 比例,我们通过两级队列调度和类型 Linux CFS 调度的算法基本保证了每个 Work Group在查询运行时,使用的资源可以符合配置的比例。
同时为了提高资源的利用率,在集群资源空闲时,每个 work group 可以使用到更多资源,对集群资源的利用率和隔离性进行了兼顾。
对一些高优业务,用户可能期望隔离性更高,我们也支持了短查询 Work Group 的 CPU 硬隔离,任何情况下,其对应的 CPU 资源都不会被占用。
StarRocks 第一版的物化视图是从 Rollup 转换而来,只能用来透明加速查询,不能显示直接查询某个物化视图,也就是说物化视图只有物化的语义,没有视图的语义。
我们物化视图 2.0 版本进行了5方面的加强:
在 StarRocks 3.0 中,物化视图将会有一个质变,成为 StarRocks 的 Killer Feature,大家敬请期待。
在实时报表分析和时序查询中,大家经常会遇到分析最近某几天的数据,或者分析今天从零点一直到现在的数据这种场景,在这类查询中,最近某几天的分区 或者 最近某几个小时的数据可能被高频查询到,这种场景很适合 Query Cache 发挥作用,StarRocks 是基于 Tablet 粒度实现的 Query Cache,具有以下亮点:
Cache 命中率高 :因为 Cache 粒度是 Tablet 粒度,比较细,不是整个查询结果集,或者某个分区的查询结果集,Cache 命中率理论上会更高。
支持多版本:支持多版本有多个好处,首先是可以支持高频实时导入,因为 tablet 旧版本的对应的 Cache 内容可以复用,只需要旧版本的 Cache 结果和新版本的增量结果合并即可
支持 Join 等多表复杂查询的结果集Cache:不像大多数系统只能支持单表查询的 Query Cache.
StarRocks 的 Query Cache 已经在 2.5 版本发布,欢迎大家使用。
过去两年来,StarRocks 在持续完善半结构化数据分析能力:
有了这些基础能力,你可以用 StarRocks 做一些更强大的事情:
StarRocks 明年也会持续在半结构化数据分析上发力。
StarRocks 的查询一开始是 Fragment 并行机制,将每个查询的并行度设置交给了用户,但是这个具体的并行度值用户很难设置,简单查询串行执行时并行度高点性能会好,但是高并发时,并行度高性能反而会更差,因为旧版的执行框架,是每个 fragment 一个执行线程,fragment 数越多,执行线程会更多,线程切换和竞争的开销会更大。
为了解决这个问题,StarRocks 一年多来分三步走解决了这个问题:
经过这三步,当你在 StarRocks 时就再也不用自己操心查询并发度的设置了,无论是 Benchmark 场景,还是高并发场景,无论是复杂的大查询,还是简单的小查询,StarRocks 都会自动为你提供开箱即用的极致性能体验。
大家都知道,Cloud Native 是大势所趋,而要支持 Cloud Native,StarRocks 就必须从之前的 Shared-Nothing 架构转向存算分离架构。从 21 年初,StarRocks 就组建了专门的 Cloud 团队全力打造全新的存算分离架构,历经我们 Cloud 团队长达两年的设计和研发,存算分离的 StarRocks 第一版已经开发测试完成,目前已经交付部分用户进行试用测试,有想提前尝鲜的用户也欢迎联系我们。
如上图所示(由于官方还未公开过图,我就不放了,大家可以根据 《Data-Parallel Actors:千行代码构建高性能 OLAP 数据库》一文中的描述脑补下),是我们 StarRocks 新一代的全新架构,我们新一代存算分离架构的核心是 StarOS, StarOS 一个极具野心的项目,简单来说,StarOS 会对分布式相关逻辑进行抽象和统一,对云上存储进行抽象和统一,让我们未来打造一个存算分离服务变得十分简单。 具体的技术内幕大家可以期待我们 Cloud 团队同学之后的深度分享。
那么从用户视角来看,我们全新的存算分离架构会提供什么独特的优势呢?
当然,普遍存储架构的优点我们已经或即将具备:
所谓云原生的存算分离,我们除了存储分离的内核,还需要在云上将数据库服务化,所以在一边打造存算分离内核的同时,我们也成立了一个专门的团队在打造 SAAS 服务,我们目前已经推出了 BYOC 的 SASS 模式。 BYOC 是 bring-your-own-cloud 的缩写,也就是使用用户自己的云,这样会有更好的数据隐私,更好的安全性。如图所示(由于官方还未公开过图,我就不放了),整个架构分为控制面板和数据面板,控制面板在 StarRocks 的 VPC, 数据面板在用户的 VPC,目前已经有多个用户在正式使用。
我们即将迎来2023年,在新的一年里, StarRocks 会带来更多的 Killer Feature,也会大力提升稳定性和易用性,努力让 StarRocks 成为最受欢迎的 OLAP 数据库。