PostHog 是一家产品分析和数据基础设施平台,最近宣布其数据仓库架构发生了重大转变。在最初从 ClickHouse 迁移到 DuckDB 以解决多租户问题并获得基于成本的查询优化器后,该公司现在正开始远离 DuckDB。这一举措是由于需要支持更复杂、大规模的工作负载,而这些工作负载已经超出了云环境中单节点引擎的实际限制。
这张图片是文章核心主题的主要视觉效果:从单节点 DuckDB 设置到分布式架构的转变。
虽然 DuckDB 在本地分析和单节点查询方面非常有效,但 PostHog 发现,将其扩展到企业级工作负载面临着巨大的障碍。由于 DuckDB 是单节点工具,公司必须在查询到达之前预先配置工作实例的大小,而这一过程在预测不可预测的客户查询所需的 CPU 和内存需求时被证明非常困难。此外,虽然 DuckDB 在内存耗尽时可以溢出到磁盘,但这会导致查询速度过慢且成本过高,无法满足用户的需求。公司还在 DuckLake 扩展方面遇到了瓶颈,该扩展用于保持与标准湖仓格式的兼容性。在 PostHog 的规模下——包含大约 1 万亿行和 2 PB 的数据——DuckLake 的目录架构成为了瓶颈,导致单表写入耗时超过三分钟,因为每次提交都需要重新读取整个目录的统计信息。
为了解决这些局限性,PostHog 正在使用分布式 SQL 查询引擎 Trino 并配合名为 HogLake 的自定义开放表格式来重建其仓库。这一转变旨在提供一种比单节点设置更可预测地处理 PB 级数据的分布式架构。此外,这一举措还解决了维护 Postgres Wire 协议以兼容工具的困难;PostHog 发现,管理长连接的 Postgres 连接以及各种客户端的多样化需求,比使用基于 HTTP 的路由更难扩展。虽然新的基于 Trino 的架构目前正在 PostHog 的规模上进行测试,但公司尚未发布新系统与之前的 DuckDB 实现相比的具体性能基准。