存算分离的过去、现在和未来

存算分离架构,作为数据处理领域的一个重要概念,从其最初的雏形到如今广泛应用,经历了多次迭代和变革。雁飞老师在分享中从过去的存算架构,逐步讲述存算分离的演进,现今的存算分离架构的优势及其在 Databend 中的体现,直至未来存算分离的发展方向。

一、存算一体架构局限性

在传统的数据处理架构中,计算和存储往往是紧密耦合在一起的。这种存算一体的架构虽然在早期的数据需求中表现优异,但随着业务复杂度和数据量的激增,逐渐显现出了一些无法克服的缺陷:

  1. 扩展性不足:新增一个计算节点时,数据(包括 MetaData 和 Data)需要在节点之间同步,导致扩展效率低下,且增加了系统的复杂性和管理成本;
  2. 资源分配不灵活:由于计算与存储资源是紧密耦合的,因此在业务负载发生变化时,⽆法根据业务负载做资源动态分配,⽆法灵活调整计算和存储资源,资源利⽤率低(Node 多副本),成本控制难;
  3. 故障影响大:在这种架构中,计算节点和存储节点之间共享数据,导致一个节点的故障可能会影响整个系统的稳定性,⽆法根据业务类型做资源隔离,资源争抢、故障影响范围⼤,⽆法保证稳定性。

二、存算分离进化:存算一体到分离

存算分离架构的发展可以大致分为三个阶段,每个阶段都在逐步解决存算一体架构中的缺陷,并使数据处理系统变得更加灵活和高效。

  1. 存算分离 L0:Metadata+Data,状态非常重
  1. 在早期阶段,例如 ClickHouse,在 MergeTree 写入流程中,元数据与业务数据的耦合程度很高。这种方式的存储状态非常重,节点需要频繁同步数据,导致扩展和管理都极其复杂。

  1. 存算分离 L1:Metadata 状态,状态重
  1. 在 L1 阶段,以 ClickHouse 的 SharedMergeTree 写入流程为例(SharedMergeTree 不开源),元数据与数据的分离有了一定的改进。元数据独立存储在集中化的系统中(如 Keeper,类似 ZooKeeper),而业务数据则可以存储在对象存储中,例如 S3。虽然这种方式减轻了数据节点的负担,但元数据管理依旧是系统的瓶颈。

  1. 存算分离 L2:计算无状态化
  1. 随着对计算资源和存储资源的独立需求不断增长,Databend 使用了彻底的存算分离架构。在 L2 级别,计算节点彻底无状态化,状态全部持久化在对象存储中。这使得计算节点可以根据负载需求弹性调整,启动时间也缩短到了小于 5 秒,大大提升了系统的可扩展性和资源利用率。

存算一体为什么不能“进化”到 L2?

第一,状态剥离挑战大。如果将一套 ClickHouse 代码改成完全存算分离架构,首先要做到状态剥离:Metadata 剥离,数据剥离。为此,你需要造一个高性能 Metadata service ,把数据全部放到 S3上,重新设计 MergeTree 引擎数据存储格式,挑战巨大;

第二,分布式网络传输挑战。在分布式架构下,数据要在节点间做 Shuffle。假如要做一个很复杂的 join,哪个节点需要数据,就拉到哪个节点。但像 Databend 这种真正的存算分离架构,数据都在 S3上,传的不是数据实体,而是一个文件路径。系统会告诉你要的数据在哪个位置,而不是把数据内容都传给节点。这是 Databend 做完全存算分离时做出的一个巨大改变,既减少了网络传输。这对 ClickHouse 等传统存算一体架构来说就很难,需要重新设计交互方式,改很多东西;

第三,Metadata 膨胀挑战。ClickHouse 虽然将数据剥离了,但 Metadata 还没剥离,随着数据量的增长,Metadata 会越来越大。一旦高并发来了,会直接压垮。所以 ClickHouse 每个节点即使是存算分离,也要在本地维护一份自己的 Metadata ,以减少 ZooKeeper 的压力;

第四,调度器。调度器在传统存算一体架构中,是面向本地盘设计的。它认为本地盘 IO 是无限的,只要尽量把随机的变成顺序,就可以把性能提上去。但是对象存储的设计完全不一样,对象存储只要有足够的并行,就能把带宽拉满,所以调度器上也要改很多东西;

第五,多租户。ClickHouse 如果做多租户,它的 Zookeeper 会比较有挑战。基本上要每个集群一个 Zookeeper,如果是多租户,这个数据量会更大。所以 Databend 在设计时,Metadata Service 本身就是多租户的;

第六,旧架构局限性大,真正要做到存算分离需要进行大规模的重构和改造。

