databend-meta 的 musl 与 GNU 构建实测:为兼容老系统,要让掉多少性能?
Databend 推荐用容器镜像部署。信创环境常常是例外:不少系统版本偏老,glibc 版本不够,容器也不一定能用,通常只能部署静态链接的 musl 二进制。静态包不依赖系统的 glibc 版本,兼容性更好。
兼容性解决了,性能会不会受影响?musl 和 glibc 在系统调用封装、线程和锁等基础实现上有差异,databend-meta 又是一个处理大量小请求的 Raft 服务。我把同一份代码分别编译成 musl 静态版和 GNU 动态版,用同样的负载压测,量化一下兼容的代价。
结论:
- 高并发时 musl 明显更慢。 512 和 1024 并发下,GNU 的吞吐中位数分别比 musl 高 15.59% 和 16.46%;换算成 musl 的视角,吞吐低 13%–14%。
- 低并发时差距不大。 16 到 256 并发,GNU 的吞吐高 0.75%–6.68%。
- 尾延迟各有高低。 多数档位 GNU 的 p99 更低,其中 1024 并发低 32%;但 256 和 1536 并发时 musl 的 p99 更低。
- 全部 52 轮、2,900 多万次请求,客户端没有收到任何错误。
一句话结论:在本次测试条件下,信创环境使用 musl 包,高并发写入可按吞吐低约 14% 来规划容量;能用容器,或系统 glibc 版本足够时,不必选择 musl。

Databend 云原生湖仓同时支持私有化和公有云两种部署形态,因此在写入方式上也共提供了4方式种选择。本文一方面通过性能测试认识不同形态的性能差异,另一方面也尝试理解这些设计背后的原因,进而体会如何结合业务场景选择最适合的写入方式。
在 AI 大火的背景下,数据库公司基本都在规划着如何与 AI 结合,也就有了这次活动。我想约一下同行朋友一起交流,看看 Data + AI 或是 AI + Data 这两个方向会碰撞出什么样的结果。本次活动邀请到: