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

    文章

    4149

    浏览量

    184346
  • API
    API
    +关注

    关注

    2

    文章

    2147

    浏览量

    66226
  • GraphQL
    +关注

    关注

    0

    文章

    14

    浏览量

    767
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    数据滤波算法的具体实现步骤是怎样的?

    (高频电磁、瞬时脉冲等),选择适配的滤波算法并落地。以下以电能质量监测中最常用的 IIR 低通滤波(抗高频干扰)、滑动平均滤波(抗瞬时脉冲)、卡尔曼滤波(抗动态波动) 为例,详解具体实现步骤: 一、前置准备:明确滤波目标与硬件基
    的头像 发表于 10-10 16:45 427次阅读

    如何通过 OP-TEE 使用 MA35D1 TSI 实现内存块的安全监控功能?

    通过 OP-TEE 使用 MA35D1 TSI 实现内存块的安全监控功能
    发表于 08-19 06:46

    光伏系统监控的内容及其实现方法

    光伏系统监控是指对光伏电站的设备状态、发电性能及环境参数进行实时监测与管理的一种技术,目的在于确保电站安全运行、提升发电效率、延长设备寿命,并为运维决策提供数据支持。如何通过采用科学化、智能化的技术手段来实现光伏系统的监控?这是
    的头像 发表于 07-02 17:18 518次阅读

    通过御控APP实现PLC远程调试与远程监控

    御控APP,通过移动化、智能化的手段,实现了PLC远程调试与监控,为工业生产带来了便捷与高效。
    的头像 发表于 06-04 09:49 435次阅读

    电机运行监控系统的设计与实现

    纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:电机运行监控系统的设计与实现.pdf【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删除内容!
    发表于 05-26 02:19

    STM32与机智云连接实现步骤与技巧(下篇):机智云代码移植与优化

    在《STM32与机智云连接实现步骤与技巧(上篇)》中,我们介绍了硬件连接和通信协议配置。本篇将重点讲解如何将机智云相关代码移植到STM32,完成数据上传和设备控制。我们将介绍如何在STM32中配置
    的头像 发表于 05-23 18:10 800次阅读
    STM32与机智云连接<b class='flag-5'>实现</b><b class='flag-5'>步骤</b>与技巧(下篇):机智云代码移植与优化

    STM32与机智云连接实现步骤与技巧(上篇)

    通过STM32与机智云的连接,开发者可以实现设备的远程控制和数据管理,提升物联网应用的智能化水平。本文将介绍STM32与机智云连接的具体步骤,涵盖硬件连接、通信协议配置、数据传输及云平台应用开发等
    的头像 发表于 05-23 18:10 850次阅读
    STM32与机智云连接<b class='flag-5'>实现</b><b class='flag-5'>步骤</b>与技巧(上篇)

    openstack搭建详细步骤

    openstack搭建详细步骤
    的头像 发表于 05-07 14:05 1610次阅读

    Apis Partners支持的Giift全球更名为Xoxoday

    新加坡2025年3月5日 /美通社/ -- Giift,一家由Apis Partners支持、全球领先的人工智能驱动忠诚度和奖励SaaS商务企业,今天宣布其全球更名为Xoxoday(发音为
    的头像 发表于 03-05 14:47 534次阅读

    如何实现开源开放生态下的RDMA网络监控

    。然而,许多企业在尝试对 RDMA 网络进行监控时,却常常遭遇闭源监控工具的限制。本文将为您揭示如何突破这些限制,实现对 RDMA 网络的高效监控。 为什么需要强化RDMA网络
    的头像 发表于 03-03 13:42 967次阅读
    如何<b class='flag-5'>实现</b>开源开放生态下的RDMA网络<b class='flag-5'>监控</b>?

    海外设备如何实现远程监控智慧运维

    随着全球化和数字化转型的深入推进,越来越多的企业将设备部署在海外市场,以满足不同区域的业务需求。然而,海外设备的运维管理面临着设备分布广、区域差异大、实时监控难、维护成本高等挑战。如何实现海外
    的头像 发表于 02-28 15:25 557次阅读
    海外设备如何<b class='flag-5'>实现</b>远程<b class='flag-5'>监控</b>智慧运维

    BP神经网络的实现步骤详解

    BP神经网络的实现步骤主要包括以下几个阶段:网络初始化、前向传播、误差计算、反向传播和权重更新。以下是对这些步骤的详细解释: 一、网络初始化 确定网络结构 : 根据输入和输出数据的特性,确定
    的头像 发表于 02-12 15:50 1119次阅读

    涂鸦智能与Google Home APIs全面对接,共筑无缝智能家居新生态

      近日,全球化云开发者平台涂鸦智能(NYSE: TUYA,HKEX: 2391)正式宣布其赋能的智能生态与Google Home APIs实现全面对接。这一合作不仅标志着双方在智能生态领域得到
    的头像 发表于 02-12 09:36 570次阅读
    涂鸦智能与Google Home <b class='flag-5'>APIs</b>全面对接,共筑无缝智能家居新生态

    碳滑板电阻测试仪如何实现远程监控和智能维护

    碳滑板电阻测试仪通过集成先进的技术手段,可以实现远程监控和智能维护,以下是其实现方式的详细阐述: 一、远程监控实现 物联网技术的应用 ·
    的头像 发表于 01-09 09:21 594次阅读
    碳滑板电阻测试仪如何<b class='flag-5'>实现</b>远程<b class='flag-5'>监控</b>和智能维护

    开关柜机械特征监控主要参数哪些?如何实现

    蜀瑞创新为大家科普:开关柜机械特征监控是指对电力系统中使用的开关设备的机械性能进行监测,以确保其正常运行并预防故障。开关柜机械特征监控是确保电力系统安全稳定运行的重要环节。其实现方式主要依赖于多种技术手段的综合运用。
    的头像 发表于 12-21 16:35 738次阅读
    开关柜机械特征<b class='flag-5'>监控</b>主要参数哪些?如何<b class='flag-5'>实现</b>?