Merge pull request #19507 from wxy/20200828-Use-GraphQL-as-an-API-gateway-to-monitor-microservices.md

PRF&PUB:20200828 Use GraphQL as an API gateway to monitor microservices.md
This commit is contained in:
Xingyu.Wang 2020-09-06 21:15:51 +08:00 committed by GitHub
commit 36feb9d36d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,18 +1,20 @@
[#]: collector: (lujun9972) [#]: collector: (lujun9972)
[#]: translator: (geekpi) [#]: translator: (geekpi)
[#]: reviewer: ( ) [#]: reviewer: (wxy)
[#]: publisher: ( ) [#]: publisher: (wxy)
[#]: url: ( ) [#]: url: (https://linux.cn/article-12588-1.html)
[#]: subject: (Use GraphQL as an API gateway to monitor microservices) [#]: subject: (Use GraphQL as an API gateway to monitor microservices)
[#]: via: (https://opensource.com/article/20/8/microservices-graphql) [#]: via: (https://opensource.com/article/20/8/microservices-graphql)
[#]: author: (Rigin Oommen https://opensource.com/users/riginoommen) [#]: author: (Rigin Oommen https://opensource.com/users/riginoommen)
使用 GraphQL 作为 API 网关来监控微服务 使用 GraphQL 作为 API 网关来监控微服务
====== ======
在一个问题使一个关键的微服务瘫痪之前,使用 GraphQL 的监控功能,帮助你及早发现问题。
![Net catching 1s and 0s or data in the clouds][1]
[微服务][2]和 [GraphQL][3] 就像面包和黄油一样,是一个很好的组合。它们本身都很好,结合起来就更好了。了解你的微服务的健康状况是很重要的,因为它们运行着重要的服务。如果等到某个关键的服务崩溃了才诊断问题,那是很愚蠢的。让 GraphQL 帮助你及早发现问题并不需要花费太多精力。 > 在问题导致关键的微服务瘫痪之前,使用 GraphQL 的监控功能帮助你及早发现问题。
![](https://img.linux.net.cn/data/attachment/album/202009/06/205052ve8eebyamcace4v8.jpg)
[微服务][2]和 [GraphQL][3] 就像面包和黄油一样,是一个很好的组合。它们本身都很棒,结合起来就更棒了。了解你的微服务的健康状况是很重要的,因为它们运行着重要的服务。如果等到某个关键的服务崩溃了才诊断问题,那是很愚蠢的。让 GraphQL 帮助你及早发现问题并不需要花费太多精力。
![GraphQL in Microservices][4] ![GraphQL in Microservices][4]
@ -20,15 +22,13 @@
以下是我在设计服务检查时考虑的因素: 以下是我在设计服务检查时考虑的因素:
**服务器健康检查的要求:** 服务器健康检查的要求:
1. 我需要了解我的微服务的可用性状态。 1. 我需要了解我的微服务的可用性状态。
2. 我希望能够管理服务器的负载。 2. 我希望能够管理服务器的负载。
3. 我希望对我的微服务进行端到端e2e测试。 3. 我希望对我的微服务进行端到端e2e测试。
4. 我应该能够预测中断。 4. 我应该能够预测中断。
![Service health in microservices][5] ![Service health in microservices][5]
### 做服务器健康检查的方法 ### 做服务器健康检查的方法
@ -39,22 +39,19 @@
2. **脚本化浏览器:**脚本化浏览器比较高级。像 [Selenium][6] 这样的浏览器自动化工具可以让你实现自定义的监控规则集。 2. **脚本化浏览器:**脚本化浏览器比较高级。像 [Selenium][6] 这样的浏览器自动化工具可以让你实现自定义的监控规则集。
3. **API 测试:**API 测试用于监控 API 端点。这是 ping 检查模型的高级版本,你可以根据 API 响应来定义监控计划。 3. **API 测试:**API 测试用于监控 API 端点。这是 ping 检查模型的高级版本,你可以根据 API 响应来定义监控计划。
### 使用 GraphQL 进行健康检查 ### 使用 GraphQL 进行健康检查
在一个典型的基于 REST 的微服务中,你需要从头开始构建健康检查功能。这是一个时间密集型的过程,但使用 GraphQL 就不用担心了。 在一个典型的基于 REST 的微服务中,你需要从头开始构建健康检查功能。这是一个时间密集型的过程,但使用 GraphQL 就不用担心了。
根据它的[网站][7] 根据它的[网站][7]
> “GraphQL 是一种用于 API 的查询语言也是一种用现有数据完成这些查询的运行时。GraphQL 为你的 API 中的数据提供了一个完整的、可理解的描述,让客户有能力精确地仅查询他们所需要的东西,让 API 更容易随着时间的推移而进化,并实现强大的开发者工具。” > “GraphQL 是一种用于 API 的查询语言,也是一种用现有数据完成这些查询的运行时环境。GraphQL 为你的 API 中的数据提供了一个完整的、可理解的描述,让客户有能力精确地仅查询他们所需要的东西,让 API 更容易随着时间的推移而进化,并实现强大的开发者工具。”
当你启动一个 GraphQL 微服务时,你还可以获得监控微服务的运行状况的供给。这是一个隐藏的宝贝。
当你启动一个 GraphQL 微服务时,你还可以获得监控微服务的运行状况的预置。这是一个隐藏的宝贝。
正如我上面提到的,你可以用 GraphQL 端点执行 API 测试以及 ping 检查。 正如我上面提到的,你可以用 GraphQL 端点执行 API 测试以及 ping 检查。
Apollo GraphQL Server 提供了一个默认的端点,它可以返回有关你的微服务和服务器健康的信息。它不是很复杂:如果服务器正在运行,它就会返回状态码 200。 Apollo GraphQL 服务器提供了一个默认的端点,它可以返回有关你的微服务和服务器健康的信息。它不是很复杂:如果服务器正在运行,它就会返回状态码 200。
默认端点是 `<server-host>/.well-known/apollo/server-health` 默认端点是 `<server-host>/.well-known/apollo/server-health`
@ -66,27 +63,26 @@ Apollo GraphQL Server 提供了一个默认的端点,它可以返回有关你
Apollo GraphQL 在定义服务器的同时,通过声明一个 `onHealthCheck` 函数来有效地管理这种情况。 Apollo GraphQL 在定义服务器的同时,通过声明一个 `onHealthCheck` 函数来有效地管理这种情况。
``` ```
* Defining the Apollo Server */ * Defining the Apollo Server */
const apollo = new ApolloServer({ const apollo = new ApolloServer({
  playground: process.env.NODE_ENV !== 'production', playground: process.env.NODE_ENV !== 'production',
  typeDefs: gqlSchema, typeDefs: gqlSchema,
  resolvers: resolver, resolvers: resolver,
  onHealthCheck: () =&gt; { onHealthCheck: () => {
    return new Promise((resolve, reject) =&gt; { return new Promise((resolve, reject) => {
      // Replace the `true` in this conditional with more specific checks! // Replace the `true` in this conditional with more specific checks!
      if (true) { if (true) {
        resolve(); resolve();
      } else { } else {
        reject(); reject();
      } }
    }); });
  } }
}); });
``` ```
当你定义一个 `onHealthCheck` 方法时,它返回一个 promise如果服务器准备好了它就会返回 _resolve_,如果有错误,它就会返回 _reject_ 当你定义一个 `onHealthCheck` 方法时,它返回一个 promise如果服务器准备好了它就会返回 `resolve`,如果有错误,它就会返回 `reject`
GraphQL 让监控 API 变得更容易。此外,在你的服务器基础架构中使用它可以使代码变得可扩展。如果你想尝试采用 GraphQL 作为你的新基础设施定义,请参见我的 GitHub 仓库中的[示例代码和配置][9]。 GraphQL 让监控 API 变得更容易。此外,在你的服务器基础架构中使用它可以使代码变得可扩展。如果你想尝试采用 GraphQL 作为你的新基础设施定义,请参见我的 GitHub 仓库中的[示例代码和配置][9]。
@ -97,7 +93,7 @@ via: https://opensource.com/article/20/8/microservices-graphql
作者:[Rigin Oommen][a] 作者:[Rigin Oommen][a]
选题:[lujun9972][b] 选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi) 译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID) 校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出