降级与熔断
概念
熔断
类似于电路上的保险丝,当服务出现宕机或者连接超时的情况,为了防止整个微服务挂掉
降级
对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。
异同
相同点:
- 都是为了提高系统的高性能和高可用
- 用户都能体验到某些模块功能暂时无法使用
不同点:
触发原因不同,熔断一般是下游的单个服务发生故障引起的,服务降级一般是从微服务整体考虑的
Hystrix
Hystrix通过添加容许时延和容错逻辑来帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,阻止跨服务的级联故障,并提供了退路选项,所有这些都可以提高系统的整体弹性。
目的:
- 快速失败和快速恢复
- 防止在复杂分布式系统中出现级联故障
- 通过第三方客户端的库来为依赖服务时的潜在故障提供控制和保护
- 提供退路对服务进行优雅降级
- 提供实时监控、报警和操作控制
<!-- Feign 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Hystrix 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>