2023年9月19日,我们很荣幸再次在Cloudflare位于伦敦市中心的漂亮办公室举办了ClickHouse社区聚会。我们听取了Cloudflare系统工程师James Morrison的分享,他详细介绍了他们使用ClickHouse的悠久历史、管理字典的复杂性,以及在此过程中遇到的各种挑战和解决方案。
Cloudflare是最早采用ClickHouse的公司之一。正如James所说,“ClickHouse在2016年开源,我们在当年年底就投入了生产环境。” Cloudflare不仅从早期就信任并采用了ClickHouse,而且还为它的发展做出了贡献。
Cloudflare将ClickHouse用于多种使用案例,包括:
-
HTTP和DNS分析: 对于监控和理解Cloudflare每天处理的海量网络流量至关重要。
-
日志分析、流量和机器人管理: 在开始机器人分析和分类之前,Cloudflare依靠ClickHouse进行高效的日志收集。通过利用其实时分析能力,Cloudflare可以有效地管理和过滤网络流量,区分合法用户和机器人流量。
-
Cloudflare Worker运行时分析: Cloudflare Workers使开发人员能够在更靠近最终用户的位置运行无服务器应用程序。ClickHouse提供关键的运行时分析,以确保最佳性能。
-
内部分析工作负载: ClickHouse在支持Cloudflare的内部数据分析方面发挥着重要作用。
-
客户仪表板: ClickHouse确保Cloudflare的客户仪表板提供实时的、全面的数据视图,反映了其庞大的存储和快速的数据检索能力。
-
防火墙分析和Cloudflare雷达: 像防火墙分析和Cloudflare雷达这样的重要工具依赖于ClickHouse来存储大量数据并根据需要及时检索。
运营规模
James分享了Cloudflare的ClickHouse部署的庞大规模,“今年我们实际上超过了一千个活跃副本。这相当于每秒处理数亿条插入的行”。他提到他们如何利用ClickHouse强大的抽样功能来处理从HTTP请求到DNS查找的各种数据集。
“ClickHouse在2016年开源,我们在当年年底就投入了生产环境,所以我们是长期用户。从那时起,我们的规模呈指数级增长。今年我们实际上超过了一千个活跃副本。这相当于每秒处理数亿条插入的行,由于我们使用了大量的抽样,这实际上对应着数量更大的事件。”
解读ClickHouse字典
ClickHouse中的字典 实现了高效的键值查找,加速了原本需要昂贵的JOIN操作的查询。它们在Cloudflare产品所依赖的实时分析场景中至关重要。“字典允许我们在查询中执行键值查找,通常将数据存储在内存中,这使我们能够更有效地执行连接类型的查询,”James说。
多年来,字典的使用量已大幅增长,已在各处部署了184个字典。
内存消耗的挑战
James讨论了他们面临的问题,特别是关于内存消耗的问题。他们最大的字典超过了20GiB内存,所有字典的总开销超过了15 TiB。
然后,他强调了他们从'hashed'布局到'hashed array'布局的转变,这使得内存占用显著减少了4倍以上。
另一个重要的担忧是他们的字典对外部系统的各种依赖关系。这使得支持字典变得具有挑战性,因为对下游系统的可见性有限。此外,这些系统将受到来自ClickHouse的请求的影响,从而给这些服务带来通常不受欢迎的额外负载。
Cloudflare的解决方案“ClickHouse Dictionary Dumper”帮助解决了这些问题。它有效地将数据生产与消费分离,使他们能够无缝地处理潜在的上游故障。James解释说:“我们在Cronjobs和Kubernetes中生成数据……在每个ClickHouse副本上,我们都有一个定时器,它只是从对象存储中拉取字典包并将其解压到磁盘上。”
持续演进
在讨论潜在的改进时,James暗示了进一步优化内存使用的可能性,可能是通过内存压缩。他还讨论了字典的动态特性,表明一些静态字典未来可能会变成动态的,特别是随着“clickhouse-dictionary-dumper”的引入。
更多详情
- 本次演讲于2023年9月19日在伦敦的ClickHouse社区聚会上进行
- 演示材料可在GitHub上获取
延伸阅读
- 使用ClickHouse每秒处理600万次请求的HTTP分析 (Cloudflare博客)
- 使用ClickHouse进行日志分析 (Cloudflare博客)
- ClickHouse容量估算框架 (Cloudflare博客)