三、Databend:现在,开源,场景

我们在设计 Databend 时的思路,并不是站在技术的角度上追求要比 ClickHouse 更快,而是站在用户角度,让数据从进来到清洗,入表、分析、出库,包括中间所有的 transform 全部一体地在 Databend 内部完成。

所以我们在数据写入上做了非常大的改进,用 COPY/Mergelnto 命令实现高效数据导入,可以非常快地把数据导入。数据导入后,还可以快速解析和转化复杂 JSON,简化数据清洗过程。

人们可能比较关注数据上游实时的增量处理,不想再在中间挂一个其他流做增量处理,再写到 Databend 内部。Databend 可以订阅流数据,在内部就把这个事搞定了,实现了实时增量处理,保持数据时效性。

在Databend 内部有一个流(Stream)的概念,在源表上面挂一个流。源表一更新,这个流的变更就会捕获,然后对其进行一次性消费。还可以结合 Databend Task 机制去做更加灵活的编排,毫秒级的调度机制,并支持 DAG 任务依赖关系,让你可以更加灵活的把数据链路自动化起来。

我们在设计 Databend 时有一个理念,尽量不引入第三方工具,所有数据处理就在 Databend 内部完成。以前用 Flink 做的事,Databend 里面都可以做。

对于数仓大家比较关心的还有一点是并发能力,当并发达到一定能力后,该怎么去扩展?Databend 对此有一个 Multi-Cluster 的概念。你的业务如果有高峰期和低峰期的话,可以在 Databend 中打开这个选项(如上图),你可以设置 Multi-Cluster 的数量。当遇到业务高峰时,就会自动扩展当前的这个集群。当业务处于低峰后,Multi-Cluster 又会慢慢往回缩,最后缩到 1。这样你就不用关心业务高峰还是低峰,只需定义好这个 Multi-Cluster 数量,Databend 会自动根据压力做扩展和缩容。

另外,Databend 在设计的时候,非常注重权限管理。因为 Databend 是从数据进来的行为就开始纳管,一直到数据出去,中间会有很多安全上的问题。如果安全做不好,用户用起来就会比较混乱。所以 Databend 有着一套完整的权限管理,大家平时在业务上能用到、能想到的都可以完成,如权限继承、角色分层、职责分离等等原则。在 Databend 里每一个对象,如 库(Database),表(Table)、流(Stream)等都可以赋予权限。

在有些公司里,财务人员可能只关心账单,我们就可以给财务人员的账户授予一个 Billing 权限。在给这些人 Billing 的权限后, 他看不到业务的 warehouse 等,也不能执行 warehouse 跟业务相关的一些操作, 能看到的只是账单。

还有一块绕不开的就是与 AI 的结合,Databend 在这方面其实是从下至上重新设计了。你可以跟开源大模型,商业大模型随意结合,支持智能分析和应用。在 Databend 内部,你可以通过 UDF,去连接外部的 AI 服务或 API ,使用 Databend 通过 SQL 函数实现反向调用外部的 AI 服务。Databend 提供了一套框架让你实现自己的服务。目前,这些业务在线上已经有一些生产用户在用。 举个例子:

-- 创建一个情感分析的 External UDF
CREATE OR REPLACE FUNCTION ai_sentiment (STRING)
RETURNS STRING
LANGUAGE python
HANDLER = 'ai_sentiment'
ADDRESS = '<你的 AI UDF Server>';-- 调用这个 UDF
SELECT data, ai_sentiment(data) AS sentiment FROM texts;

Databend 也很专注数据湖领域,我们 team 有一个口号: Rewrite Big Data in Rust,简称 RBIR,就是要用 Rust 语言(内存占用少,性能高,安全性好)把整个大数据生态技术栈重写一遍。目前我们把 Hive、Iceberg、Delta Lake 都用 Rust 实现了。而且这些框架都在 Databend 内部集成,你可以用 Databend 去读 Hive 、Iceberg,后续我们还会支持写。你可以在 Databend 内借用 Rust 语言把之前一些 Java 的技术栈替换掉。我们用 Rust 重写了之后,效果提升比较明显。

目前,这个项目已经开源 https://github.com/rewrite-bigdata-in-rust/RBIR。Databend 大概有 50 多万行 Rust 代码,占整个项目代码量的 97.6%,已经非常高了,其他是 Shell、Python 写的一些测试脚本。这也证明了 Databend 三年前就用 Rust 语言写这么大一个项目,是一个很不错的选择。目前 Databend 社区有将近 200 个 Contributors,大家都是奔着 Rust、大数据生态过来的。

Databend 架构

