微服务和 GraphQL 是绝佳的组合,就像面包和黄油一样。它们各自都很出色,结合在一起更是锦上添花。了解微服务的健康状况非常重要,因为它们运行着重要的服务——等到关键服务崩溃才去诊断问题是很不明智的。让 GraphQL 帮助您尽早发现问题并不需要花费太多精力。

常规的健康检查使您能够观察和测试您的服务,以便在问题影响您的业务、客户或项目之前尽早收到通知。说起来容易,但进行健康检查究竟意味着什么呢?
以下是我在设计服务检查时考虑的因素
服务器健康检查的要求
- 我需要了解我的微服务的可用性状态。
- 我希望能够管理服务器负载。
- 我希望对我的微服务进行端到端 (e2e) 测试。
- 我应该能够预测中断。

进行服务器健康检查的方法
设计健康检查可能很棘手,因为理论上,您可以检查的内容几乎是无限的。我喜欢从小处着手,先运行最基本的测试:ping 测试。这只是简单地测试运行应用程序的服务器是否可用。然后我逐步加强我的测试,以评估具体的关注点,思考服务器中最重要的元素。我会考虑如果突然消失会造成灾难性后果的东西。
- Ping 检查:Ping 是最简单的监控类型。它只是检查您的应用程序是否在线。
- 脚本化浏览器:脚本化浏览器更高级;像 Selenium 这样的浏览器自动化工具使您能够实施自定义监控规则集。
- API 测试:API 测试用于监控 API 端点。这是 ping 检查模型的高级版本,您可以在其中根据 API 响应定义监控计划。
使用 GraphQL 进行健康检查
在典型的基于 REST 的微服务中,您需要从头开始构建健康检查功能。这是一个耗时的过程,但使用 GraphQL 时,您不必为此担心。
根据其 网站
“GraphQL 是一种用于 API 的查询语言,也是一个运行时,用于使用您现有的数据来满足这些查询。GraphQL 提供了对 API 中数据的完整且易于理解的描述,使客户端能够精确地请求他们需要的内容,不多也不少,使 API 随着时间的推移更容易演变,并启用强大的开发者工具。”
当您引导启动 GraphQL 微服务时,您还可以获得监控微服务健康状况的功能。这有点像隐藏的宝石。
正如我上面提到的,您可以使用 GraphQL 端点执行 API 测试以及 ping 检查。
Apollo GraphQL Server 提供了一个默认端点,该端点返回有关您的微服务和服务器健康状况的信息。它不是很复杂:如果服务器正在运行,它会返回状态代码 200。
默认端点是 <server-host>/.well-known/apollo/server-health
。

高级健康检查
在某些情况下,基本的健康检查可能不足以确保系统的完整性。例如,紧密耦合的系统需要更多的业务逻辑来确保系统的健康。
Apollo GraphQL 足够高效,可以通过在定义服务器时声明 onHealthCheck
函数来管理此用例
* Defining the Apollo Server */
const apollo = new ApolloServer({
playground: process.env.NODE_ENV !== 'production',
typeDefs: gqlSchema,
resolvers: resolver,
onHealthCheck: () => {
return new Promise((resolve, reject) => {
// Replace the `true` in this conditional with more specific checks!
if (true) {
resolve();
} else {
reject();
}
});
}
});
当您定义 onHealthCheck
方法时,它会返回一个 Promise,如果服务器准备就绪,则 Promise 解析(resolve),如果出现错误,则 Promise 拒绝(reject)。
GraphQL 使监控 API 更容易。此外,将其用于您的服务器基础设施可以提高可扩展性。如果您想尝试采用 GraphQL 作为新的基础设施定义,请参阅我的 GitHub 仓库以获取示例代码和配置。
评论已关闭。