ClickHouse 开源于 2016 年,是一款开源列式存储的分析型数据库,相较业界 OLAP 数据库系统,其最核心优势就是极致的查询性能。它实现了向量化执行和 SIMD 指令,对内存中的列式数据,一个 batch 调用一次 SIMD 指令,大幅缩短了计算耗时,带来数倍的性能提升。目前,国内外许多头部大厂都在深度使用 ClickHouse 技术。
在性能方面,ClickHouse 在 OLAP 场景下的性能超越同类产品数倍不止,它允许系统以亚秒级的延迟从 PB 级的原始数据生成报告,服务器吞吐量高达每秒数十亿行。
当前,字节跳动已将经过五年定制化改造的 ClickHouse,沉淀为 ByteHouse,正式通过火山引擎对外提供服务
字节跳动无疑是一家非常有代表性的国内企业:字节跳动从 2017 年开始大规模启用 ClickHouse;作为其深度用户,字节跳动拥有国内规模最大的 ClickHouse 集群。
目前,字节跳动内部的 ClickHouse 节点总数超过 1.8 万个,管理总数据量超过 700PB,最大的单个集群部署规模约为2400余个节点。
郭东东,字节跳动数据平台数据应用研发负责人,曾经任职于奇虎 360,负责大数据平台相关建设,有 10 年的大数据平台以及应用架构经验,对 OLAP、大数据实时 & 离线处理技术有比较深入的了解,熟悉 ClickHouse、Spark、Presto 等主流的大数据处理技术。
InfoQ:ClickHouse 其实在 16 年就已经开源了,但似乎直到去年热度和关注度才一下子变得特别高,这是为什么呢?
**郭东东:**其实一个开源技术从开源到逐步成熟、被业内广泛采用,本来就需要一个过程。另外,如果有一些大公司逐步在使用这个技术的话,也有助于更好地推动这项技术在业内被普遍采用。应该说字节跳动内部的 ClickHouse 应用实践,对于 ClickHouse 在业内更大范围的使用也起到比较大的推动作用。很多公司都跟我们交流过 ClickHouse 的使用情况,包括技术改进、技术引进路线等等。
另外,从本质上来说 ClickHouse 确实解决了一些特定场景和业务上存在的比较大的痛点。数据分析之前大家更多是困在数据量,很少能得到相对明细数据的分析,而 ClickHouse 强大的分析能力刚好解决了这一痛点。这其实也反映了大家对数据更细粒度的分析需求的持续拓展。
InfoQ:据了解,ClickHouse 在字节应用还比较多。能否基于您负责的团队和产品,介绍一下 ClickHouse 主要应用于哪些业务场景?第一个采用 ClickHouse 的业务场景是什么?
**郭东东:**ClickHouse 在字节的应用场景比较多,比如我负责的数据应用平台,基本上很多底层技术都非常多地依赖 ClickHouse 提供的能力,比如 BI 分析能力、AB 实验的分析能力、行为分析能力等等,包括商业化层面的广告效果分析,也都是依赖 ClickHouse 的。
InfoQ:在选用 ClickHouse 之前你们做了哪些技术选型工作?为什么上述业务场景选择采用 ClickHouse 而不是其他数据分析技术?主要看重 ClickHouse 的哪些特性?相对应可以解决业务场景中的什么问题?
郭东东:其实在选 ClickHouse 之前,我们也做了比较多的技术选型工作。当时我们有一个相对比较有挑战的技术场景,是要基于很多明细数据做行为分析,这一块我们研究了挺长时间,当时也试用了 Presto、Kylin 等等各种各样的分析技术,最后选择了 ClickHouse。主要是 ClickHouse 在相对固定的一个 Panel 场景下,查询能力确实有比较明显的优势,而且本身它是不会损失灵活性的,像 Kylin 的话其实灵活性会比较差,只要做一点修改就需要重刷。
另外我们其实也调研过 Druid 等,但使用起来跟 ClickHouse 还是有比较大差异的。我们本身选 ClickHouse,还有一个比较大的原因是 ClickHouse 本身 Engine 是相对简单的,因为它 Engine 的执行引擎写得比较高效,它带来的向量化执行等等这些特性对我们场景化分析的价值还是比较大的。
京东OLAP采取 ClickHouse 为主Doris为辅的策略,有 3000 台服务器,每天亿次查询万亿条数据写入,广泛服务于各个应用场景,经过历次大促考验,提供了稳定的服务。
在对 OLAP 组件考量和调研之后,和大多数公司一样选用主流的 ClickHouse 和 Doris 作为京东内部主要的 OLAP 引擎,因为 ClickHouse 性能、扩展性和稳定性较好,而 Doris 在可维护性和易用性方面更好,所以在生产中选择了以ClickHouse 为主 Doris 为辅的策略,形成高低搭配。同时,针对开源产品后台功能不强的情况,通过自研管控面来进行集群管理,用户自助式操作,降低了运维成本,降低了用户的使用门槛。