2023 年 5 月 25 日,在伦敦的 ClickHouse 聚会上,PostHog 的联合创始人兼 CTO Tim Glaser 介绍了他们的新项目 HouseWatch - 一套用于监控和管理 ClickHouse 的开源工具。在演示过程中,他还分享了 PostHog 处理大量分析查询以及他们的扩展、优化和管理策略的见解。
PostHog 是一种开源解决方案,它将多种分析工具整合到一个平台中。它使用户能够执行复杂的漏斗查询、可视化趋势以及过滤产品分析数据,从而提供有关用户行为的宝贵见解。
PostHog 拥有一个充满活力的开发者社区,在 GitHub 上拥有超过 10,000 颗星。它已跟踪超过 500 亿个事件,主要是在其美国云上,并管理着大量的惊人数据。仅他们的事件表就处理了大约 62 TB 的未压缩数据(仅针对一列)。正在查询的未压缩数据的总量大约为数百 TB。
PostHog 的功能:会话回放、功能标识和无缝数据集成
PostHog 提供了一些独特的功能,可以简化操作并提供关键见解。借助会话回放,用户可以实时观看其网站上的互动,以进行深入分析。功能标识允许特定用户组体验新功能,从而帮助做出数据驱动的产品决策。此外,PostHog 的高级事件管道支持将生成的见解有效地整合到不同系统中,从而实现无缝数据传输。
使用 ClickHouse 增强可扩展性
PostHog 通过 从 Postgres 迁移到 ClickHouse 并利用 AWS 服务器,成功扩展了其平台,有效地满足了其不断增长的使用需求。PostHog 通过引入战略性优化来解决慢查询和用户数据聚合问题。
挑战 1:优化 JSON 字段读取
PostHog 遇到的一个重大挑战是读取 JSON 字段对性能的影响。尽管 ClickHouse 可以高效地处理这个问题,但涉及数十亿事件(针对他们最大的客户)的查询变得很慢。为了解决这个问题,PostHog 向事件表中引入了 物化列,识别最常用的列并对其进行物化。此优化显著提高了查询性能,并减少了处理时间。
挑战 2:按唯一用户进行聚合
PostHog 在按唯一用户聚合数据时遇到了一个复杂问题。由于可变的用户 ID 以及需要合并来自不同来源的用户数据,传统方法被证明效率低下。为了克服这一挑战,PostHog 实施了一种基于人员覆盖表模式。他们不是直接修改事件数据,而是将旧的人员 ID、新的人员 ID 以及版本存储在一个单独的表中。这种方法允许通过在需要时合并正确的人员 ID 来实现高效的查询和聚合。更具体地说,
- 创建了一个“人员覆盖”表:此表独立于主事件表。它存储旧的人员 ID、新的人员 ID 以及版本标识符(用于了解最新的版本)。
- 与事件一起摄取的人员 ID 被认为是正确的:在约 96% 的情况下,这是正确的。但如果发生合并(例如,当某人登录或当匿名用户成为已登录用户时),就会在人员覆盖表中添加一行。
- 在查询中使用人员覆盖表:在运行查询时,他们会加入人员覆盖表,并使用事件上的覆盖人员 ID 或原始人员 ID。
- 他们会定期根据覆盖表更新人员 ID:为了防止人员覆盖表变得太大,他们会运行一个作业,该作业会根据覆盖表更新人员 ID,汇总所有更改并保持快速查询性能。
PostHog 进行的优化对性能产生了重大影响。正如 Tim Glaser 所强调的那样,“Y Combinator 的查询平均从 18 秒下降到 1 秒,P95 查询从 60 秒下降到 4 秒。” 性能的提升使数据分析更加高效,从而带来更快的见解和更好的决策制定。
其他优化:采样以提高性能
PostHog 认识到为用户提供对查询性能的控制的价值。为了解决这个问题,他们引入了采样功能,允许用户以准确性为代价换取速度。通过提供一个按钮来调整采样率,用户可以加快查询执行并获得快速结果,尤其是在需求量大或情况压力过大的情况下。
介绍 HouseWatch - 简化 ClickHouse 管理
PostHog 推出了 HouseWatch,这是一个可通过 Docker 部署的 React 应用程序,旨在增强对 ClickHouse 基础设施的可见性和控制。该工具通过提供广泛的查询监控和操作管理功能来简化 ClickHouse 管理。
HouseWatch 支持实时查询监控,提供必要的性能指标。用户可以快速评估查询性能并识别潜在瓶颈,从而改进他们的决策流程。
监控长时间运行的查询
HouseWatch 使用户能够轻松地识别和监控长时间运行的查询。该工具提供了执行时间较长的前 10 个查询的清晰视图。用户可以快速查明与这些查询相关的具体团队或参数,从而进行重点优化工作,并提高总体查询性能。
架构统计信息和磁盘使用情况分析
借助 HouseWatch,用户可以获得宝贵的架构统计信息。该工具提供了 ClickHouse 中最大表的概述,便于进行有效的磁盘使用情况分析。通过深入分析各个表,用户可以识别最大的列并采取积极措施来优化存储并提高性能。
简化的操作和查询控制
HouseWatch 通过提供必要的管理功能来简化 ClickHouse 操作。用户可以无缝地终止正在运行的查询,无需手动干预。此外,HouseWatch 包含一个迁移管理系统,允许用户创建向前和向后的迁移,从而简化数据库架构更新并确保无缝的操作工作流程。
PostHog 的开源产品为用户提供了用于产品分析、会话回放、功能标识和实验的强大工具。借助物化列和人员覆盖表等优化和创新,PostHog 显著提高了查询性能。HouseWatch 的引入有助于简化 ClickHouse 管理,提供宝贵的见解、查询控制和简化的操作。正如 Tim 所说,“我们致力于彻底改变数据管理,并为 ClickHouse 用户提供非凡的价值。”
更多详细信息
- 此演讲于 2023 年 5 月 25 日在 伦敦 ClickHouse 聚会 上发表。
- 演示材料可在 GitHub 上获取。