字节跳动开源其云原生数据仓库 ByConity

news2025/1/16 3:01:38

动手点关注

0e31463bb468d6dc1641612123b0aff7.gif

干货不迷路

‍项目简介

ByConity 是字节跳动开源的云原生数据仓库,它采用计算-存储分离的架构,支持多个关键功能特性,如计算存储分离、弹性扩缩容、租户资源隔离和数据读写的强一致性等。通过利用主流的 OLAP 引擎优化,如列存储、向量化执行、MPP 执行、查询优化等,ByConity 可以提供优异的读写性能。

项目背景

ByConity 的背景可以追溯到 2018 年,当时字节跳动开始在内部使用 ClickHouse,因为业务的发展,要服务于大量的用户,数据规模变得越来越巨大。由于 ClickHouse 是 Shared-Nothing 的架构,每个节点是独立的,不会共享存储资源等,因而计算资源和存储资源是紧耦合的,这使得 ClickHouse 在使用过程中会遇到以下情况:

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

  • 其次,ClickHouse 紧耦合的架构会导致多租户在共享集群环境相互影响,同时由于读写在同一个节点完成,导致读写相互影响;

  • 最后,ClickHouse 在复杂查询上例如多表 Join 等操作的性能支持并不是很好。

基于这些痛点,字节在 ClickHouse 架构基础上进行了升级,于 2020 年在内部启动了 ByConity 项目,并于 2023 年 1 月发布 Beta 版本,5月底正式对外开源。

d5ca73afb0f8cd1f1c55f6d06023ce7c.png

图1 字节 ClickHouse 使用情况

功能特性

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

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

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

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

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

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

技术架构

整体架构

ByConity 的架构分为三层,包括服务接入层,计算层数据存储层。 服务接入层负责客户端数据和服务的接入,也就是 ByConity Server;ByConity 的计算资源层,由一个或者多个计算组构成,每个 Virtual Warehouse(VW)是一个计算组;数据存储层由分布式文件系统,如 HDFS、S3 等构成。

3581cd84f1deb6996710fbdb8e06b617.png

图2 ByConity 三层技术架构图

工作原理

图4 是 ByConity 组件交互图,图中虚线部分表示一个 SQL 的流入,实线部分的双向箭头表示组件内的交互,单向箭头表示数据的处理并输出给客户端。我们将通过一个 SQL 的完整生命周期来具体分析它在 ByConity 各个组件的交互过程。

5c7618676a67bf261fdf97976125cbc5.png

图3 ByConity 内部组件交互图

  • 第一阶段:客户端提交 Query 请求给 Server 端,Server 端首先进行 Parsering,然后通过 Analyzer 和 Optimizer分析和优化生成更加高效的可执行计划。这里需要读取元数据 MetaData,元数据存储在一个分布式 KV 里,ByConity 使用 FoundationDB,并通过 Catalog 读取元数据。

  • 第二阶段:ByConity 把通过分析和优化器后产生的可执行计划交由调度器(Plan Scheduler),调度器通过访问Resource Manager 获取空闲的计算资源,并决定把查询任务调度到哪些节点去执行。

  • 第三阶段:Query请求最终在 ByConity 的 Worker 上执行,Worker 会从最底层的 Cloud Storage 读取数据,并通过建立 Pipeline 的方式进行计算。最终多个 Worker 的计算结果通过 Server 汇聚,并返回给客户端。

ByConity 还有两个主要的组件,分别是 Time-stamp Oracle 和 Deamon Manager。前者支持事务处理,后者则对后来的一些任务进行管理和调度。

主要组件库

元数据管理

ByConity 提供了一个高可用和高性能的元数据读写服务--Catalog Server,并且支持了完备的事务语义特性(ACID)。同时我们对 Catalog Server 做了比较好的抽象,使得后端的存储系统是可插拔的,当前我们支持的是苹果开源的 FoundationDB,后面可以通过扩展去支持更多的后端存储系统。

查询优化器

