AI智能总结
云原生SharedMergeTree引擎&轻量update技术解析 作者 Tom Schreiber,凤豪,卫寻翻译校正魏庄 推荐语 本书由ClickHouse资深技术专家和产品联合撰写,全面介绍了ClickHouse企业版的云原生存算分离整体架构,详细介绍SharedMergeTree表引擎的实现机制原理及基准测试结果,并介绍Lightweightupdate增强数据更新的实时性的实现原理,是学习ClickHouse云原生技术的宝贵资源。 目录页 重磅首发:阿里云ClickHouse企业版首发&云原生ClickHouse 1.ClickHouse 介绍2.ClickHouse企业版介绍,3.ClickHouse企业版云原生架构4.ClickHouse企业版引擎升级5.ReplicatedMerqeTree的挑战6.SharedMergeTree升级..107.ClickHouse企业版收益.138.SharedMergeTree引擎的兼容性9.SharedMergeTree的实际应用对比.1710. Lightweight Update..2611.总结.12.企业版邀测30 重磅首发:阿里云ClickHouse企业版首发&云原生clickHouse技术白皮书揭秘 1.ClickHouse介绍 ClickHouse是一个全球流行的开源高性能、可扩展列式数据库技术,核心应用于在线分析处理(OLAP)业务,在DB-Engine全球数据库流行度排榜排名前列,逐年关注度增长迅猛。ClickHouse分析性能优异,典型分析场景下,支持数十亿级数据行规模,90%查询在1秒内完成。这使得ClickHouse成为企业处理大规模数据,构建实时数仓的理想选择。国内外大厂中,微软,腾讯、ebay。淘宝、Uber,京东、快手、小红书,携程都使用ClickHouse构建数据分析平台。 ClickHouse企业版介绍 阿里云在2020年发布了基于开源社区版本的云数据库ClickHouse社区兼容版,是全球领先的大规模提供全托管ClickHouse服务的云厂商,成熟稳定服务了包含互联网,游戏,电商,金融保险,汽车制造,媒体广告在内的数千家客户。 2021年9月20日,ClickHouse项目创始人Alexey在GitHub宣布他们正式从Yandex独立,并成立一个公司:ClickHouse,Inc。2023年阿里云与ClickHouse,Inc达成独家的商业合作,联合研发阿里云数据库ClickHouse企业版(以下简称ClickHouse企业版),并于2023年8月末开启邀测。 ClickHouse企业版对比社区版是里程碑的升级,从传统存算一体的架构全面升级为云原生架构,支持云原生按需弹性Serverless能力,解决了长期困扰用户的集群扩展效率和平滑性问题。同时升级支持lightweightupdate&delete,数据更新实时可见,且执行成本更低,效率更高。本文将详细揭秘ClickHouse企业版的技术实现原理。 3.ClickHouse企业版云原生架构 ClickHOuSe企业版采用完全不同与开源社区版本的云原生新架构,针对云环境做了全面适配。新架构基于存储和计算分离的架构基础。采用对象存储数据实现ShareStorage共享存储,所有ClickHouseServer节点都可以访问相同的全局物理数据,单个Server节点实际上是单个没有限制分片的Replica节点,节点之间访问同一份数据副本。 4.clickHouse企业版引擎升级 MergeTree系列的表引擎是ClickHouse中的主要表引擎。它们负责存储插入的数据,在后台进行数据合并,根据特定的引擎进行数据转换等操作。企业版新推出SharedMergeTree引擎加入到MergeTree引擎大家庭,而企业版能够支持云原生架构,也核心依赖SharedMerqeTree引擎。SharedMergeTree引擎是商业化引擎,仅在企业版提供,在开源社区版不支持。企业版内核相较于开源社区版的核心能力差异如下所示: 1)开源ReplicatedMergeTree引擎 大多数MergeTree家族中的表都支持自动的数据复制,并通过ReplicatedMergeTree表引擎的复制机制实现。 复制以实现数据高可用,并通过分片实现集群横向扩展。阿里云ClickHouse社区兼容版也正是基于这一内核特性实现的高可用和扩展。而ClickHouse企业版采用了一种新方法基于SharedMergeTree构建了云原生数据库服务。 SharedMergeTree表引擎是ClickHouse内核ReplicatedMergeTree表引擎的更高效的替代品,专为云原生数据处理而设计和优化。我们将深入了解这个新表引擎,解释其优势并通过基准测试展示其效率。同时当前正在引入轻量级更新LightweightUpdate,与SharedMergeTree形成协同效应。 对象存储上的数据可用性 数据的物理副本。对象存储本身实现确保存储具有高可用性和容错性。需要注意的是,尽管访可对象存储较慢,但ClIckHOuse企业版服务具有多层读写缓存,它专为在对象存储上读写而设计,以提供快速的查询结果。对象存储虽然访问延迟比磁盘较大,但具有高并发吞吐量和大的聚合带宽。ClickHouse企业版通过利用多I/O线程来访问对象存储,并通过异步预读取数据来改善这一点。 自动集群扩展 与开源版本使用分片来扩展集群不同,ClickHouse企业版让用户通过简单地增加计算节点的规格和数量来增加INSERT和SELECT的并行处理能力。请注意,ClickHOUSe企业版计算节点实际上是单分片的多个副本。这些节点不是包含相同数据的本地副本节点,而是可 以访问存储在对象存储中全量相同的数据的无状态差异节点。计算节点规格和数量可以适应工作负载,进行对应的升降配和水平扩缩容,具体步骤描述如下图所示: 通过①垂直升配操作和②垂直缩容操作,我们可以更改节点的规格(CPU和内存)。而通过③水平扩展,我们可以增加计算节点的数量。而无需进行任何物理Resharding或数据的Rebalancing,我们可以自由地添加或删除节点。这种无数据移动和搬迁支持水平集群扩展方法,就需要ClickHouse企业版能够提供支持节点访问相同共享数据的表引擎。 5.ReplicatedMergeTree的挑战 ReplicatedMergeTree表引擎并不适用于ClickHouse企业版的预期架构,因为其复制机制旨在在少量的节点上创建数据的物理副本。而ClickHouse企业版需要一个支持在对象存储之上运行大量计算服务节点的表引擎。 1)显式的数据复制 首先我们解释一下ReplicatedMergeTree表引擎的复制机制。 该引擎使用ClickHouseKeeper(也称为“Keeper")作为协调系统,通过复制日志方式进行数据复制。Keepe充当复制过程特定元数据和表结构的集中式存储。以及分布式操作的一致性协调系统。Keeper确保为Part顺序地分配连续的块编号,将merge和mutation操作分配给特定的replica。 下图概述了一个具有3个replica节点的shared-nothing架构的ClickHouse集群,并显示了ReplicatedMergeTree表引擎的数据复制机制: 当①Server-1接收到插入查询时,②Server-1在其本地磁盘上创建一个包含插入数据的新Part。③通过复制日志,其他节点(Server-2、Server-3)被告知Server-1上存在一个新Part。在处,其他server独立地从server-1下载(“获取”)该Part到自己的本地文件系统。创建或接收Part后,三个节点还会在Keeper中更新元数据,元数据用以描述Part文件信息。 请注意,我们仅展示了如何复制新创建的Part。Part合并(和mutation)也以类似的方式复制。如果一个节点决定合并一组Pats,那么其他节点将在其本地Parts刷本上自动执行相同的合并操作。 在本地存储完全丢失或添加新副本时,ReplicatedMergeTree从已有的副本克隆数据。ClickHouse企业版使用持久性更好的对象存储来实现数据可用性,所以不需要ReplicatedMergeTree的显式数据复制功能。 2)依赖sharding进行集群扩展 shared-nothing架构下的ClickHouse集群用户可以将replication与sharding相结合,来实现高可用和水平扩展。表中数据以分片的形式分布在多个节点上,每个分片通常有2个或3个副本,以确保存储和数据可用性。通过添加更多分片,可以增加数据写入和查询处理的并行能力。而ClickHouse企业版不需要使用分片进行集群扩展,因为所有数据都存储在共享的对象存储中,只需通过添加额外的节点来增加并行数据处理能力。 6.SharedMergeTree升级 1)独立SharedMergeTree优点 ClickHouse企业版实现了一个名为SharedMergeTree的表引擎-专为在共享存储上工作而设计。SharedMergeTree是云原生方式,具有如下优点 ,MergeTree代码更加简单易维护, :支持垂直和水平自动扩展, ,为我们的云用户提供未来的功能和改进,如更高的一致性保证,更好的耐用性,基于时间点数据恢复等。 2)SharedMergeTree引擎下的集群扩展原理 在这里,我们简要介绍SharedMergeTree如何支持ClickHouse企业版自动进行集群扩展。 提醒一下:ClickHouSe企业版计算节点是具有访问共享存储的计算单元,其规格和数量可以更改。基于此机制,SharedMergeTree完全将业务数据和元数据的存储与计算节点分离,并使用Keeper的接口去读取、写入和修改共享元数据。每个计算节点都有一个存储元数据的本地缓存,并通过订阅机制自动获取数据更改的通知。 下图描述了如何使用SharedMergeTree将新服务器添加到集群中: 当Server-3添加到集群时,这个新Server①订阅Keeper中的元数据更改信息并将当前Parts的元数据获取到其本地缓存中。这不需要任何锁机制; 新Server基本上只需说:"我在这里。请随时通知我所有数据更改”。 新添加的Server-3几乎可以立即参与数据处理,因为它通过从Keeper中只获取必要的元数据信息。找到有哪些数据以及在共享存储中的什么位置。 3)SharedMergeTree引擎下的数据一致性原理 下图描述所有Server节点如何知道新插入的数据,来保证查询数据一致性: Server-1接收到插入查询 Server-1将写入的数据以Part的形式写入共享存储。 Server-1还将关于该部分的信息存储在其本地缓存和Keeper中(例如,些文件居于该Part,以及与文件对应的块位于共享存储中的位置)。 ClickHouse向查询的发送者确认插入成功。其他节点(Server-2、Server-3)通过Keeper的订阅机制③自动得到存储层中存在新数据的通知,并将更新的元数据提取到其本地缓存中。 请注意,在步骤④之后,插入的数据是持久的。即使Server-1或其他任何节点崩渍,Part都存储在高可用的存储中,元数据存储在Keeper中(Keeper具有至少3个Keeper节点的高可用设置)。 从集群中移除节点也是一个简单且快速的操作。为了优雅地移除,相关节点只需从Keeper中注销,以便处理进行中的分布式查询时不会出现缺少服务器的警告。 7.ClickHouse企业版收益 在ClickHouse企业版中,SharedMergeTree表引擎是ReplicatedMergeTree表引擎的更高效的替代品。为Click