2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

日增 320TB 数据,行为分析系统从 ClickHouse 迁移至 ByConity 的实践

  • 2023-07-24
    北京
  • 本文字数:2696 字

    阅读完需:约 9 分钟

日增320TB数据,行为分析系统从ClickHouse迁移至ByConity的实践

背景介绍


ByConity 适合多种业务场景,在实时数据接入、大宽表聚合查询、海量数据下复杂分析计算、多表关联查询场景下有非常好的性能。我们用一个实际的业务场景来介绍下,这套行为分析系统是基于用户多维度行为分析平台,提供事件分析、留存分析、转化分析、用户分群、用户留存等多种分析方式和场景。本文将介绍下该用户多维度行为分析平台在使用原 ClickHouse 集群遇到的问题和挑战,以及通过迁移 ByConity 后如何解决这些问题并给业务带来的收益。

图 1 行为分析系统架构设计

问题和挑战


早期这套系统部署在 ClickHouse 集群,一方面,由于业务的高速发展导致数据量日益膨胀,每日最大新增数据超过 320TB,每日新增行数超过 2.3 万亿条,用户数据维度超过 2 万多个;另一方面,用户查询需求更加灵活和多样化,需要同时支持明细查询、聚合查询以及交互式分析查询,并快速给出响应结果。


此外,在数据量不断增加的情况下(年增长 35%),我们既要能支撑这么大的数据增量带来的挑战,又要把成本增速控制在一定范围内。


但是在已有的 ClickHouse 集群上我们很难做到。原因是 ClickHouse 是基于 Shared-Nothing 的架构,每个节点是独立的,不会共享存储资源,因而计算资源和存储资源是紧耦合的,会导致如下问题:


  • 扩缩容成本变高,且会涉及到数据迁移,使我们不能实时按需的扩缩容,而且会导致资源的浪费,成本不可控

  • 紧耦合的架构会导致多租户在共享集群环境相互影响,造成用户查询相互影响

  • 由于集群上节点的读写在同一个节点完成,导致读写相互影响

  • 在复杂查询上例如多表 Join 等操作的性能支持并不是很好,无法满足用户查询多样化的需求

技术选型


因此在 2022 年初业务开始使用计算存储分离架构的 ByConity 来作为主要的 OLAP 引擎。ByConity 是一个开源的云原生数据仓库,它采用计算存储分离的架构,支持多个关键功能特性,如计算存储分离、弹性扩缩容、多租户资源隔离和数据读写的强一致性等。通过利用主流的 OLAP 引擎优化,如列存储、向量化执行、MPP 执行、查询优化等,ByConity 可以提供优异的读写性能。

图 2 ByConity 三层技术架构图


ByConity 是在开源的 ClickHouse 架构基础上进行了升级,引入了计算与存储分离的架构,将原本计算和存储分别在每个节点本地管理的架构,转换为在分布式存储上统一管理整个集群内所有数据的架构,使得每个计算节点成为一个无状态的单纯计算节点,并利用分布式存储的扩展能力和计算节点的无状态特性实现动态的扩缩容。正是由于这种改进,使得 ByConity 具有以下重要特性:


  • 资源隔离:对不同的租户进行资源的隔离,租户之间不会受到相互影响。

  • 读写分离:计算资源和存储资源解耦,确保读操作和写操作不会相互影响。

  • 弹性扩缩容:支持弹性的扩缩容,能够实时、按需的对计算资源进行扩缩容,保证资源的高效利用。

  • 数据强一致:数据读写的强一致性,确保数据始终是最新的,读写之间没有不一致。

  • 高性能:采用了主流的 OLAP 引擎优化,例如列存、向量化执行、MPP 执行、查询优化等提供优异的读写性能

业务收益


在我们引入了 ByConity 后,整体性能可以达到 91%用户查询都可以在 10 秒内完成,通过来自用户的反馈调研,这个性能指标也是在用户可接受的范围内。这里总结下我们迁移 ByConity 带来的总体收益和经验:


  • 避免资源抢占,查询性能百分百稳定