查询优化器是数据库系统的核心之一。一个优秀的优化器可以大大提高查询性能。尤其是在复杂的查询场景下,优化器可以带来数倍至数百倍的性能提升。ByConity 自研优化器基于两个方向提升优化能力:

  • RBO:基于规则的优化能力。支持:列裁剪、分区裁剪、表达式简化、子查询解除关联、谓词下推、冗余运算符消除、Outer-Join to Inner-Join、运算符下推存储、分布式运算符拆分等常见的启发式优化能力。

  • CBO:基于成本的优化能力。支持:Join Reorder、Outer-Join Reorder、Join/Agg Reorder、CTE、Materialized View、Dynamic Filter Push-Down、Magic Set 等基于成本的优化能力,并为分布式计划集成 Property Enforcement。

查询调度

ByConity 目前支持两种查询调度策略:Cache-aware 调度和 Resource-aware 调度。其中:

Cache-aware 调度针对计算和存储分离的场景,旨在最大化 Cache 的使用避免冷读。Cache-aware 调度策略会尽可能地将任务调度到拥有对应数据缓存的节点上,实现计算命中 Cache,提升读写性能。同时,由于系统进行动态的扩缩容,当计算组的拓扑发生变化时,需要最小化 Cache 失效对查询性能的影响。

Resource-aware 调度通过感知整个集群中计算组不同节点的资源使用情况,并有针对性地进行调度,以最大化资源利用,同时还会进行流量控制,确保合理使用资源,避免过载造成的负面影响,如系统宕机等。

计算组

ByConity支持不同的租户使用不同的计算资源,如图5 所示。在 ByConity 新的架构下,很容易实现了多租户隔离和读写分离等特性。不同租户可以使用不同的计算组,实现多租户隔离,同时支持读写分离。由于扩缩容方便,计算组可以按需进行动态的扩缩容,保证资源利用率高效。当资源利用率不高时,可以进行资源共享,借调计算组给其他租户使用,实现资源的最大化利用并降低成本。

7af3bfb6a8096e66a64abfdbec4d8907.png

图4 计算组和多租户

虚拟文件系统

虚拟文件系统模块作为数据读写的中间层,ByConity 做了比较好的封装,将存储作为一种服务暴露给其他模块使用,实现“存储服务化”。虚拟文件系统提供了一个统一的文件系统抽象,屏蔽了不同的后端实现,方便扩展并支持多种存储系统,如 HDFS 或对象存储等。

缓存加速

ByConity 通过缓存进行查询加速,在计算-存储分离的架构下,ByConity 在元数据和数据维度都进行缓存加速。在元数据维度,通过在 ByConity 的 Server 端的内存中进行缓存,以 Table 和 Partition 作为粒度。在数据维度,通过在ByConity 的 Worker 端,也就是计算组进行缓存,而且在 Worker 端的缓存是层次化的,同时利用了 Memory 和磁盘,以 Mark 集合作为缓存粒度,从而有效地提高查询速度。

如何获取和部署

ByConity 目前支持四种获取和部署模式,欢迎社区开发者使用,并给我们提 Issue:

  • 单机Docker:https://github.com/ByConity/byconity-docker

  • K8s集群部署:https://github.com/ByConity/byconity-deploy

  • 物理机部署:https://github.com/ByConity/ByConity/tree/master/packages

  • 源代码编译:https://github.com/ByConity/ByConity#build-byconity

开源规划

Roadmap

https://github.com/ByConity/ByConity/issues/26

ByConity 在 2023 年的开源社区路线图中包括多个关键里程碑。这些里程碑旨在增强 ByConity 的功能、性能和易用性。其中,开发新的存储引擎支持更多的数据类型与其他数据管理工具的集成是我们重点关注领域。具体包含以下几个方向:

  • 性能提升:使用索引进行加速,包含 Skip-index 优化、新的 Zorder-index 和倒排索引等支持、外表索引的构建和加速、以及索引的自动推荐和转换;查询优化器的持续优化;分布式缓存机制等。

  • 稳定性提升:支持更多维度的资源隔离,提供更好多租户能力;丰富 Metrics,提升可观察性和问题诊断能力。

  • 企业级特性增强:实现更细粒度权限控制;完善数据安全性相关的功能(备份、恢复和数据加密);持续探索数据的深度压缩,节约存储成本。

  • 生态兼容性提升:支持 S3、TOS 等对象存储;提升生态兼容性方便集成;支持数据湖联邦查询如 Hudi、Iceberg等。

