DoubleCloud即将停止运营。迁移到ClickHouse并享受限时免费迁移服务。立即联系我们 ->->

博客 / 用户案例

速度提升100倍:从Elasticsearch到ClickHouse的GraphQL Hive迁移

author avatar
The Guild
2022年11月3日

我们很高兴欢迎The Guild作为嘉宾来到我们的博客。继续阅读以了解他们为什么使用ClickHouse以及他们从Elasticsearch迁移到ClickHouse的历程。

什么是GraphQL Hive?

GraphQL Hive是一个用于GraphQL API的Schema注册中心、监控和分析解决方案。

作为一个完全开源的工具,GraphQL Hive帮助您跟踪更改历史,防止API中断并分析API的流量。

GraphQL Hive让您了解GraphQL API的使用方式以及最终用户的体验。

什么是GraphQL?

对于不熟悉GraphQL的人来说,它是一种前端和后端之间的通信协议。我们建议阅读GraphQL基金会撰写的“GraphQL入门”,我们The Guild也是其中的一员。

GraphQL.png

如您所见,只获取了少量数据,项目名称和贡献者保持不变。这就是GraphQL Hive的目标,研究和分析GraphQL API的使用情况。

用于GraphQL API监控的数据库

让我们首先解释GraphQL Hive操作的数据类型。

我们可以将它们分成三个类别

  • Schema注册中心
  • 监控
  • 分析

本文将主要关注监控和分析功能,它们最终成为最具挑战性的扩展部分。

GraphQL Hive试图回答以下问题

  • 谁是GraphQL API的使用者?
  • GraphQL API的哪一部分被谁使用?
  • GraphQL API的性能如何?

为了回答这些问题,GraphQL Hive分析每个HTTP请求并收集

  • API使用者的名称和版本
  • 请求的类型和字段列表(例如User、Comment、User.id、User.name)
  • 总体延迟
  • 请求的主体

GraphQL Hive存储每个HTTP请求的详细信息。

之前,在GraphQL Hive中……

此类数据不适合修改,需要生存时间机制以及用于分析和数据聚合的一组函数。

我们决定使用Elasticsearch,因为它满足了所有条件并且足够灵活,可以随着时间的推移发展产品。

Elasticsearch的问题

我对Elasticsearch的最大担忧是查询语言。Guild(GraphQL Hive背后的公司)的每个人都熟悉SQL,因此基于JSON的语言意味着陡峭的学习曲线。

在预览程序的某个阶段,我们遇到了第一个扩展问题。

随着我们存储越来越多的数据,平均响应时间变得越来越慢。

另一个问题与索引相关。一个大型用户会影响其他小型用户的查询性能。

我们尝试通过为每个用户创建索引来改进它,但由于Elasticsearch的整体速度远低于我们的预期,因此我们开始寻找替代方案。

Elasticsearch的替代方案

在寻找替代方案时,这些是我们的要求

  • 易于学习和维护
  • 卓越的性能
  • 适合数据分析和聚合
  • 内置TTL
  • 类型系统
  • 高基数没有问题

必须承认,数据库的数量超过了人类,基准测试更是数不胜数,结论也各不相同。

经过研究,我们决定测试**InfluxDB**、**TimescaleDB**、**Druid**和**ClickHouse**。

我们创建了一个包含2000万行的数据集,其中一个用户拥有其中的一半。为了衡量性能,我们尝试计算一些高百分位数,并查看一个大型用户是否会影响其他小型用户的查询性能。

Elasticsearch的基线是10秒。

我们对**InfluxDB**寄予厚望,它看起来像是一个极快的时序数据库。不幸的是,它不支持高基数。GraphQL Hive中收集的每个HTTP请求都可以使用所有用户之间无限数量的值进行标记。

我们也发现很难上手。

查询时间约为5秒。

接下来是**TimescaleDB**。我们喜欢它使用SQL并且支持表之间关系的事实。整体性能比我们在Elasticsearch中体验到的要好得多。

响应时间接近3秒。

在我们进行研究时(2021年4月),**ClickHouse**对我们来说感觉非常神秘。我们没有听说过太多关于它的信息,并且只找到了一些案例研究。它似乎与TimescaleDB非常相似,但提供了更广泛的数据分析功能集,并且表引擎的集合非常适合我们的用例。

查询时间为……约100毫秒。

我们没有测试Druid,它感觉太复杂了。尽管它可能能够处理海量数据,但我们希望找到一些简单而强大的东西,而ClickHouse似乎非常合适。

average_read_time.png

从Elasticsearch迁移

从Elasticsearch到ClickHouse的迁移是逐步进行的,并不复杂。

在预览程序期间,收集数据的生存时间仅为30天。

因此,我们决定同时将数据写入两个目标,持续一个月。这使我们能够在不中断服务的情况下将读取操作无缝切换到ClickHouse。

GraphQL Hive和ClickHouse

切换后,与之前的数据管道相比,我们平均看到了100倍的性能提升。

ClickHouse帮助我们将数据量从每月数百万行扩展到数十亿行,且毫无压力。

如果您对我们的数据库结构以及我们如何使用ClickHouse感到好奇,我们建议您查看GitHub上的源代码

我们还撰写了一篇更深入的文章,解释了我们的ClickHouse设置以及我们如何能够每月处理数十亿个GraphQL请求。

使用ClickHouse Cloud提升到新的水平

我们当前的数据管道使用ClickHouse的单个实例。它运行良好,到目前为止,我们还没有遇到任何问题,但最终需要将其扩展到更多节点。

这就是我们开始迁移到**ClickHouse Cloud**的原因。

由于其开箱即用的分片和复制支持,我们可以专注于开发新功能,并让ClickHouse Cloud处理其余工作。

分享此文章

订阅我们的新闻通讯

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