在原来 ClickHouse 的集群上,我们经常会遇到资源挤占的问题,由于 ClickHouse 并没有做到资源隔离和租户隔离,在多个用户共用集群进行查询时,当一个用户查询资源开销非常大,会涉及资源的抢占,导致这个集群上所有共用的用户查询都不稳定,服务质量达不到满足。但在迁移到 ByConity 后,由于计算组是完全物理隔离,可以达到天然的资源隔离和租户隔离,不同用户的查询相互不受到影响,整体查询性能可以达到 91%用户查询都可以在 10 秒内完成。再者 ByConity 提供了自研的复杂查询链路,自研 Disk Cache 以减少冷数据读取,并对于高频使用的 Array 建立索引等,而且热读效率也优于原 ClickHouse 集群,相比在原 Clickhouse 集群上性能折损在 10%以内。


  • 运维成本低,故障节点秒级替换

原本在 Clickhouse 集群上,如果发现集群中某个节点坏掉,需要先下掉整台机器维修,这是因为 ClickHouse 的计算资源、存储资源、以及元数据信息都在这个节点上,相当于集群少了一个计算资源,也少了一个存储副本,在替换新的节点之前,需要把对坏掉节点的本地磁盘进行备份迁移到新的节点上,维护成本比较高,且数据一致性很难得到保障。而对于 ByConity 来讲,如果发生计算组坏掉的情况,由于计算组不存储数据,只包含无状态的计算节点,因此只需要替换新的计算组即可,数据的可靠性和一致性由 HDFS 来保障,且本地热读数据缓存的丢失对业务查询性能是可控的,这部分也主要得益于了 ByConity 存储和计算分离架构实现。


  • 无感扩缩容,节约资源成本:

ByConity 是可以实现无感扩缩容,它是一个模块化和容器化的部署,基于 Kubernetes 的弹性伸缩能力,如果有足够的机器可以无限的扩容,同时如果服务器发生故障,我们也不用担心,因为 ByConity 的节点只一个无状态的计算节点,直接下掉对整个集群影响不大。而且通过自适应调度回避慢节点,提升吞吐能力,提高节点资源利用率。同时 ByConity 的压缩率极高,以其中一个业务为例,每日新增 460TB 数据,压缩后达到 100TB,压缩比达到 65%,并支持低基数编码 & ZSTD 等等压缩方式,极端情况下存储占用小于 parquet。


  • 数据一致性强保障,维护复杂度接近为零

在迁移到 ByConity 后,我们完全解决了数据一致性问题,因为 ByConity 不存在本地的主备同步问题,数据一致性问题直接交给底层的对象存储解决,例如 HDFS/S3 等。这样对一致性维护的复杂度大大降低,错误概率也更低,目前也少有用户再反馈数据一致性问题。但在之前是经常遇到,因为 ClickHouse 集群是多个副本通过节点间通信去维护的,通过一致性队列去维护一致性问题,实现上也很复杂,容易出错。另外,ByConity 可以通过 HDFS 直接访问到数据文件,不同计算引擎适配不同连接器,即可读入数据,具备通用能力。

未来展望


通过长达一年半的实践摸索,ByConity 已经成为内部使用的主要 OLAP 引擎,后期会有大量的用户和数据迁入,最终取代原本的 ClickHouse 集群。可以看出 ByConity 作为一款计算存储分离的 OLAP 引擎,具有高性能、高可扩展性和高稳定性等优点,能够满足大规模体量的数据处理和分析的需求。同时,通过在社区的交流,以及社区发布的 Roadmap 讨论https://github.com/ByConity/ByConity/issues/26,未来阶段 ByConity 会主要聚焦在以下几个方向:


  1. 支持执行层的多 Stage 执行、ETL 能力等

  2. 支持数据湖联邦查询如 Hudi、Iceberg 等

ByConity 社区拥有大量的用户,同时是一个非常开放的社区,我们邀请大家和我们一起在 Github 上讨论共建。

