当前位置: 首页 > news >正文

@开源爱好者,字节跳动这项技术,正式宣布开源了

告诉大家一个好消息,字节跳动的云原生数据仓库 ByConity 正式宣布开源了。

ByConity 是一个云原生数据仓库,由字节跳动数据平台团队在国际知名开源数据库管理系统 ClickHouse 社区版本基础上开发。

早期,字节跳动的数据存储使用的是 ClickHouse 的开源版本。但由于业务体量大、业务场景复杂,数据平台团队对此进行了大量的深度优化和自研改进,用以支撑字节跳动业务中各类与数据相关的功能模块,现在正式宣布开源,回馈社区。此前,字节跳动还发布过云原生数据仓库的商业化版本 ByteHouse。

ByConity 开源之前,字节跳动数据平台团队也曾考虑将自研修改合并回 ClickHouse 社区,与 ClickHouse 核心研发团队、ClickHouse 创业公司负责人沟通后,得到的反馈是架构差异过大、合并难度和代价大、无法联合开发。按照 ClickHouse 社区给到的建议,数据平台团队决定独立开源。

ByConity 具有读写分离弹性扩缩容租户资源隔离数据读写的强一致性等特点,其计算-存储分离的架构,结合主流的 OLAP 引擎优化,确保了优异的读写性能。

今年 1 月,ByConity Beta 版本发布后,得到了来自华为、电子云、展心展力、天翼云、唯品会、传音控股等十几家企业开发者的支持,他们帮助 ByConity 在各自的场景下进行了测试与验证,并反馈出不错的效果。

话不多说,先上 GitHub 地址:

GitHub - ByConity/ByConity: ByConity is an open source cloud-native data warehouse

ByConity:三层架构的数据仓库

ByConity 的整体架构分为三层,包括服务接入层计算层数据存储层

ByConity 三层技术架构图

服务接入层:

接受用户的查询,由一个或者多个 server 构成,并支持水平扩张,充当的是响应用户服务和协调调度的角色。除了用户作业之外,在 ByConity 里还有后台任务,例如 compaction/gc 等等,这些后台任务由 Daemon manager 管理,调度到相应的 server 进行执行。

计算层

由一个或者多个计算组(Virutual Warehouwe,VW)构成,不同的租户可以使用不同的计算组实现物理资源隔离。资源管理器负责对计算资源进行统一的管理和调度,能够收集各个计算组的性能数据、资源使用量,为查询、写入和后台任务动态分配资源并进行动态扩缩容,提高资源使用率。

数据存储层

用于存放用户数据。ByConity 的元数据和数据都实现了存储计算分离,元数据存储在分布式 key-value store 里,数据存储在分布式文件系统或者对象存储里。

ByConity 内部组件交互图

目前,ByConity 支持单机 Docker、K8s 集群部署、物理机部署和源代码编译四种获取和部署模式。

五年时间,从 ClickHouse 到 ByConity

2018 年,字节跳动开始在内部使用 ClickHouse,因为业务发展迅速、用户体量大,数据规模变得越来越巨大。

由于 ClickHouse 是 Shared-Nothing 架构,每个节点相互独立,不会共享存储资源等,因而计算资源和存储资源紧耦合,这使它在字节跳动的应用过程中产生了一些不便之处。

比如扩缩容的成本比较高,且会涉及到数据迁移,不能实时按需扩缩容,导致资源浪费;比如多租户在共享集群环境相互影响,同时由于读写在同一个节点完成,导致读写相互影响;此外,ClickHouse 在复杂查询上例如多表 Join 等操作的性能支持并不是很好。

因此,字节跳动于 2020 年在内部启动了 ByConity 项目,在原有的 ClickHouse 架构基础上进行了升级,将原本计算和存储分别在每个节点本地管理的架构,转换为在分布式存储上统一管理整个集群内所有数据的架构,使得每个计算节点成为一个无状态的单纯计算节点,并利用分布式存储的扩展能力和计算节点的无状态特性实现动态的扩缩容。