上图是 Databend 整体架构图,最上面是所有的大数据生态 JDBC、SDKs、CDC、ELT、机器学习, 你都可以对接,并且对接模式很简单,就是 SQL。SQL 可以完成之前很难去做的事,Databend 通过一些自己的方式,把它们全都对接起来了。

再下面一层是 Cloud Services,这一层也很轻量化,只做一些元数据的管理。元数据非常小,大部分数据都在对象存储上。中间一层是计算, 就是 Databend 的 Query Engine,每个节点都有自己的 Cache、索引,你可以把不同的计算做不同的用处,可以开发、ETL 、Dashboard 等等。你可以选择业务类型选择不同规格的 Warehouse,随意扩展。

我们为了性能,又重新设计了一套 Fuse Engine 引擎。它可以支持分布式事物,如更新、删除、Time Travel。还支持 Hive、Iceberg 等外部的 Catalog 。对象存储方面,我们支持了市面上绝大部分的对象存储。这主要是因为我们中间有一层 OpenDAL,这一层屏蔽了其他对象存储的接口,做了统一的封装,可以和他们无缝打通。

我们在 ClickBench 上做了一些测试,在榜单上数据导入是最快的,只有 70 多秒,其他数据库系基本上都是 Databend 耗时的两倍。Databend 和 Snowflake 在 TPC-H SF100 对比中,规格完全一样的情况下,导同样的数据,Snowflake 大概花了691 秒,Databend 是 446 秒。我们用 Rust 语言做了很多并行化设计,效果也比较明显。在 ClickBench 查询性能对比中,Databend 在好几个机型对比中基本都是第一。与 Snowflake 对比,Databend 基本也是基本比它快一点。

Databend 落地的场景

目前,Databend 支持的用户主要集中在实时分析、海量日志存储与计算、数据库归档、离线计算、非结构化到结构化利用 AI 的数据清洗。服务的用户包括多点、微盟、茄子快传、医药集团、新能源汽车等等。

在所有这些用户场景中,替换 Trino/Presto 场景成本降低了 75%,替换 Elasticsearch 场景成本降低 90%,归档场景成本降低了 95%,其他的日志和历史订单分析等场景成本也都下降很明显。每天有数 PB 级数据通过 Databend 写入公有云和私有云对象存储。

多点是最早使用 Databend 的用户,当时还没有推出稳定版前,他们就第一个用起来。当时,多点的历史订单数据都存放在 MySQL 和 TiDB 中,要把订单数据导出来放到对象存储以节省存储成本。但他们面临着一个问题,为了做审计,还要把数据再导回来,所以起了一个很大的 MySQL 实例,做完审计再把这个实例关闭。在使用 Databend 后,我们帮助多点将 MySQL、TiDB 的数据直接写到对象存储,想做分析的时候,直接使用 Databend 进行分析。成本仅为原来的 1/10。并且在 10亿数据量级别下,常用查询均可做到秒级响应。

上图是某医药集团从 CDH 生态迁移到 Databend 的案例。当时,他们 CDH 的量太大,最大单表达到 93 亿行,原数据库无法满足数量存储需求,需要对数据迁移。迁移过程中,数据备份文件通过 Parquet 格式导到对象存储,然后通过 COPY INTO 命令加载到 Databend 进行计算。几 TB 的数据,不到一个小时就全部迁移完了。数据存储成本最高下降到原来的 1/30,对大表数据的查询加载速度提升了 2 倍多。

今年,在 Greenplum 将开源版做了类似于闭源的操作后,很多用户担心项目未来发展。所以有些海外和国内的用户就开始考虑要下掉 Greenplum,想迁移到新的架构。我们帮他们把数据导入对象存储,再通过 COPY INTO 的命令加载到 Databend 中,即使几 TB 的数据,基本上几十分钟也可以加载好。

实时分析也是业务里面比较常见的场景。比如有些数据在 RDS 或者 MySQL 里面,但是想实时地将这些数据做一些分析。上图是一个游戏行业的典型场景,他们有很多用户行为数据,会先写到 AWS 的 RDS 或者消息队列里面,然后再把数据放到 S3 里做下游的分析。业务数据是增量地、实时地往 S3 写入,写入之后通过 Databend 的 Task 和 Stream 在 Databend 内部做实时的清洗,清洗后再将数据导到 BI、机器学习、决策分析等使用。整个流程在五秒内基本就可以搞定,Databend 的 Task 可以做到毫秒级的任务调度,所以数据新鲜度非常高。

