大数据领域对ClickHouse可谓非常的熟悉了。这个最初由俄罗斯的Yandex公司开发并开源的数据仓库,以单表查询快闻名于世,一改传统Hadoop技术栈“笨,重,慢”的特点。很多时候,ClickHouse的性能相对于Hadoop技术栈,性能有百倍的提升。
ClickHouse的查询性能快,不仅仅在老东家Yandex得到了证实,更是征服了世界各地大量的互联网公司,成为了它们数据分析的不二选择。
然而开源版的ClickHouse要想用好并不是很容易。很多企业用ClickHouse不但没有见到它传说中的极速,反而因为对ClickHouse颇高的使用门槛而屡屡遇到问题。
开源版的ClickHouse主要有几个问题:
首先,开源版的ClickHouse采用了标准的计算存储一体的Shared-nothing结构,而非云原生服务常用的计算存储分离结构。这就使得ClickHouse非常难做到计算和存储独立按需扩展。
其次,ClickHouse并不具备数据均衡功能,这就导致了数据均衡需要通过业务层来处理。ClickHouse基本上没弹性。
再次,开源的ClickHouse对元数据的处理,并没有集中的元数据管理,而是每个节点都有自己的元数据。集体扩容以后,新的节点不会同步元数据信息,需要人工介入,运维成本非常高。
最后,开源的ClickHouse在新加入节点以后也不会自动平衡数据的负载,新加入的节点需要人工介入,人为增加写入新节点的数据比例,等差不多数据负载平衡以后再人工介入改回来。
这些都使得开源版的ClickHouse非常的难用。很多用户一开始的时候,完全无法达到ClickHouse能够达到的极致性能,相反的,这些客户反而掉进了一个又一个的坑里。
而这其中最大的一个痛点就是新加入的节点如何对数据进行再平衡,这通常需要人工介入,非常的麻烦。2022年6月28日,在腾讯Techo Day技术开放日上,ClickHouse的全托管基础版带来了用户指导下系统自动数据重分布功能。
具体来说,系统允许通过白屏化的操作,让用户选择不同策略,异步的把数据打散到所有的新老节点上。系统提供了按part 和 resharding 两种不同方式,分别应对只关注数据大小和sharding key对齐两种不同层面的再平衡。系统也支持用户随时查看重分布任务的进展情况,用户可以根据业务实际情况进行流量控制,加速,减慢或者取消重分布任务。
用户可以随时直观查看重分布任务的进度、平均速度、剩余大小等信息,根据业务情况实时做流量控制,加快、减慢重分布的速度,甚至取消任务。
而本次发布会的重头戏是发布了云原生弹性版的ClickHouse,带来的是架构方面的全方位升级。
具体来说,开源的ClickHouse是经典Share-nothing,每一台server同时存数据,也作为计算资源。ClickHouse也不存在全局的元数据,元数据分散在每台server上,不同节点之间元数据需要同步的时候,采用ZooKeeper来同步。
这些都造成了ClickHouse如果不做架构改动,就很难成为极致弹性,存储计算分离的云原生数据仓库。腾讯云CDW-ClickHouse为此对架构做了很多改造。
首先是存储的改造,CDW-ClickHouse引入了专门的存储资源层,自研了基于云存储的表引擎。自研的表引擎提供了统一的抽象视图,引入了桶的概念。
其次,在这个基础上存储节点和计算节点实现了存储计算分离。CDW-ClickHouse引入了专门的计算层。计算层和存储层的对接变成了每个计算节点具体映射到哪些桶。
最后,也是最重要的,CDW-ClickHouse引入了元数据服务层这个开源ClickHouse没有的东西。
元数据服务层是CDW-ClickHouse包括两个部分:元数据持久化存储和ClickHouse-Admin服务。元数据持久化存储里存的是全局的元数据。ClickHouse-Admin是一个无状态服务,可以水平扩展。
元数据服务层非常的重要,飞总需要仔细拆解开来讲一下。
元数据在这个服务层里,包括的东西比较多,其中有开源的ClickHouse里分布在各个节点上的Schema信息,也有一些新的东西,它们是数据分布表和配置信息。
Schema信息比较好理解。在CDW-ClickHouse里,元数据持久化存储里存的就是全局的真相,所以DDL也被ClickHouse-Admin服务给接管了。这样做的好处,不仅仅维护了全局的真相,而且也去掉了ZooKeeper。
每个计算节点启动的时候只需要从ClickHouse-Admin服务那里获取最新的元数据信息就可以了。
数据分配表实际上就是存储节点被拆解成桶以后,每个计算节点到底对应哪些桶的一个配置。这个信息在开源的ClickHouse里是没有的。
它一方面是存储计算分离的基础,另外一方面,也是弹性扩容的基础。比如说,扩容加入一个新的节点,在CDW-ClickHouse里可以首先从ClickHouse-Admin服务那里获取Schema信息,其次,还可以让ClickHouse-Admin修改数据分配表,不需要拷贝数据就完成数据重平衡。
配置信息包括了计算节点的配置,共享存储配置,以及计算分组配置。计算分组配置是CDW-ClickHouse里的一个新概念。简单来说,计算组是一组计算节点。
在CDW-ClickHouse,集群支持配置多个计算组,每个组可以有若干台计算节点。它们可以共享存储。类似多个独立的ClickHouse计算集群。这对业务按需资源编排是很有利的。
总结一下,CDW-ClickHouse自底向上分为三层,存储资源层,计算层,元数据服务层。通过实现存储计算分离,元数据全局管理,CDW-ClickHouse实现了计算和存储的弹性扩展,解决了新加入节点需要人工介入,复制元数据的问题,也解决了新节点数据平衡的问题。
经过这一系列的改造,开源的ClickHouse已经成为了存储计算分离,极致弹性的云原生数据仓库,非常的方便客户们按需使用和部署。