博客 / 社区

新加坡 Meetup 报告:ClickHouse 如何驱动 Ahrefs,世界上最活跃的网络爬虫

author avatar
Elissa Weve
Jul 27, 2023 - 3 分钟阅读

Ahrefs_photo.png

2023 年 7 月 27 日,阿里云在新加坡主办了 ClickHouse 社区聚会。我们很高兴听到来自 Ahrefs 的 Yasunari (Yasu) Watanabe 分享他们在大规模使用 ClickHouse 的历程。

Ahrefs 成立于 2010 年,以处理海量的网络分析数据以提供有价值的 SEO 指标而闻名。他们拥有业内最活跃的爬虫,以及世界上最大的实时反向链接索引。

Ahrefs1.png

早期数据存储解决方案

Yasu 分享了 Ahrefs 多年来使用各种数据存储解决方案的历程。“我们尝试了所有可用的解决方案,包括 Cassandra 和 Hypertable,但没有一个真正满足我们的要求。因此,我们最终开发了一个定制的解决方案,该解决方案针对以有限的资源爬取网络进行了优化,”Yasu 解释道。

作为他们自己用于网络爬虫的客户存储解决方案的一部分,他们使用了 Quantcast 文件系统 (QFS),以及用于其他非爬虫任务的 Elasticsearch。虽然这种组合在一段时间内为他们提供了良好的服务,但由于查询引擎不灵活、缺少高级功能以及扩展挑战,很快就暴露了其局限性。Yasu 分享道:“时代在变化,功能需求变得更加复杂,网络规模不断增长,我们的基础设施也在不断扩大,因此我们开始寻找一些替代解决方案”。

迁移到 ClickHouse

2019 年,Ahrefs 发现了 ClickHouse。他们最初被 ClickHouse 的架构所吸引,该架构类似于他们自己的定制系统。ClickHouse 提供了卓越的性能、SQL 接口、通用的 I/O 支持和面向列的方法。这使得查询他们不断增长的数据集变得非常高效。

目前,Ahrefs 已将 ClickHouse 深入嵌入到他们的系统中。他们在自己的硬件上运行多个 ClickHouse 集群,主集群采用地理复制,以实现冗余和特定任务的效率。Yasu 分享了他们运营的巨大规模,“我们在我们的硬件上部署了多个集群,拥有数百台主机。我们的主集群现在是地理复制的,我们指定一些副本用于读取密集型操作,另一些用于写入密集型操作。我们的许多表都非常大,拥有数万亿甚至数万亿行,以及数十列。”

Ahrefs2.png

与 ClickHouse 的高级交互

Yasu 透露了 Ahrefs 与 ClickHouse 进行高级交互的策略。为了处理他们的大规模数据插入,Ahrefs 使用缓冲技术,将数据分组以减少插入操作,从而减少后续的合并任务。Yasu 解释说:“我们还广泛使用 fetch 和 attach 命令来有效地跨不同服务器移动分区。这是一个非常非常好的功能,由 ClickHouse 处理。”

Ahrefs3.png

内部监控工具

Ahrefs 开发了包括“Birdseye View Tool”在内的工具,用于全面概述 ClickHouse 集群,以及“Query Analyzer”用于理解和优化查询性能。Yasu 暗示有可能将这些工具开源,这将是对更广泛技术社区的巨大贡献。

Ahrefs4.png Ahrefs5.png

标记压缩:Ahrefs 对 ClickHouse 的贡献

在讨论 Ahrefs 向上游 ClickHouse 提出的补丁时,Yasu 解释了标记的问题,标记有助于在压缩数据文件中定位行。大规模查询可能会给这些标记的缓存带来压力,从而影响性能。Ahrefs 的解决方案包括压缩这些标记以提高效率。在使用他们的解决方案一年后,Ahrefs 与 ClickHouse 团队讨论了其潜力。最终接受的解决方案将标记划分为块,并采用自定义压缩方案,从而消除了对互斥锁的需求,将内存消耗减少了三到六倍。

Ahrefs6.png

总结

Ahrefs 切换到 ClickHouse 带来了数据处理和性能方面的显着改进。这种转变使他们能够更有效地管理海量数据。他们的创新,例如标记压缩解决方案,提高了查询性能,节省了内存和时间。Yasu 总结道:“我想说,我们在 Ahrefs 中开始使用 ClickHouse 的决定并非没有障碍,但总的来说,这是一个巨大的成功。我们对能够跟上我们使用需求的性能感到满意。我们也非常感谢定期每月发布中进行的积极功能开发和错误修复。”

Ahrefs 继续致力于新功能,有望在他们与 ClickHouse 的合作中取得进一步的进展。

更多详情

分享此文章

订阅我们的新闻通讯

随时了解功能发布、产品路线图、支持和云产品!
正在加载表单...
关注我们
X imageSlack imageGitHub image
Telegram imageMeetup imageRss image