使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

admin 2020年9月7日10:39:47评论231 views字数 1966阅读6分33秒阅读模式
 
使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国
导读:在问题导致关键的微服务瘫痪之前,使用 GraphQL 的监控功能帮助你及早发现问题。           
本文字数:2123,阅读时长大约:3分钟

https://linux.cn/article-12588-1.html
作者:Rigin Oommen
译者:geekpi

微服务和 GraphQL 就像面包和黄油一样,是一个很好的组合。它们本身都很棒,结合起来就更棒了。了解你的微服务的健康状况是很重要的,因为它们运行着重要的服务。如果等到某个关键的服务崩溃了才诊断问题,那是很愚蠢的。让 GraphQL 帮助你及早发现问题并不需要花费太多精力。

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

GraphQL in Microservices

常规的健康检查可以让你观察和测试你的服务,在问题影响到你的业务、客户或项目之前,尽早得到通知。说起来很简单,但健康检查到底要做什么呢?

以下是我在设计服务检查时考虑的因素:

服务器健康检查的要求:

1. 我需要了解我的微服务的可用性状态。
2. 我希望能够管理服务器的负载。
3. 我希望对我的微服务进行端到端(e2e)测试。
4. 我应该能够预测中断。

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

Service health in microservices

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

做服务器健康检查的方法

进行健康检查可能比较棘手,因为理论上,你可以检查的东西几乎是无穷无尽的。我喜欢从小处着手,运行最基本的测试:ping 测试。这只是测试运行应用的服务器是否可用。然后,我加强测试以评估特定问题,思考服务器中最重要的元素。我想到那些如果突然消失的话将是灾难性的事情。

1. **Ping 检查:**Ping 是最简单的监控类型。它只是检查你的应用是否在线。
2. **脚本化浏览器:**脚本化浏览器比较高级。像 Selenium 这样的浏览器自动化工具可以让你实现自定义的监控规则集。
3. **API 测试:**API 测试用于监控 API 端点。这是 ping 检查模型的高级版本,你可以根据 API 响应来定义监控计划。

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

使用 GraphQL 进行健康检查

在一个典型的基于 REST 的微服务中,你需要从头开始构建健康检查功能。这是一个时间密集型的过程,但使用 GraphQL 就不用担心了。

根据它的网站称:

“GraphQL 是一种用于 API 的查询语言,也是一种用现有数据完成这些查询的运行时环境。GraphQL 为你的 API 中的数据提供了一个完整的、可理解的描述,让客户有能力精确地仅查询他们所需要的东西,让 API 更容易随着时间的推移而进化,并实现强大的开发者工具。”

当你启动一个 GraphQL 微服务时,你还可以获得监控微服务的运行状况的供给。这是一个隐藏的宝贝。

正如我上面提到的,你可以用 GraphQL 端点执行 API 测试以及 ping 检查。

Apollo GraphQL 服务器提供了一个默认的端点,它可以返回有关你的微服务和服务器健康的信息。它不是很复杂:如果服务器正在运行,它就会返回状态码 200。

默认端点是 <server-host>/.well-known/apollo/server-health

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

Health Check with GraphQL

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国

高级健康检查

在某些情况下,基本的健康检查可能不足以确保系统的完整性。例如,紧密耦合的系统需要更多的业务逻辑来确保系统的健康。

Apollo GraphQL 在定义服务器的同时,通过声明一个 onHealthCheck 函数来有效地管理这种情况。

  1. * Defining the Apollo Server */
  2. const apollo = new ApolloServer({
  3. playground: process.env.NODE_ENV !== 'production',
  4. typeDefs: gqlSchema,
  5. resolvers: resolver,
  6. onHealthCheck: () => {
  7. return new Promise((resolve, reject) => {
  8. // Replace the `true` in this conditional with more specific checks!
  9. if (true) {
  10. resolve();
  11. } else {
  12. reject();
  13. }
  14. });
  15. }
  16. });

当你定义一个 onHealthCheck 方法时,它返回一个 promise,如果服务器准备好了,它就会返回 resolve,如果有错误,它就会返回 reject

GraphQL 让监控 API 变得更容易。此外,在你的服务器基础架构中使用它可以使代码变得可扩展。如果你想尝试采用 GraphQL 作为你的新基础设施定义,请参见我的 GitHub 仓库中的示例代码和配置


via: https://opensource.com/article/20/8/microservices-graphql

作者:Rigin Oommen 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年9月7日10:39:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 GraphQL 作为 API 网关来监控微服务 | Linux 中国http://cn-sec.com/archives/122271.html

发表评论

匿名网友 填写信息