GitHub:https://github.com/ByConity/ByConity

2023-07-24 17:425263

评论 2 条评论

发布
用户头像
整体性能可以达到 91%用户查询都可以在 10 秒内完成,请问下这个要求是不是有点低?
2023-07-25 09:23 · 广东
回复
这个是UBA场景,这个性能在行业这个场景下是比较高的了。看你是什么场景?例如如果是BI当然需要更高
2023-07-25 19:53 · 北京
回复
没有更多了
发现更多内容

Guava的EventBus事件机制实现

Java你猿哥

Java 源码 ssm Guava EventBus

七大关键技术,华为云数据库GaussD承载金融级核心系统

平平无奇爱好科技

云计算,

复旦MOSS大模型开源了「中国版ChatGPT」,Github和Hugging Face同时上线

肥晨

三周年连更

PHP 中数组是如何灵活支持多数据类型的?

架构精进之路

php 数组 后端 三周年连更

NPM 实用命令与快捷方式

SEAL安全

JavaScript npm 企业号 4 月 PK 榜

率失真函数的性质

timerring

信息论与编码

AI降临,前端启用面壁计划

京东科技开发者

人工智能 AI 前端 企业号 4 月 PK 榜

Tars-Cpp 协程实现分析

vivo互联网技术

协程 TARS

Bytebase 体验官之 MySQL 「SQL 审核」

朱亚光

阿里云机器学习PAI发布基于HLO的全自动分布式系统 TePDist,并宣布开源!

阿里云大数据AI技术

深度学习 分布式系统 开源项目 企业号 4 月 PK 榜

THREE.JS实现炫酷的3D简历网站

知心宝贝

前端 后端 3D ThreeJS 三周年连更

4月26日-30日,KaiwuDB 在数字中国等你!

KaiwuDB

数字中国 KaiwuDB

华为云大数据BI解决方案,助力企业数字化运营

轶天下事

数据灾备方案,华为云为何受众多企业信赖与选择?

平平无奇爱好科技

简直人生外挂,直接涨薪25K,跪谢这份Java性能调优实战宝典

Java 性能优化 JVM 性能调优

从源码全面解析 ArrayBlockingQueue 的来龙去脉

Java 源码 ArrayBlockingQueue

面试还不懂JVM调优,看这篇就够了

程序员小毕

程序员 面试 后端 架构师 jvm调优

华为云虚拟专用网络VPN常见问题解答

YG科技

从原理聊JVM(二):从串行收集器到分区收集开创者G1

京东科技开发者

G1 JVM 垃圾回收器 java 企业号 4 月 PK 榜

Matlab实现粒子群算法

Shine

三周年连更

NFT加密钱包交易系统开发搭建技术

薇電13242772558

NFT

企业数据的最后防线——华为云数据灾备

YG科技

云计算,

华为云OBS,助力企业海量、安全、高可靠、低成本数据存储

轶天下事

云计算,

阿里开发实录:慢SQL拖垮数据库并引发故障

Java永远的神

数据库 sql 程序员 后端 架构师

企业上云,华为云桌面兼顾效率与安全

平平无奇爱好科技

ES的索引结构与算法解析

京东科技开发者

搜索引擎 elasticsearch 索引结构 ES 企业号 4 月 PK 榜

Spring循环依赖为何使用三级缓存?

Java你猿哥

Java spring 缓存 bean spring ioc

GitHub排名第一《lntellij IDEA软件开发与应用实战手册》限时开源

Java你猿哥

Java spring ssm IDEA

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

Java redis 缓存穿透 缓存击穿 缓存雪崩

华为云大数据BI方案为房地产行业数字化发展赋能

轶天下事

云计算,

中国信通院“OSCAR开源生态建设沙龙”成功召开

中国IDC圈

开源

日增320TB数据,行为分析系统从ClickHouse迁移至ByConity的实践_数据湖仓_王蕴博@ByConity布道师_InfoQ精选文章