字节跳动开源ByConity:基于ClickHouse的存算分离架构云原生数仓

采访嘉宾 | 陈星、翟鹿渊
作者 | 蔡芳芳、王一鹏
热闹纷繁的 OLAP 赛道,又迎来一个开源新玩家 。
这几年 OLAP 赛道持续火热,国内外不少开源项目和商业公司活跃其中 。在一众玩家中,ClickHouse 凭借彪悍的性能表现、活跃的开源社区和相当快的迭代速度,市场普及率一路狂飙 。
围绕 ClickHouse,最近有两则新闻颇引人关注 :一个是阿里云官宣与 ClickHouse 商业公司合作,成为 ClickHouse 在中国独家的云服务提供商;另一个则是字节跳动 ByteHouse 与亚马逊云科技合作推出新一代云数仓服务 。两种不同的组合,背后其实是国内外市场对 ClickHouse 云原生化产品和应用的浓厚兴趣 。
作为国内极具代表性的 ClickHouse 大规模采用者,字节跳动在历经数年的 ClickHouse 云原生化改造和应用中沉淀了许多宝贵的实践经验和思考 。2021 年 8 月,字节跳动将经过多年定制化改造的 ClickHouse,沉淀为 ByteHouse 对外提供服务。自那时起,就有人猜测:ByteHouse 会不会开源?
其实字节跳动为开源准备已久 。今年,字节跳动将 ByteHouse 内核向社区开源为 ByConity,并于近日正式官宣发布 0.1.0 版本 。
ByConity 定位为开源的云原生数据仓库,采用 Apache 2.0 许可协议,基于 ClickHouse 内核,但采用了存储计算分离的全新架构,支持多个关键功能特性,如存储计算分离、弹性扩缩容、租户资源隔离和数据读写的强一致性等 。通过利用主流的 OLAP 引擎优化,如列存储、向量化执行、MPP 执行、查询优化等,ByConity 可以提供优异的读写性能 。ByConity 适合用于 Online Analytical Processing(OLAP)场景和轻载数仓场景,包括但不限于交互式分析、实时日志监控、流数据处理和分析等 。
ByConity 项目 Github 地址:
https://github.com/ByConity
用户手册:
https://byconity.github.io/zh-cn/docs/introduction/background-and-technical-architecture
借此机会,InfoQ 独家采访了 ByConity 背后的技术团队,深入了解 ByConity 开源准备过程、架构亮点、ByConity 与 ClickHouse 的差异,以及 ByConity 后续规划等问题 。这也是 ByConity 开源后团队首次接受采访 。
开源准备

字节跳动开源ByConity:基于ClickHouse的存算分离架构云原生数仓

文章插图
为了和早些推出的商业品牌作区分、避免用户混淆,团队为开源版本取了新名字 ByConity 。新名字由三个英文单词组合再生而来:
  • By 来自 Byte,代表存储数据的基本单位,也比喻海量数据;
  • Con 来自 Convert,代表改变和革新;
  • Conity 也来自 Community,代表一群人,也就是开源开发者社区 。
从采用 ClickHouse 遇到痛点进而自研改造,到推出商业化服务 ByteHouse,再到现在推出开源项目 ByConity,陈星认为这是一个自然而然的过程,ByteHouse 和 ByConity 背后实际也是同一个技术团队在支持 。在他看来,行业内有很多公司和团队存在使用 ClickHouse 的痛点,对于解决这些问题并进一步拓宽其使用场景感兴趣 。开源能够带来更多技术层面的合作,也能帮助 ByConity 更快地扩展到更广泛的不同行业中去,这是推动团队将 ByConity 开源出来的重要动机之一 。
在决定开源之前,团队也考虑过是否能将自研修改合并回 ClickHouse 社区,并围绕向社区完整贡献和联合开发,与 ClickHouse 核心研发团队、ClickHouse 创业公司负责人做了几次闭门沟通,但得到的反馈是架构差异过大、合并难度和代价大、无法联合开发 。最终按照 ClickHouse 社区给到的建议,团队决定独立开源,并跟 ClickHouse 社区进行了消息同步 。
2022 年 5 月,团队启动 ByConity 开源相关研发和准备工作 。到正式开源这期间,技术层面关键迭代主要有以下几点:
  1. 升级 ByConity Codebase,和社区 ClickHouse 21.8 版本代码做同步,因为最初字节跳动引入 ClickHouse 的时候用的还是早期版本,但 ClickHouse 社区在版本 19 到 22 之间做了比较大的重构,导致整个执行 model 发生了一些变化,这部分需要做不少代码重写工作,将整个代码基线提升到社区新的 LTS 版本;
  2. 移除公司内部依赖组件,寻找对应的开源替代方案做兼容和适配,比如 FoudationDB 适配、ClickHouse-Keeper 适配等;
  3. 基于 Processor Model 重构 MPP 实现,提升性能与稳定性:主要解决了 ClickHouse 对于复杂 Query 的执行支持不好,功能也比较局限(Join 只支持 broadcast join)等问题;适配 ClickHouse 新版本基于 Processor Push Mode 的执行模式;
  4. 优化器迭代,重点迭代了优化规则(RBO),CBO 方面重点增强统计信息自动收集等:比如当用户表有改动时,后台任务会检查统计信息表的修改行数,当达到一定阈值时触发自动收集;


    推荐阅读