1. 前言
开源列式数据库ClickHouse以极致的性能、超高的性价比获得了广泛好评。在PB级查询分析场景下ClickHouse是最佳解决方案之一。开源ClickHouse集群采用SHARED-NOTHING架构,增加计算节点非常容易。
图1:开源ClickHouse架构
但是,开源ClickHouse也有明显的不足之处:
-
采用存算一体架构,计算与存储耦合。
存储与计算资源无法独立扩展。用户对计算与存储资源非对称需求越发强烈,并且希望云服务商能够提供更为灵活的资源编排能力。 -
不具备弹性能力。
开源ClickHouse集群没有数据均衡功能(rebalance)。在云托管ClickHouse阶段,通过业务层来均衡数据,代价大,耗时长。弹性效率十分低。 -
运维成本高。
开源ClickHouse运维成本高。例如,当集群扩容后,增量计算节点无法自动同步存量节点的SCHEMA信息,需要人工介入。
随着云原生理念深入人心,利用云原生架构对开源ClickHouse进行改造,计算资源池化,存储与计算分离,势在必行。业界对云原生ClickHouse并没有明确的定义。云原生ClickHouse至少需要具备以下特征:
-
采用存算分离架构,计算资源与存储资源独立扩展,按需付费;
-
高效弹性,计算资源扩容时数据Zero-copy;
-
计算资源池化,根据业务需求灵活编排计算资源;
-
易运维,甚至免运维,只关注业务本身;
腾讯云数仓服务CDW-ClickHouse已从云托管演进为云原生服务,下文简称云原生ClickHouse。本文叙述开源ClickHouse云原生改造过程中的难点、方案设计、关键技术、以及未来规划。
2. 云原生架构
为了解决开源ClickHouse的痛点,腾讯云CDW-ClickHouse采用了全新存算分离架构,将服务分为元数据服务层、计算层 和存储资源层。
图2:云原生ClickHouse架构图
元数据服务层:元数据服务层包含集群管理节点clickhouse-admin 以及 元数据持久化存储。元数据管理节点clickhouse-admin负责管理集群的元数据元数据包括集群的数据分布表、SCHEMA信息等。同时,clickhouse-admin 还负责计算节点的保活功能。集群管理节点clickhouse-admin为无状态设计,可水平扩展。
计算层:云原生ClickHouse计算层由计算组构成,计算组为计算节点集合。在计算层计算节点可以分组隔离。部署clickhouse-server节点为无状态存在,数据存储剥离到分布式存储系统或对象存储之中。用户可以根据业务合理编排计算资源。
存储资源层:云原生ClickHouse对存储资源做了统一抽象,用户无需关注底层存储。架构层方便集成更多云上分布式存储服务。可以集成低成本无限容量的对象存储,也可以集成低延迟高吞吐的分布式文件系统。
目前,已经集成了对象存储COS,以及分布式文件系统CFS。