【问题标题】:Health Check for Down stream service下游服务的健康检查
【发布时间】:2019-06-05 06:37:22
【问题描述】:
我想编写由我们的服务使用的所有下游服务的健康检查。我们可以很容易地为 GET 方法编写,它不会影响任何事情。但是如何对 POST / PUT 方法执行此操作,因为它会更改现有值?
【问题讨论】:
标签:
java
api
spring-boot
microservices
health-monitoring
【解决方案1】:
根据您所在域的要求,您可能对健康检查有不同的期望。可能性是:
- 服务正在运行。您只调用服务的一种方法来检查返回码。您只想确保整个服务没有崩溃等。这是最常见的健康检查形式。
- 功能特定。这就是您的想法 - 调用服务并评估返回参数。
- 完整测试。调用该服务时的测试覆盖率与授权部署之前的测试覆盖率相同。
- 内部服务。该服务为健康检查提供了一个特殊的端点,提供了服务健康的详细视图。
在大多数分布式系统中,健康检查仅在服务级别执行(选项 1),在这种情况下,选择哪个端点并不重要,有时返回的内容也不重要(可能是错误例如,只要不是超时)。
测试的范围越深,执行所需的时间就越多,执行频率就越低。
最彻底的健康检查将是完整的单元测试(例如发布/更改和删除不同的数据集)。但是,如果这对性能影响不理想,您可以依靠以下几种方法之一:
- 使用非法参数发布/放置。只是为了检查服务是否返回预期的错误代码(例如与超时相比)。
- 在您的服务中实施测试模式,例如虽然传递了一个特殊的参数或一个可以运行内部测试的特殊端点。
- 让服务实现一个业务目的,这样完整的服务就不会只有 POST/PUT 方法,还有 GET。然后您只使用 GET 来确定服务运行状况。