DoubleCloud 即将停止服务。使用限时免费迁移服务迁移到 ClickHouse。立即联系我们 ->->

博客 / 社区

新加坡Meetup报告:ClickHouse如何为全球最活跃的网络爬虫Ahrefs提供支持

author avatar
Elissa Weve
2023年7月27日

Ahrefs_photo.png

2023年7月27日,阿里云在新加坡举办了ClickHouse社区聚会。我们很荣幸地听取了来自Ahrefs的Yasunari (Yasu) Watanabe的分享,他介绍了Ahrefs在超大规模场景下使用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

Mark压缩:Ahrefs对ClickHouse的贡献

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

Ahrefs6.png

总结

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

Ahrefs继续开发新功能,承诺在与ClickHouse的合作中取得进一步的进展。

更多详情

分享此文章

订阅我们的新闻通讯

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