今年有一些翻译公司、 AI 应用公司也在与我们合作。这些用户有很多视频、图片、非结构化的 PDF 和 word 文档存放在对象存储上,他们想做数据目录服务,当用户搜索一个关键词的时候,能把图片、声音等数据结构化展现出来。Databend 可以通过 Stream 把 S3 上的图片、声音、视频增量捕获做实时分析,调 AI Services 进行分析。比如数据是图片,就去提取一些里面的标签或描述,声音里面的内容是什么,视频第几帧出现什么关键词,全部从非结构化数据转成结构化,写到结构化的表里面。当用户查询搜索时,就可以根据 AI 提取出来的内容来做一些检索。

Databend:未来

2025 年,Databend 有几个优化方向。第一个还是稳定性。用户的核心业务对稳定要求非常高,很多用户找我们,就是因为他们现在使用的产品、技术栈的稳定性支撑不了核心业务。所以稳定性我们始终放在首位,持续提升系统可靠性,与 Snowflake 看齐,提供企业级高可用的数据平台;

第二个是资源组的管理。 有一些用户在做 Databend 私有化的部署,在这些私有化的场景中,用户的资源怎么做隔离?怎么做负载,做路由?对私有化用户来说挑战非常大。所以我们会做一些资源组的概念,通过模拟云上的资源分配,专为私有化场景设计,实现灵活的资源分组与隔离,优化资源分配与本地部署效率;

第三个是地理空间的分析支持。 我们现在接到很多用户的需求,比如有燃气公司需要对一些空间数据进行处理,所以我们准备增加一个 GIS 的新数据类型,把用户的空间数据放进来;

最后一个是将 Databend 打造成一体化 数仓  支持离线、实时、数据湖、流处理、地理空间和 AI 等多元数据类型和场景,简化技术栈,实现数据价值最大化。目前这些功能其实大部分都支持,明年我们会以更加产品化的形态去实现。

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:databend.cn

📖 Databend 文档:docs.databend.cn/

💻 Wechat:Databend

✨ GitHub:github.com/datafuselab…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475942.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web——upload-labs——第九关——特殊字符::$DATA绕过

特殊字符::$DATA绕过 典型绕过场景 在一些系统中&#xff0c;::$DATA 被用于绕过文件路径的限制。比如&#xff1a; 路径过滤绕过&#xff1a;如果系统有某种机制来检查和限制文件路径&#xff08;例如&#xff0c;禁止访问某些系统目录或敏感文件&#xff09;&#xff0c;通…

图的存储、遍历以及Dijkstra/Floyd/Kruskal/Prim/拓扑排序/关键路径(实验8--作业)

图–数据结构操作与算法全解析 一、引言 图作为一种重要的数据结构&#xff0c;在计算机科学与众多领域中都有着广泛的应用。它能够有效地描述和解决各种复杂的关系问题&#xff0c;如网络拓扑、路径规划、资源分配等。本文将详细介绍图的相关操作和知识点&#xff0c;包括图…

利用Vue的相关特性,制作相册

目录 一、整体结构 1、设置一个div盒子 2、设置图片展示 3、页码按钮 4、翻页按钮 二、CSS样式 1、 .clear_ele::after 2、设置图片、按钮等属性的样式 三、JavaScript部分&#xff08;Vue&#xff09; 1、导入模块 2、创建Vue应用 ①定义响应式数据 ②定义事件处…

优化表单交互:在 el-select 组件中嵌入表格显示选项

介绍了一种通过 el-select 插槽实现表格样式数据展示的方案&#xff0c;可更直观地辅助用户选择。支持列配置、行数据绑定及自定义搜索&#xff0c;简洁高效&#xff0c;适用于复杂选择场景。完整代码见GitHub 仓库。 背景 在进行业务开发选择订单时&#xff0c;如果单纯的根…

(C语言)文件操作

目录 文件 程序文件 数据文件 文件名 ​编辑数据文件的分类 文件的打开和关闭 流 标准流 1&#xff09;stdin 2&#xff09;stdout 3&#xff09;stderr 文件指针 文件的打开和关闭 对文件内容操作的函数 1&#xff09;fgetc&#xff0c;fputc 2&#xff09;fp…

AI修改验证账号名正则表达式的案例

我有如下的一行老代码&#xff0c;今天复用的时候发现当时注释写错了&#xff0c;改好以后请AI再检查一遍。 因为这次AI的分析的思路很典范&#xff0c;所以拿出来分享一下。 提问&#xff1a; 请看一下这个正则和后面的注释是否匹配&#xff0c;现在的验证规则是否保证账号至…

SQL进阶技巧:如何进行数字范围统计?| 货场剩余货位的统计查询方法

