存算分离架构,作为数据处理领域的一个重要概念,从其最初的雏形到如今广泛应用,经历了多次迭代和变革。本篇文章从过去的存算架构,逐步讲述存算分离的演进,现今的存算分离架构的优势及其在>
存算一体架构局限性
在传统的数据处理架构中,计算和存储往往是紧密耦合在一起的。这种存算一体的架构虽然在早期的数据需求中表现优异,但随着业务复杂度和数据量的激增,逐渐显现出了一些无法克服的缺陷:
存算分离进化:存算一体到分离
存算分离架构的发展可以大致分为三个阶段,每个阶段都在逐步解决存算一体架构中的缺陷,并使数据处理系统变得更加灵活和高效。
存算分离 L0:Metadata+Data,状态非常重
在早期阶段,例如 ClickHouse,在 MergeTree 写入流程中,元数据与业务数据的耦合程度很高。这种方式的存储状态非常重,节点需要频繁同步数据,导致扩展和管理都极其复杂。
存算分离 L1:Metadata 状态,状态重
在 L1 阶段,以 ClickHouse 的 SharedMergeTree 写入流程为例(SharedMergeTree 不开源),元数据与数据的分离有了一定的改进。元数据独立存储在集中化的系统中(如 Keeper,类似 ZooKeeper),而业务数据则可以存储在对象存储中,例如 S3。虽然这种方式减轻了数据节点的负担,但元数据管理依旧是系统的瓶颈。
存算分离 L2:计算无状态化
随着对计算资源和存储资源的独立需求不断增长,Databend 使用了彻底的存算分离架构。在 L2 级别,计算节点彻底无状态化,状态全部持久化在对象存储中。这使得计算节点可以根据负载需求弹性调整,启动时间也缩短到了小于 5 秒,大大提升了系统的可扩展性和资源利用率。
存算一体为什么不能“进化”到 L2?
第一,状态剥离挑战大。如果将一套 ClickHouse 代码改成完全存算分离架构,首先要做到状态剥离:Metadata 剥离,数据剥离。为此,你需要造一个高性能 Metadata service ,把数据全部放到 S3 上,重新设计 MergeTree 引擎数据存储格式,挑战巨大;
第二,分布式网络传输挑战。在分布式架构下,数据要在节点间做 Shuffle。假如要做一个很复杂的 join,哪个节点需要数据,就拉到哪个节点。但像>
第三,Metadata 膨胀挑战。ClickHouse 虽然将数据剥离了,但 Metadata 还没剥离,随着数据量的增长,Metadata 会越来越大。一旦高并发来了,会直接压垮。所以 ClickHouse 每个节点即使是存算分离,也要在本地维护一份自己的 Metadata ,以减少 ZooKeeper 的压力;
第四,调度器。调度器在传统存算一体架构中,是面向本地盘设计的。它认为本地盘 IO 是无限的,只要尽量把随机的变成顺序,就可以把性能提上去。但是对象存储的设计完全不一样,对象存储只要有足够的并行,就能把带宽拉满,所以调度器上也要改很多东西;
第五,多租户。ClickHouse 如果做多租户,它的 Zookeeper 会比较有挑战。基本上要每个集群一个 Zookeeper,如果是多租户,这个数据量会更大。所以>
第六,旧架构局限性大,真正要做到存算分离需要进行大规模的重构和改造。
Databend:现在,开源,场景
我们在设计>
所以我们在数据写入上做了非常大的改进,用 COPY/Mergelnto 命令实现高效数据导入,可以非常快地把数据导入。数据导入后,还可以快速解析和转化复杂 JSON,简化数据清洗过程。
人们可能比较关注数据上游实时的增量处理,不想再在中间挂一个其他流做增量处理,再写到>
在>
我们在设计>
对于数仓大家比较关心的还有一点是并发能力,当并发达到一定能力后,该怎么去扩展?Databend 对此有一个 Multi-Cluster 的概念。你的业务如果有高峰期和低峰期的话,可以在>
另外,Databend 在设计的时候,非常注重权限管理。因为>
在有些公司里,财务人员可能只关心账单,我们就可以给财务人员的账户授予一个 Billing 权限。在给这些人 Billing 的权限后, 他看不到业务的 warehouse 等,也不能执行 warehouse 跟业务相关的一些操作, 能看到的只是账单。
还有一块绕不开的就是与 AI 的结合,Databend 在这方面其实是从下至上重新设计了。你可以跟开源大模型,商业大模型随意结合,支持智能分析和应用。在>
-- 创建一个情感分析的 External UDF
CREATE OR REPLACE FUNCTION ai_sentiment (STRING)
RETURNS STRING
LANGUAGE python
HANDLER = 'ai_sentiment'
ADDRESS = '<你的 AI UDF Server>';
-- 调用这个 UDF
SELECT>
复制代码
Databend 也很专注数据湖领域,我们 team 有一个口号:Rewrite Big>
目前,这个项目已经开源。Databend 大概有 50 多万行 Rust 代码,占整个项目代码量的 97.6%,已经非常高了,其他是 Shell、Python 写的一些测试脚本。这也证明了>
Databend 架构
上图是>
再下面一层是 Cloud Services,这一层也很轻量化,只做一些元数据的管理。元数据非常小,大部分数据都在对象存储上。中间一层是计算, 就是>
我们为了性能,又重新设计了一套 Fuse Engine 引擎。它可以支持分布式事物,如更新、删除、Time Travel。还支持 Hive、Iceberg 等外部的 Catalog 。对象存储方面,我们支持了市面上绝大部分的对象存储。这主要是因为我们中间有一层 OpenDAL,这一层屏蔽了其他对象存储的接口,做了统一的封装,可以和他们无缝打通。
我们在 ClickBench 上做了一些测试,在榜单上数据导入是最快的,只有 70 多秒,其他数据库系基本上都是>
Databend 落地的场景
目前,Databend 支持的用户主要集中在实时分析、海量日志存储与计算、数据库归档、离线计算、非结构化到结构化利用 AI 的数据清洗。服务的用户包括多点、微盟、茄子快传、医药集团、新能源汽车等等。
在所有这些用户场景中,替换 Trino/Presto 场景成本降低了 75%,替换 Elasticsearch 场景成本降低 90%,归档场景成本降低了 95%,其他的日志和历史订单分析等场景成本也都下降很明显。每天有数 PB 级数据通过>
多点是最早使用>
上图是某医药集团从 CDH 生态迁移到>
今年,在 Greenplum 将开源版做了类似于闭源的操作后,很多用户担心项目未来发展。所以有些海外和国内的用户就开始考虑要下掉 Greenplum,想迁移到新的架构。我们帮他们把数据导入对象存储,再通过 COPY INTO 的命令加载到>
实时分析也是业务里面比较常见的场景。比如有些数据在 RDS 或者 MySQL 里面,但是想实时地将这些数据做一些分析。上图是一个游戏行业的典型场景,他们有很多用户行为数据,会先写到 AWS 的 RDS 或者消息队列里面,然后再把数据放到 S3 里做下游的分析。业务数据是增量地、实时地往 S3 写入,写入之后通过>
今年有一些翻译公司、 AI 应用公司也在与我们合作。这些用户有很多视频、图片、非结构化的 PDF 和 word 文档存放在对象存储上,他们想做数据目录服务,当用户搜索一个关键词的时候,能把图片、声音等数据结构化展现出来。Databend 可以通过 Stream 把 S3 上的图片、声音、视频增量捕获做实时分析,调 AI Services 进行分析。比如数据是图片,就去提取一些里面的标签或描述,声音里面的内容是什么,视频第几帧出现什么关键词,全部从非结构化数据转成结构化,写到结构化的表里面。当用户查询搜索时,就可以根据 AI 提取出来的内容来做一些检索。
Databend:未来
2025 年,Databend 有几个优化方向。第一个还是稳定性。用户的核心业务对稳定要求非常高,很多用户找我们,就是因为他们现在使用的产品、技术栈的稳定性支撑不了核心业务。所以稳定性我们始终放在首位,持续提升系统可靠性,与 Snowflake 看齐,提供企业级高可用的数据平台;
第二个是资源组的管理。有一些用户在做>
第三个是地理空间的分析支持。我们现在接到很多用户的需求,比如有燃气公司需要对一些空间数据进行处理,所以我们准备增加一个 GIS 的新数据类型,把用户的空间数据放进来;
最后一个是将>
今日好文推荐
知名 UP 主被锤用开源项目“伪装原创”,原作者越南 AI 工程师愤怒维权,网友:把收益赔给他!
Chrome 被强制出售?谷歌或将抛弃 ChromeOS 全面转向 Android 系统
一朝成名,一夜破产!这家谷歌前高管创立的AI公司突然宣布倒闭,专家:这个行业不适合AI
一场泰森拳王比赛就能让上云鼻祖宕机,员工:周末不想加班修bug
会议推荐
就在 12 月 13 日 -14 日,AICon 将汇聚 70+ 位 AI 及技术领域的专家,深入探讨大模型与推理、AI Agent、多模态、具身智能等前沿话题。此外,还有丰富的圆桌论坛、以及展区活动,满足你对大模型实践的好奇与想象。现在正值 9 折倒计时,名额有限,快扫码咨询了解详情,别错过这次绝佳的学习与交流机会!