熔断

熔断是 linkerd 用于从负载均衡中去除不健康的服务实例的机制。可以在连接级别和请求级别检测不健康的实例。通过使用熔断,linkerd 可以将尝试路由最终失败的请求所花费的时间降到最低,从而释放资源并避免导致级联故障。

下面描述 linkerd 提供的两种类型的熔断器。 他们在 Finagle 的熔断器文档 中更详细的讲述。

快速失败

快速失败熔断发生在连接级别。启用快速失败时,在尝试向服务主机中的某一台发送请求时,如果 linkerd 发现连接错误,则 linkerd 将从连接池中删除该连接。在后台,linkerd 尝试重新建立连接,而不主动发送流量。只有连接成功重新建立后,才能将其添加回池中,并再次开始接收流量。

默认情况下,快速失败在 linkerd 中是禁用的,因为在使用少量主机时代理服务请求可能会出现问题。如果服务只有一个主机,从负载均衡池中删除与该主机的唯一连接将导致该服务的所有请求失败,直到重新建立连接。在这种情况下,最好将连接留在池中,并继续发送请求。然而,对于较大的服务,快速失败是有用的,并且可以在每路由器的基础上在配置路由器时通过设置 failFast 参数来启用。

累计失败

累计失败熔断器工作在请求级别,基于给定主机请求失败的数量。默认情况下,如果 linkerd 从主机接收到5个连续的故障,它将暂时将主机标记为已停止,在重新发送请求之前给予它恢复的喘息之机。一旦主机被标记为死机,则 linkerd 将根据规避间隔尝试重新发送请求到该主机。通过设置客户端 failureAccrual 参数,将主机标记为死亡的阈值和规避间隔都是完全可配置的。除连续故障之外,其他可用的阈值计算包括在给定数量的请求中观察到的成功率,以及在给定时间窗口内观察到的成功率。

累计失败熔断使用响应分类来确定哪些类型的响应计为失败。可以通过在配置路由器时设置路由器 responseClassifier 参数,在每路由器上配置响应分类。

更多信息

如果您想了解有关各种不同熔断器设置的性能影响的更多信息,请查看 Booyant 的博客文章:使微服务在熔断时更具弹性