目录 0 场景描述 1 剩余空位区间和剩余空位编号统计分析 2 查找已用货位区间 3 小结 0 场景描述 这是在做一个大型货场租赁系统时遇到的问题&#xff0c;在计算货场剩余存储空间时&#xff0c;不仅仅需要知道哪些货位是空闲的&#xff0c;还要能够判断出哪些货位之间是连…

彻底理解如何保证Redis和数据库数据一致性问题

一.背景 系统中缓存最常用的策略是&#xff1a;服务端需要同时维护 DB 和 Cache 并且是以 DB 的结果为准&#xff0c;那么就可能出现 DB 和 Cache 数据不一致的问题。 二.读数据 逻辑如下&#xff1a; 当客户端发起查询数据的请求&#xff0c;首先回去Redis中查看没有没该数据&…

后仿真中的SDF语法之关键字 IOPATH 用法详解

在后仿真中&#xff0c;SDF&#xff08;Standard Delay Format&#xff09;文件用于描述设计的时序信息&#xff0c;而IOPATH是SDF中的一个关键结构&#xff0c;用于定义单元间的路径延迟。以下是IOPATH关键字的用法及其相关内容的详细介绍&#xff1a; IOPATH结构旨在将延迟数…

Springboot 整合 Java DL4J 搭建智能问答系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

基于SpringBoot的“网上书城管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“网上书城管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 用户注册界面…

测评部署和管理 WordPress 最方便的面板

新版宝塔面板快速搭建WordPress新手教程 - 倚栏听风-Morii - 博客园 初学者使用1Panel面板快速搭建WordPress网站 - 倚栏听风-Morii - 博客园 可以看到&#xff0c;无论是宝塔还是1Panel&#xff0c;部署和管理WordPress都有些繁琐&#xff0c;而且还需要额外去配置Nginx和M…

网络安全问题概述

1.1.计算机网络面临的安全性威胁 计算机网络上的通信面临以下的四种威胁&#xff1a; (1) 截获——从网络上窃听他人的通信内容。 (2) 中断——有意中断他人在网络上的通信。 (3) 篡改——故意篡改网络上传送的报文。可应用于域名重定向&#xff0c;即钓鱼网站。 (4) 伪造——伪…

视觉顶会论文 | 基于Swin Transformer的轴承故障诊断

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

Altenergy电力系统控制软件 status_zigbee SQL注入漏洞复现(CVE-2024-11305)

0x01 产品简介 Altenergy电力系统控制软件是Altenergy Power System推出的一款专业软件。旨在为用户提供全面、高效、安全的电力系统控制解决方案。广泛应用于各类电力系统领域,如电力调度中心、发电厂、变电站、工业园区等。通过该软件的应用,用户可以实现对电力系统的全面…

java: spire.pdf.free 9.12.3 create pdf

可以用windows 系统中文字体&#xff0c;也可以从文件夹的字体文件 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看&#xff1a;言語成了邀功盡責的功臣&#xff0c;還需要行爲每日來值班嗎* 描述&#xff1a;* # Author : geovindu,Geovin Du 涂…

AUTOSAR网络管理中的主动唤醒与被动唤醒

文章目录 1、主动/被动唤醒源、主动/被动唤醒节点2、网络拓扑说明 1、主动/被动唤醒源、主动/被动唤醒节点 休眠唤醒需要有一个触发源来进行触发&#xff0c;我们常用的NM报文是其中的载体之一。休眠唤醒的触发源又分为主动唤醒源和被动唤醒源。 主动唤醒源&#xff0c;就是能…

索贝融媒体 Sc-TaskMonitoring/rest/task/search SQL注入漏洞复现

0x01 产品简介 索贝融媒体产品是成都索贝数码科技股份有限公司(简称索贝)为各级电视台和媒体机构打造的一套集互联网和电视融合生产的解决方案。其代表产品为MCH2.0融合媒体生产业务系统,该系统带来了媒体领域一种全新的融合生产流程和工作机制,具有全方位的资源汇聚能力、…

【PyTorch】Pytorch中torch.nn.Conv1d函数详解

1. 函数定义 torch.nn.Conv1d 是 PyTorch 中用于一维卷积操作的类。定义如下&#xff1a; 官方文档&#xff1a;https://pytorch.ac.cn/docs/stable/generated/torch.nn.Conv1d.html#torch.nn.Conv1d torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride1,paddi…

[大数据]Trino

Trino安装部署-CSDN博客 Central Repository: io/trino/trino-server 下载地址: repo1.maven.org/maven2/io/trino/Central Repository: io/trino/trino-serverhttps://repo1.maven.org/maven2/io/trino/trino-server/ vim /etc/security/limits.conf * soft nofile 131072…