首页 > 编程知识 正文

熔断机制springcloud,服务降级和服务熔断的区别

时间:2023-05-04 21:56:50 阅读:12764 作者:1308

Why

在微服务体系结构中,由于调用关系的复杂性,当调用链路中的某个资源变得不稳定时,最终会将请求堆栈在一起。 服务之间的延迟增加,备份队列、线程和其他系统资源紧张,整个系统都可能发生级联故障。

为了保持服务的稳定性,在调用链路中的某个资源处于不稳定状态时(例如,调用超时或异常百分比上升),限制对该资源的调用,使请求迅速失败,影响其他资源并导致级联错误资源降级后,对该资源的调用将在下一个降级时间窗口中自动断开。 默认行为是抛出DegradeException。

霍瓦

服务熔断

一般发生在下游服务中,下游服务发生故障时,服务无法熔断使用

电路中的保险丝,超过负荷,直接熔断,切断电源,不能使用,保护整体安全

服务降级

降级后暂时无法使用某项服务,为了服务整体的稳定,牺牲一些不重要的功能,保证核心功能的进行

妈妈让qcdjz去买酱油,给了她10元。 qcdjz去超市看了2元喜欢的玩具,拿着玩具和酱油去柜台结账发现一共需要12元。 为了完成母亲的任务,我选择不买玩具。 我下次在买玩具

因此,根据上述分析,两者其实从几个角度有一定的相似性:

目的很一致:从可用性可靠性考虑,都是为了防止系统整体延迟和崩溃而采用的技术手段;

最终的表现相似。 对两者来说,最终让用户体验的是一些功能暂时无法完成或无法使用

自治性要求高:熔断模式一般来说服务是基于战略的自动触发,降级可以人工干预,但在微服务的框架下,显然不可能完全依赖人,交换机预设、配置中心都是必要的手段;

两者的区别很明显:

触发的原因不太一样。 服务熔断通常是由一个服务(下游服务)故障引起的,服务降级通常是从总体负载考虑的。

微信

我们使用sentinel进行熔断降级,因为我们使用nacos进行服务注册和发现。

首先引入依赖

//Gradle

实施(com.Alibaba.cloud : spring-cloud-starter-Alibaba-sentinel ) {

exclude module: 'guava '

}

//Maven

com.alibaba.cloud

spring-cloud-starter-Alibaba-sentinel

使用配置文件打开sentinel

feign:

sentinel:

启用:真

使用语言kotlin

当您阅读@FeignClient源代码时,您会看到fallback是由spring创建的

//*

* fallbackclassforthespecifiedfeignclientinterface.thefallbackclassmust

* implementtheinterfaceannotatedbythisannotationandbeavalidspringbean。

* @ returnfallbackclassforthespecifiedfeignclientinterface

*/

Class fallback () default void.class;

//*

* defineafallbackfactoryforthespecifiedfeignclientinterface.the fallback

* factorymustproduceinstancesoffallbackclassesthatimplementtheinterface

* annotated by { @ linkfeignclient }.thefallbackfactorymustbeavalidspringbean。

*

* @ see feign.hy strix.fallbackfactoryfordetails。

* @ returnfallbackfactoryforthespecifiedfeignclientinterface

*/

Class fallbackFactory () default void.class;

1 .闪回工厂

package com.karl.cloud;

importorg.spring framework.cloud.open feign.feign客户端;

importorg.spring帧web.bind.annotation.get mapping;

import com.karl.DTO.UserInfoDTO;

@ feign client (value=' Karl-service-user ',fallback factory=userfallbackfactory :3360 class ) )。

接口用户功能{

@getmapping(/Karl/user ) )。

fun getuser (:用户界面dto

}

@Component

classuserfallbackfactory : fallback factory {

val logger=logger factory.getlogger (userfallbackfactory 3360: class.Java )!

板载函数创建(cause : throwable ) :数据功能{

Logger.error(cause.message,cause ) )

返回用户故障后退(

}

}

classuserfallback :用户feign {

override fun getUser () : UserInfoDTO{

返回userinfo dto (

}

}

2 .闪回

package com.karl.cloud;

importorg.spring framework.cloud.open feign.feign客户端;

importorg.spring帧web.bind.annotation.get mapping;

import com.karl.DTO.UserInfoDTO;

@ feign client (value=' Karl-service-user ',fallback=user fallback :3360 class ) ) ) ) ) )。

接口用户功能{

@getmapping(/Karl/user ) )。

fun getuser (:用户界面dto

}

@Component

classuserfallback :用户feign {

override fun getUser () : UserInfoDTO{

返回userinfo dto (

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。