2023年9月19日,我们很幸运地再次邀请Cloudflare在他们位于伦敦市中心的美丽办公室举办ClickHouse社区聚会。我们听取了Cloudflare系统工程师James Morrison的分享,他详细介绍了Cloudflare与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 Radar:**防火墙分析和Cloudflare Radar等重要工具依靠ClickHouse存储大量数据并在需要时快速检索。
运营规模
James分享了Cloudlare ClickHouse部署的巨大规模,“今年我们的活动副本数量实际上超过了1000个。这意味着每秒处理数亿行插入的数据”。他提到了他们如何利用ClickHouse强大的采样功能来处理其各种数据集,从HTTP请求到DNS查找。
“ClickHouse于2016年开源,我们在当年年底就开始在生产环境中使用它,所以我们一直是长期用户。从那时起,我们的规模呈指数级增长。今年我们的活动副本数量实际上超过了1000个。这意味着每秒处理数亿行插入的数据,这实际上对应于数量更大的事件,因为我们使用了大量的采样。”
解读ClickHouse字典
ClickHouse中的字典支持高效的键值查找,加速原本需要昂贵的JOIN操作的查询。它们在Cloudflare产品依赖的实时分析场景中至关重要。“字典允许我们在查询中进行键值查找,通常将数据存储在内存中,这使我们能够更有效地执行联接类型查询,”James说。
多年来,字典的使用量大幅增长,目前已在各个地方部署了184个字典。
内存消耗挑战
James讨论了他们遇到的问题,特别是关于内存消耗的问题。他们最大的字典超过了20GiB的内存,所有字典的总开销超过了15TiB。
然后,他重点介绍了他们从'哈希'布局到'哈希数组'布局的转变,这显著降低了内存占用,降低了4倍以上。
另一个重要问题是,他们的字典对外部系统的依赖关系各不相同。这使得在对下游系统可见性有限的情况下,支持字典变得具有挑战性。此外,这些系统将受到来自ClickHouse的请求,从而给这些服务带来额外的负担,这通常是不受欢迎的。
Cloudflare的解决方案,“ClickHouse字典转储器”,帮助解决了这些问题。它有效地将数据生产与消费分离,使他们能够无缝处理潜在的上游故障。James解释说,“我们在Cronjobs和Kubernetes中生成数据……在每个ClickHouse副本上,我们都有一个计时器,它只是从对象存储中提取字典包并将其提取到磁盘上。”
持续发展
在讨论潜在的增强功能时,James暗示了进一步优化内存使用,可能通过内存压缩。他还讨论了字典的动态特性,表明一些静态字典将来可能会变成动态字典,尤其是在引入了'clickhouse-dictionary-dumper'之后。
更多详细信息
- 本次演讲于2023年9月19日在伦敦举行的ClickHouse社区聚会上发表
- 演示文稿资料可在GitHub上获取
进一步阅读
- 使用ClickHouse进行每秒600万次请求的HTTP分析(Cloudflare博客)
- 使用ClickHouse进行日志分析(Cloudflare博客)
- ClickHouse容量估算框架(Cloudflare博客)