0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

对GraphQL APIs实现监控的步骤

如意 来源:百家号 作者:51CTO 2020-06-28 14:16 次阅读

作为REST的另一种选择,GraphQL自2015年发布以来,为前端开发人员提供了他们渴望已久的灵活性。他们可以通过一次性查询,来定义所有需要的数据,并能够一次性地“打包”获取,进而大幅减少了等待的时间。

除了简化前端,REST也让监控等方面变得更加简单。据此,后端团队可以考量每一个端点的状态,并能够及时地发现当前出现的问题。当然,在使用的过程中,我们需要考虑清楚的最关键问题是:如何使用GraphQL来准确地监控到目标系统的重要位置。下面,让我们一起来讨论那些有关GraphQL APIs监控的优秀实践。

GraphQL架构

为了弄清楚上述问题件,让我们首先来了解GraphQL的架构。通常,一个简单的GraphQL系统会包括如下三个部分:

一种可定义所有数据类型的schema(结构模式)。

一个使用该schema将查询到的每个部分都路由到某个解析器(resolver)的GraphQL引擎。

一到多个能够被GraphQL引擎所调用的解析器。

通过解析schema,GraphQL后端会让服务器了解到哪种解析器能够处理哪种类型的查询。也就是说,当一个查询被发送到GraphQL端点时,GraphQL引擎会解析该查询中的每一种请求类型,进而调用解析器来满足其请求。可以想象,此类方法仅限于在与简单查询一起使用时,才能提供卓越的性能。

有时候,查询的某些部分会被连接到同一个数据源(包括数据库或第三方API等)。例如,如果我们加载某个用户的账号及其地址,它们可能在GraphQL的schema中具有两种类型,而在数据源中却只有一条记录。那么我们同时发出请求的时候,当然不希望服务器对同一个数据源发出两次查询请求。

针对上述问题,业界会采用一种被称为数据加载器(data-loader)的模式。该数据加载器是位于解析器和数据源之间的另一个GraphQL API层。通过简单的设置,解析器将能够直接访问到数据源。而在更为复杂的迭代中,解析器则会告诉数据加载器它们到底需要什么,据此加载器也会针对该目的去访问数据源。

那么,由此带来的好处是:数据加载器可以持续等待,直到所有的解析器都已被调用,并且完成了对于数据源的访问为止。针对上面提到的例子,如果有人想加载用户的账号和地址的话,那么只需对数据源发出一个请求便可。

可见,解析器只需了解其对应的需求,而数据加载器则需要知道所有解析器的目的,并据此来优化具体的访问。

监控GraphQL

有了上面的理论基础,我们就可以根据自己的架构,在如下多个位置监控GraphQL API了:

HTTP端点:针对那些影响到我们API的所有流量。

GraphQL查询:针对每个特定的查询。

GraphQL解析器或数据加载器:针对数据源的每个访问。

全栈追踪:针对每个查询所影响到的解析器和数据加载器。

1. HTTP端点

在GraphQL架构中,通常只有一个HTTP端点,因此在该REST API级别上的监控,往往只能让我们了解到有关API总体状态的信息

当然,这只是我们监控的一个起点。如果能够提供低延迟、低错误率的全量信息,而且客户端并无任何投诉产生的话,那么这些指标完全可以为我们节约后续花在深度监控上的大量时间和精力。但是,如果某个地方出现了问题,我们就需要更深入地进行探究了。

2. GraphQL查询

下面,我们需要监控每一个查询,当然主要针对的是那些静态使用模式(static usage patterns)的API。

如果我们仅将API与自己的客户端一起使用的话,那么针对固有查询的变化一般不会经常发生。而如果我们的API需要处理不同客户端的不同请求,那么查询请求不但多,而且杂。这些只有细微差别的请求往往会拖慢整体的速度。而消除此类问题的一种做法是:检查那些最常见的查询,并对它们实施综合监控。这就意味着我们需要事先定义一整套查询和变量的组合,然后从测试客户端运行之,以获悉它们的用时。在此基础上,我们能够减少在更新时产生的,严重影响性能的风险因素。由于持久化查询可以缓存那些最常用的查询,因此我们可以用它来解决此类问题。

3. 解析器和数据加载器

如果我们能够查看到后端所访问的数据源位置,那么就能够更好地获悉如下方面:

是在访问模式中使用了错误的数据源,还是需要改用其他类型的数据库?

如果数据源类型没问题的话,那么我们还需要改进对它们的请求方式吗?我们是否需要添加数据加载器?

那些发送到外部API的请求是否太慢了?我们是否可以将数据复制到更接近后端的位置?

可见,只有当我们能够看到后端具体查询的是什么数据时,上述问题的答案才能迎刃而解。

正如我们在前面讨论过的:解析器只能允许我们监控单个解析器的运作;而数据加载器使我们能够在一个请求中查看到所有解析器的工作。那么,数据加载器的另一个附带好处便是:我们能够发现解析器之间的问题,并及时予以解决。

4. 全栈跟踪

最为全面透彻的监控方式当属:使用tracing-ID来标记查询,将其传递给解析器以完成对该ID的解析,然后传递给数据加载器,并最终抵达数据源本身。据此,我们可以使用tracing-ID来记录时间和错误,以便后续对其进行合并,以及了解局部状态。

当然,在测量查询时,我们所获取到的有关解析用时的数据,实际上是数据被加载到解析器和/或数据加载器中进行的,而不是完成查询解析的用时。毕竟,系统在加载数据时,已不再需要使用查询了。这也就是GraphQL的核心思想之一:将查询与实际数据的加载进行解耦(decoupling)。可见,我们通过全栈监控,可以全面地获悉在发送查询时,后台究竟是如何运作的。

结论