这种改进使得升级后的架构具有以下重要特性:

  • 资源隔离:对不同的租户进行资源的隔离,租户之间不会受到相互影响;
  • 读写分离:计算资源和存储资源解耦,确保读操作和写操作不会相互影响;
  • 弹性扩缩容:支持弹性的扩缩容,能够实时、按需的对计算资源进行扩缩容,保证资源的高效利用;
  • 数据强一致:数据读写的强一致性,确保数据始终是最新的,读写之间没有不一致;
  • 高性能:采用了主流的 OLAP 引擎优化,例如列存、向量化执行、MPP 执行、查询优化等提供优异的读写性能。

随着对自研表引擎、查询优化器、存储计算架构的优化与自研改造,字节跳动内部有越来越多的场景逐步使用新架构,也在不同的场景中进行了验证与优化,慢慢沉淀出了一个云原生版本的数仓 ByConity。

加入字节跳动,一起做开源

字节跳动还将继续增强 ByConity 的功能、性能和易用性,其中开发新的存储引擎支持更多的数据类型与其他数据管理工具的集成是重点关注的领域。

具体包含以下几个方向:

  • 性能提升:使用索引进行加速,包含 Skip-index 优化、新的 Zorder-index 和倒排索引等支持、外表索引的构建和加速、以及索引的自动推荐和转换;查询优化器的持续优化;分布式缓存机制等。
  • 稳定性提升:支持更多维度的资源隔离,提供更好多租户能力;丰富 Metrics,提升可观察性和问题诊断能力。
  • 企业级特性增强:实现更细粒度权限控制;完善数据安全性相关的功能(备份、恢复和数据加密);持续探索数据的深度压缩,节约存储成本。
  • 生态兼容性提升:支持 S3、TOS 等对象存储;提升生态兼容性方便集成;支持数据湖联邦查询如 Hudi、Iceberg等。

除开源版本之外,ByConity 产研团队还同时支持商业化版本 ByteHouse 和字节内部产品线,ByConity 即为 ByteHouse 的内核。团队相关负责人表示,开源版和商业版融合度非常高,未来 ByConity 会朝更加开放的引擎开发模式发展,后续对 ByteHouse 的改动会基于 ByConity 源代码用开源的方式来开发,开源先行,同步发展。

相关文章:

@开源爱好者,字节跳动这项技术,正式宣布开源了

告诉大家一个好消息,字节跳动的云原生数据仓库 ByConity 正式宣布开源了。 ByConity 是一个云原生数据仓库,由字节跳动数据平台团队在国际知名开源数据库管理系统 ClickHouse 社区版本基础上开发。 早期,字节跳动的数据存储使用的是 ClickHou…...

React学习笔记八-受控与非受控组件

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第八篇,主要介绍非受控组件与受控组件。 目录 1.非受控组件 1.1表单提交案例 1.2案例的总结 2.受控组件 2.1受控组件案例 2.1受控案例总结 1.非受控组件 1.1表单提…...

gcc编译

一、GCC简介 GCC(GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器,因为它原本…...

华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)

华为云HECS云服务器即云耀云服务器,类似于阿里云和腾讯云的轻量应用服务器,HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月,华为云百科分享华为云HECS云服务器租用费用及CPU性能详解: 目录 华为云…...

Redis---事务管道

目录 一、Redis的事务是什么? 1.1 Redis和关系型数据库事务的区别 二、怎么玩Redis事务? 2.1 正常执行: 2.2 放弃事务 2.3 全体连坐 2.4 冤头债主 2.5 watch监控 三、管道 3.1 为什么会引入管道这个概念呢?我们首先来看一…...

Python的内置数据类型(通过故事来学习)

有一天,小李在学习Python语言时,听到了一个关于内置数据类型的故事。 Python内置了很多数据类型,比如整数、浮点数、字符串、布尔值等等。这些数据类型可以帮助我们更方便地处理数据,提高代码的效率。 小李很好奇,就…...

继瑞吉外卖后的又一个项目——SpringBoot+Vue的前后端博客系统

