字节跳动 ByteHouse 云原生之路 – 计算存储分离与性能优化

字节跳动 ByteHouse 云原生之路 – 计算存储分离与性能优化

💡 原文中文,约6200字,阅读约需15分钟。
📝

内容提要

ByteHouse是基于ClickHouse的云原生数据仓库解决方案,具有毫秒级的分析查询响应时间和高级分析函数。采用存算分离架构和Kubernetes管理容器化集群,提升资源利用效率和降低运维成本。与亚马逊云科技合作后,实现了弹性存储和自动扩展计算资源。在亚马逊云平台上性能大幅提升。与开源ClickHouse相比,执行时长更快,查询效果更好。

🔎

延伸解读

存算分离不只是架构变化,更是成本与可靠性的再平衡

ByteHouse 从 ClickHouse 的 Shared-Nothing 存算一体转向计算 Shared-Nothing、存储 Shared-Disk 的分离架构,核心动机是让计算和存储独立伸缩,避免资源错配。文章特别提到 S3 的 11 个 9 持久性,意味着计算节点故障后数据仍可从对象存储恢复。对读者而言,这提示云原生数仓的收益不仅来自性能,还来自运维简化与数据可靠性提升,但前提是接受对象存储访问延迟高于本地盘这一现实。

S3 对接的瓶颈不在带宽,而在小 IO 与元数据开销

文章指出,直接使用 S3 时 P70 延迟比 HDFS 大 5-10 倍,且 ClickHouse MergeTree 访问模型有约 40% 小 IO,HDFS 上的预读、小 IO 合并等机制无法直接套用。ByteHouse 的应对是把文件大小控制在 128MB 到 512MB 区间,并用多线程并行和 8-16MB Range 请求提升吞吐。这说明对象存储上的分析引擎优化,重点在于减少小对象访问和元数据操作,而非单纯增加并发。

CRT 替换默认 HTTP 客户端带来 30% 以上 QPS 提升

在计算层,ByteHouse 用 CRT 的 CRTHttpClient 替换 AWS SDK 默认 HttpClient,利用连接池复用、S3 Endpoint Pool 负载均衡和 HostCache 减少 DNS 解析,在 SSB 100G 测试中查询 QPS 提升 30% 以上。配合缓存感知调度、数据预热和预取机制,系统尽量把查询调度到已有缓存的节点,减少冷读。这些手段表明,云上数仓的性能优化需要客户端、调度和缓存策略协同,而非只调大实例规格。

48% 的性能优势来自真实业务 SQL,但对比条件需留意

文章以海外电商客户 20 条真实线上 SQL 对比,ByteHouse 平均执行时长比开源 ClickHouse 22.8 快约 48%,最快查询快 80%。测试使用 24 并发、12 轮平均,ByteHouse 虚拟仓库为 96 核 384G,ClickHouse 为 104 核 384G。读者应注意这是特定客户场景的非 Benchmark 结果,且两者规格略有差异,不能直接外推为所有场景的通用性能倍数,但可作为云原生改造后性能提升的参考信号。

❓

Q&A

ByteHouse 是什么?它和 ClickHouse 有什么关系?

ByteHouse 是字节跳动基于开源 ClickHouse 深度定制开发的云原生数据仓库解决方案,支持标准 SQL 查询接口和高级分析函数,可实现毫秒级查询响应。它起源于字节跳动对 ClickHouse 的改造和增强,并在此基础上发展了存算分离架构。

ByteHouse 的存算分离架构有什么好处?

存算分离架构使计算资源和存储资源可以独立扩展,提升资源利用效率;方便实现读写分离;数据存储持久性和可靠性大大提升(S3 提供 11 个 9 的持久性),即使计算节点故障也可从 S3 恢复数据。

ByteHouse 在对接 Amazon S3 时做了哪些性能优化?

ByteHouse 从计算层、存储层和网络层进行了优化:计算层选用合适的 EC2 实例类型、使用 CRT 优化库提升性能;存储层避免小文件产生(文件大小控制在 128MB 到 512MB)、采用多线程并行访问 S3 和 Range 请求分片读取;网络层配置 VPC PrivateLink 和使用 DNS 多值应答提高稳定性和吞吐。

ByteHouse 在亚马逊云平台上性能提升了多少?

根据内部测试,ByteHouse 在亚马逊云平台上存储吞吐提高了 3-5 倍,延迟降低了 2 倍以上。与开源 ClickHouse 相比,在海外电商客户场景下,ByteHouse 平均执行时长快约 48%,最快查询快 80%。

ByteHouse 如何利用缓存来提升查询性能?

ByteHouse 实施了缓存感知调度策略,将计算任务调度到拥有数据缓存的节点上,最大化缓存利用率并减少冷读。同时引入数据预热(Prewarm)和预取(Prefetch)机制,根据访问模式提前加载数据到缓存。此外,还具备 Preload 功能,默认在引擎启动时自动加载索引到缓存,并支持自动预加载(auto-preload)在数据更新后自动拉取到本地。

ByteHouse 与开源 ClickHouse 的性能对比如何?

在海外电商客户的数据运营系统场景下,使用 20 条真实业务 SQL(覆盖 80% 场景),并发 24,ByteHouse 平均执行时长比开源 ClickHouse 快约 48%,最快的查询快 80%。测试中 ByteHouse 采用 96 核/384G 内存的 VW,ClickHouse 使用 104 核/384G 内存,开源版本为 22.8。

ByteHouse 在亚马逊云科技 Marketplace 上可以获取吗?

是的,ByteHouse 已在亚马逊云科技海外区域 Marketplace 上架,用户可以通过 Marketplace 搜索 ByteHouse 或通过提供的链接进入 ByteHouse 控制台页面。

🏷️

标签

➡️

继续阅读