总的说来,通过了解GraphQL API的后端结构,我们可以将REST API挂接到目标代码的不同位置,进而清晰且全面地监控生产系统,以获悉有关缓存和错误处理等方面的问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控系统
    +关注

    关注

    21

    文章

    3613

    浏览量

    169294
  • API
    API
    +关注

    关注

    2

    文章

    1383

    浏览量

    60992
  • GraphQL
    +关注

    关注

    0

    文章

    14

    浏览量

    533
收藏 人收藏

    评论

    相关推荐

    你的BurpSuite该更新了

    引入了新工具,使在 Burp Suite 中使用 GraphQL API,当 Burp 检测到来自目标的 GraphQL 请求时,它会将 GraphQL 选项卡添加到该请求的消息编辑器中。
    的头像 发表于 12-27 17:36 267次阅读
    你的BurpSuite该更新了

    成功实现功率器件热设计的4大步骤

    电子发烧友网站提供《成功实现功率器件热设计的4大步骤.pdf》资料免费下载
    发表于 11-22 09:58 0次下载
    成功<b class='flag-5'>实现</b>功率器件热设计的4大<b class='flag-5'>步骤</b>

    一个电路板从射频设计到实现是经过什么步骤

    一个电路板从设计到实现是经过什么步骤
    的头像 发表于 11-14 10:02 504次阅读
    一个电路板从射频设计到<b class='flag-5'>实现</b>是经过什么<b class='flag-5'>步骤</b>?

    家庭能效远程监控系统的设计与实现

    电子发烧友网站提供《家庭能效远程监控系统的设计与实现.pdf》资料免费下载
    发表于 10-31 11:30 0次下载
    家庭能效远程<b class='flag-5'>监控</b>系统的设计与<b class='flag-5'>实现</b>

    监控怎么储存怎么设置?

    监控怎么储存怎么设置?云监控的存储和设置通常取决于我们使用的监控系统、设备和软件。以下是一般的云监控存储和设置步骤
    的头像 发表于 10-30 17:27 4044次阅读

    EEMD方法的原理与算法实现步骤

    电子发烧友网站提供《EEMD方法的原理与算法实现步骤.pdf》资料免费下载
    发表于 10-23 11:44 0次下载
    EEMD方法的原理与算法<b class='flag-5'>实现</b><b class='flag-5'>步骤</b>

    基于Web的远程监控系统设计及实现

    电子发烧友网站提供《基于Web的远程监控系统设计及实现.pdf》资料免费下载
    发表于 10-18 09:53 0次下载
    基于Web的远程<b class='flag-5'>监控</b>系统设计及<b class='flag-5'>实现</b>

    静电离子风棒的联网智能实时监控的操作步骤

    静电离子风棒的联网智能实时监控可以通过以下步骤进行: 1. 获取数据:将静电离子风棒上的传感器与网络连接,以获取实时数据。传感器可能包括温度传感器、湿度传感器、电流传感器等,用于监测离子风棒的工作
    的头像 发表于 09-01 09:26 320次阅读
    静电离子风棒的联网智能实时<b class='flag-5'>监控</b>的操作<b class='flag-5'>步骤</b>

    基于EsDA MPC-ZC1 快速实现I2C 监控报警

    实验,PT100温度传感器的温度采集和读取显示不在本文赘述,具体详细的操作步骤可在《EsDAMPC-ZC1快速实现I2C采集监控》文章中查看。实验基于EsDA开发平
    的头像 发表于 08-23 15:16 413次阅读
    基于EsDA MPC-ZC1 快速<b class='flag-5'>实现</b>I2C <b class='flag-5'>监控</b>报警

    Andon安灯系统5个步骤

    通过以上五个步骤,企业可以建立一个有效的Andon安灯系统,帮助实时监控生产线的运行状态和问题情况,并及时采取措施,提高生产效率和质量。
    的头像 发表于 08-16 11:04 479次阅读
    Andon安灯系统5个<b class='flag-5'>步骤</b>

    分子蓝移磁光陷阱的实现步骤

    分子的激光冷却和捕获是实现分子量子气体和探索量子多体物理的重要步骤
    的头像 发表于 05-15 09:31 421次阅读

    HMI上显示PLC代码的实现步骤

    调试人员可以少很多时间去连机,对一些不熟练使用PLC的人员也可以进行简单判断,下面就是实现步骤,供大家参考。
    发表于 05-09 16:39 421次阅读
    HMI上显示PLC代码的<b class='flag-5'>实现</b><b class='flag-5'>步骤</b>

    干货分享 | TSMaster小功能之如何在图形中监控某一条DBC报文发送周期?

    今天给大家介绍TSMaster小功能之如何在图形中监控某一条DBC报文发送周期,想要实现这个功能,需要借助TSMaster的小程序功能来实现步骤一1.创建一个用户变量Cycle,用于
    的头像 发表于 05-09 15:48 817次阅读
    干货分享 | TSMaster小功能之如何在图形中<b class='flag-5'>监控</b>某一条DBC报文发送周期?

    如何实现AB PLC远程监控

    AB的PLC需要在异地实现远程监控和调试,选用了巨控GRM530远程通讯模块,那GRM530是如何实现AB PLC远程监控的呢?
    的头像 发表于 05-06 08:31 866次阅读
    如何<b class='flag-5'>实现</b>AB PLC远程<b class='flag-5'>监控</b>

    如何用zabbix的实现主机监控

    Zabbix是企业级分布式开源监控解决方案。可以对应用服务,数据库,网络,操作系统等提供7x24小时的监控,在6.x版本开始也新增了Kubernetes监控功能;本文主要介绍如何用zabbix的
    发表于 05-05 10:34 1190次阅读
    如何用zabbix的<b class='flag-5'>实现</b>主机<b class='flag-5'>监控</b>