文章目录 博客系统项目介绍前言项目演示前台演示后台演示 组织结构后端组织结构前端组织结构 技术选型前端技术后端技术架构图系统架构图业务架构图 模块介绍前端模块后端模块 环境搭建开发工具开发环境项目运行 未完待续结语 博客系统项目介绍 前言 本项目已开源在Gitee 后端…...

2023暑期实习历程总结

一.前言 Hello 大家好久不见,已经三个月左右没有更新了,那我这三个月在干什么呢?自2023年3月中旬开始到现在五月底这期间接近三个月的时间里,我一直在进行2023暑期实习的投递和面试。这期间投递了包括各大中厂(阿里&am…...

UART-STM32

UART-STM32 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 第一步,开启时钟,把需要用的USART和GPIO的时钟打开 第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入 第三步,配置USART,直接使…...

jetson nano csi摄像头 tensorrt 运行yolov8检测

jetson nano csi摄像头 tensorrt 运行yolov8检测 基于原始onnx模型的tensorrt预测1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine3. 使用python3 tensorrt 读取csi摄像头进行预测修改on…...

提升国际品牌影响力:小企业海外网红营销实战指南

在当今数字化时代,小企业们越来越意识到海外市场的巨大潜力。与此同时,海外网红的崛起也为小企业提供了一个独特的机会,通过与他们合作,迅速拓展国际市场并吸引更多目标受众的关注。然而,对于许多小企业来说&#xff0…...

从零开始的力扣刷题记录-第三十九天

力扣每日四题 228. 汇总区间-简单1431. 拥有最多糖果的孩子-简单637. 二叉树的层平均值-简单49. 字母异位词分组-中等总结 228. 汇总区间-简单 题目描述: 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也…...

PDPS教程:机器人工作站导出为JT格式文件操作方法

目录 功能简介 功能注意事项 导出JT格式文件操作 导出JT格式文件查看 功能简介 PDPS软件不仅能够从外部导入JT格式的模型文件,还能够将创建好的机器人工作站/生产线导出为JT格式的模型文件。这个能够导出JT格式文件的功能就是“Export JT”命令。 使用“Expor…...

【面试】为什么Mysql用B+树做索引而不用B-树或红黑树

文章目录 前言一、B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。二、那么Mysql如何衡量查询效率呢?三、B树相对于红黑树的区别 前言 原因如下: B树能显著减少IO次数,提高效率B树的查询…...

教你如何选择真正有用的防关联指纹浏览器

从事亚马逊、eBay、Shopify等电商平台的卖家都知道,如果我们需要在这些平台上经营多个店铺,需要使用多个账号为店铺进行评价,在Facebook和Instagram上做SEO和广告,通常也需要使用一个防关联指纹浏览器。 防关联指纹浏览器主要解决…...

某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,该怎么办?

高薪能买来快乐吗? 来看看这位程序员的哀叹: 实在是扛不住了,每天都在极度焦虑和痛苦中度过,早上起来要挣扎着做心理建设去上班,已经产生生理性的头晕恶心食欲不振。有工作本身的原因,更多是自己心态的问…...

不愧是腾讯出来的,太厉害了...

前段时间公司缺人,也面了许多测试,一开始瞄准的就是中级水准,当然也没指望能来大牛,提供的薪资在15-20k这个范围,来面试的人有很多,但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…...

2023年上半年系统集成项目管理工程师上午真题及答案解析

1.在( )领域我国远末达到世界先进水平,需要发挥新型国家体制优势,集中政府和市场两方面的力量全力发展。 A.卫星导航 B.航天 C.集成电路 D.高铁 2.ChatGPT 于2022年11月30日发布,他是人工智能驱动( )。 …...

psd文件丢失了怎么恢复?分享原因及对应恢复方法

PSD文件在设计行业中非常重要。但是,不幸的是,有时这些文件可能会因多种原因而丢失。那么在未备份PSD文件的情况下,PSD文件丢失了怎么恢复呢?如果您遇到了这种问题,不要惊慌,在本篇文章中,我们将…...

【Netty】 工作原理详解(十一)

文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二&…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...