社区合作共建

在 ByConity 发布 Beta 版本后,得到了来自华为、电子云、展心展力、天翼云、唯品会、传音控股等十几家企业开发者的支持,他们帮助 ByConity 分别在各自的环境下跑通了 TPC-DS 验证,有些在自身业务场景下进行测试并反馈出不错的效果,同时也给我们提出了诸多改进建议,我们对此表示非常感谢。同时也很荣幸收到社区伙伴一起共建的意愿和想法,例如,我们与华为终端云的交流中达成了共建合作,未来会在 Kerberos 鉴权、ORC 的支持、以及支持 S3 存储上一起共建。如果您有意向参与,请扫描以下二维码加入我们。

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

b424747fab54abdb95efd1c6f5e0ad55.png

ByConity 社区微信交流群

1be16a8338e4cd3747ec57ea102efcaa.png

ByConity 社区飞书交流群

总之,ByConity 是一个开源的云原生数据仓库,提供读写分离、弹性扩缩容、租户资源隔离和数据读写的强一致性。其计算-存储分离的架构,结合主流的 OLAP 引擎优化,确保了优异的读写性能。随着 ByConity 的不断发展和改进,希望成为未来云原生数据仓库的重要工具。

c63911963c5f76d92f6c2ccf85af8fc0.png 点击「阅读原文」了解更多

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达 x OpenAI Prompt Engineering教程中文笔记

Datawhale干货 作者:刘俊君,Datawhale成员 完整课程:《吴恩达ChatGPT最新课程》 🐳Reasons & Importance Important for research, discoveries, and advancement 对研究、发现和进步很重要 Accelerate the scientific resea…

案例15:Java餐厅外卖管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

一步步教你安装RabbitMQ Server在Ubuntu上,并让其支持远程访问!

文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自cpolar内网穿透的文章:无公网IP&…

针对自主泊车的多相机视觉惯导同时定位与建图方案

文章:Multi-Camera Visual-Inertial Simultaneous Localization and Mapping for Autonomous Valet Parking 作者:Marcus Abate, Ariel Schwartz, Xue Iuan Wong, Wangdong Luo, Rotem Littman, Marc Klinger, Lars Kuhnert, Douglas Blue, Luca Carlone…

chatgpt赋能Python-python_geohash

Python GeoHash: 将位置信息转换为字符串 在现代生活中,我们经常需要处理和分析大量的位置信息,包括地图、GPS、定位等。而一种流行的做法是将位置信息转换为字符串,并使用该字符串进行存储、传输和查询。GeoHash就是一种将位置信息压缩为字…

Tomcat之服务管理页面manager部署

一、tomcat服务管理页面manager简介 Tomcat的管理页面Manager是一个Web应用程序,用于管理Tomcat服务器的部署和操作。它提供了一个易于使用的界面,可以通过Web浏览器访问。Manager可以帮助管理员对Tomcat服务器进行以下操作: 部署/卸载Web应…

chatgpt赋能Python-python_gil

简介 Python(特别是 CPython 实现)有一个全局解释器锁(Global Interpreter Lock,简称 GIL),它的作用是确保只有一个线程可以执行 Python 代码。这让多线程 Python 程序的并发性有所限制。 为什么需要 GIL…

谁在杀死 ChatGPT ?

作者| Mr.K 编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) AI浪潮汹涌而来,离我们越来越近,有时候近到只差一个APP的距离。很多人把AI科技可能带来的全方位社会变革,称之为第四次科技革命,把ChatGPT称为“第四次科…

【010】C++运算符详解

