Microservices 微服务:检测失败的服务(所有问题的根源)

Microservices 微服务:检测失败的服务(所有问题的根源),microservices,Microservices,我想了解如何(以快速/可靠的方式)检测失败的服务,即服务什么是所有5xx响应的根 让我来详细说明一下。让我们假设我们有300多个微服务,它们只有通过GET请求的同步http交互,没有任何数据修改(为了简单起见,我们假设它)。每个客户请求可以在调用10个不同的微服务中转换,而且它可以是请求的“调用链”,即API网关调用3个不同的微服务,每个微服务调用1-5个,这些1-5个微服务调用1-5个,等等 我们密切监视每个微服务上的5xx错误,并对这些错误作出反应 现在其中一个微服务失败了。它似乎位于“调用

我想了解如何(以快速/可靠的方式)检测失败的服务,即服务什么是所有5xx响应的根

让我来详细说明一下。让我们假设我们有300多个微服务,它们只有通过GET请求的同步http交互,没有任何数据修改(为了简单起见,我们假设它)。每个客户请求可以在调用10个不同的微服务中转换,而且它可以是请求的“调用链”,即API网关调用3个不同的微服务,每个微服务调用1-5个,这些1-5个微服务调用1-5个,等等

我们密切监视每个微服务上的5xx错误,并对这些错误作出反应

现在其中一个微服务失败了。它似乎位于“调用链”的末端,这意味着依赖它的其他微服务也将开始返回5xx

是的,存在断路器,是的,断路器变为“触发/打开”,它们不调用下游服务,而是立即返回错误(在大多数情况下,我们无法返回像空响应这样的良好回退)

因此,我们看到相对大量的微服务返回5xx。与30-40微服务返回5xx一样,我们看到30-40触发/断开断路器

如何快速检测失败的微服务,这是万恶之源? 有人遇到过这个问题吗


关于

您将需要实现一个分布式跟踪解决方案,该解决方案使用全局ID跟踪原始事务。此全局标识符的名称通常称为关联ID,它由创建请求的第一个服务生成,并传播到所有其他协同工作以完成请求的微服务请求

请查看您的实现需求。它提供了一些库,供您添加在分布式环境中识别故障微服务所需的工具


<>但是,如果你真的有300个微服务都使用同步调用……也许是时候考虑使用异步通信来消除同步通信中固有的时间耦合。< /P>你可以在起始点(客户端请求)创建请求ID,将日志写入到ELK栈(或类似),然后擦除结果,例如,为给定的request-id提供第一个异常。