服务熔断
熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时, 会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微 服务调用响应正常后恢复调用链路。
在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监 控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动 熔断机制。
服务降级
一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。
使用Hystrix实现服务熔断的步骤如下:
- 添加依赖:在项目的构建文件(如Maven的pom.xml)中添加Hystrix的依赖。示例依赖配置如下:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
- 配置开启Hystrix:在Spring Boot应用程序的启动类上添加
@EnableCircuitBreaker
注解,用于启用Hystrix的功能。import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; @SpringBootApplication @EnableCircuitBreaker public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
- 标记服务方法:在需要进行熔断处理的服务方法上,使用
@HystrixCommand
注解进行标记。该注解指定了熔断处理的逻辑和备选方法。import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; @Service public class YourService { @HystrixCommand(fallbackMethod = "fallbackMethod") public String yourServiceMethod() { // 实际的服务逻辑 } public String fallbackMethod() { // 备选方法的逻辑,用于处理熔断时的情况 } }
- 配置熔断器参数(可选):可以通过properties文件、yaml文件或代码方式设置Hystrix的参数,如熔断的超时时间、失败阈值等。以下是示例配置:
hystrix:
command:
default:
execution.isolation.thread.timeoutInMilliseconds: 1000 # 设置超时时间为1秒
通过以上步骤,当被标记的服务方法发生故障或超时时,Hystrix将会拦截该请求并执行备选的熔断处理方法(即fallbackMethod
),避免故障扩散和对调用方的影响。一段时间后,Hystrix会尝试恢复正常的调用,如果调用成功,则重新关闭熔断器。
注:以上具体实现可能会根据项目的需求和架构有所不同。
另外,Netflix宣布停止对Hystrix的维护,建议使用Resilience4j或Sentinel等替代方案。