微服务是否应该在向其他微服务发出请求之前调用健康检查?

Should microservices call an health check before making a request to other microservices?

假设我有微服务 A 和微服务 B。微服务 A 需要向微服务 B 发出 HTTP 请求。它是否应该在执行该请求之前调用微服务 B 的健康检查端点,并且只有在健康检查 returns 健康吗?

依赖运行状况检查的问题在于,在成功进行运行状况检查和调用微服务之间,服务可能会降级。无论健康检查的结果如何,您的代码都应该处理失败。

我建议使用像 resilience4j 这样的库,具体取决于您使用的语言。它的 CircuitBreaker/Bulkheads/Retries 应该可以达到您的要求。 如果有 Loadbalancer 或任何其他基础设施(如 K8s),我会把健康检查留给他们(就绪性和 livelines-probes)。

答案:否

使用断路器模式,您可以在您喜欢的语言中找到 api,您可以定义您的回调解决方案。

断路器是现代软件开发中使用的一种设计模式。它用于检测故障并封装防止故障不断重复发生的逻辑,在维护期间,临时外部系统故障或意外系统困难(wiki)。

服务客户端应通过代理调用远程服务,该代理的功能类似于电路断路器。当连续失败的次数超过阈值时,断路器将跳闸,并且在超时期限内,所有调用远程服务的尝试都将立即失败。超时到期后,断路器允许有限数量的测试请求通过。如果这些请求成功,断路器将恢复正常运行。否则,如果出现故障,超时期限将重新开始。