C运算符详解 引言一、运算符概述二、算术运算符三、复合运算符四、关系运算符五、逻辑运算符六、位运算符&#xff08;二进制位运算&#xff09;6.1、& 按位与6.2、| 按位或6.3、~ 按位取反6.4、^ 按位异或6.5、<< 左移&#xff1a;左边丢弃&#xff0c;右边补零6.5、…

MySQL高级篇——排序、分组、分页优化

导航&#xff1a; 【Java笔记踩坑汇总】Java基础进阶JavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线MySQL高级篇设计模式牛客面试题 目录 5. 排序优化 5.1 排序优化建议 5.2 测试 5.2.1 案例验证 5.3.2 练习 5.3 范围查询时索引字段选择 5.4 filesor…

chatgpt赋能Python-python_fem

Python在有限元分析中的应用 什么是有限元分析 有限元分析&#xff08;Finite Element Analysis, FEA&#xff09;是一种针对工程结构、材料及其它物理现象进行数值仿真的方法。它通过将结构或者物理现象的连续域分割成有限个小元素&#xff0c;再在每个小元素中建立数学模型…

【搭建HTTP服务器】使用Nodejs搭建简单的HTTP服务器

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

当在网页浏览器的地止栏中输入URL或关键词时,web页面是如何呈现的?

前言 当我们在浏览器中输入一个url,或在搜索引擎或网站内,输入一个关键词进行搜索时,页面发生了什么呢? 即使不了解其中的原理,也能看到web页面 在浏览器地止栏内输入一个url之后,信息会被传到某些地方(后台,可以成为服务端)&#xff0c;然后后台得到响应后,从后台(服务端)返回…

Day4——数据库基础1(已完结)

Day4——数据库基础 数据库基础--基于phpstudy自带的MySQL数据库&#xff08;下载了PHPstudy后就无需下载额外的MySQL&#xff09; 一、数据库概念1、为什么要学习数据库&#xff1f;2、什么是数据库&#xff1f;3、数据库的访问方式4、数据管理技术经历的三个阶段5、关系型数据…

YOLOv5区域检测计数+声音警报

YOLOv5区域检测计数声音警报 1. 相关配置2. 检测区域设置3. 画检测区域线&#xff08;不想显示也可以不画&#xff09;4. 报警模块5. 计数模块6. 代码修改6.1 主代码6.2 细节修改&#xff08;可忽略&#xff09; 6. 实验效果 本篇博文工程源码下载 链接1&#xff1a;https://gi…

docker 的yum安装

目录 一、配置docker官方的yum仓库 1&#xff09;安装工具yum-utils 2&#xff09;调用yum-utils工具的命令 yum-config-manager 添加 docker官方的社区版yum仓库 二、docker版本选择安装 1、查看docker发布的版本 2、yum 安装docker 3、启动服务&#xff0c;设置开机启…

腾讯云服务器地域怎么选?不同地域有什么区别?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域成本因素…

逆波兰算法

目录 介绍一下逆波兰算法 能举一个逆波兰算法应用的运算示例吗&#xff1f; 介绍一下逆波兰算法 逆波兰算法&#xff0c;也称为后缀表达式算法或逆波兰记法&#xff0c;是一种用于计算数学表达式的算法。与常见的中缀表达式&#xff08;如 3 4&#xff09;不同&#xff0c;逆…

系统设计 - 设计一个速率限制器

实施速率限制器的位置主要取决于我们的应用程序、技术栈、技术团队等因素。通常有三个位置可供选择&#xff1a;客户端、服务器端或中间件。 客户端是不可靠的地方来执行速率限制&#xff0c;因为恶意行为者可以轻易伪造客户端请求。 比将速率限制器放在服务器端更好的方法是使…

海量视频处理的应对和算法实践

随着短视频、直播、智慧城市、5G等的快速发展&#xff0c;视频内容铺天盖地&#xff0c;五花八门&#xff0c;相应的处理需求也多种多样。如何能高效地应对&#xff1f;需要在数据处理系统&#xff0c;底层计算能力&#xff0c;以及算法研究等多方面协同努力。LiveVideoStackCo…