Spring Cloud(九)Hystrix知识点

1、什么是 Hystrix

在微服务架构中,服务与服务之间可以相互调用(RPC)。为保证高可用,服务多以集群部署。由于网络原因或者服务故障,服务无法正常调用,调用这个服务就会出现网络延迟。若此时有大量的请求,甚至可能导致服务“雪崩”。

Hystrix 是 Netflix 公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。

2、什么是服务雪崩?

微服务中,服务间调用关系错综复杂,一个请求,可能需要调用三个微服务接口才能实现,会形成非常复杂的调用链路。

当某个服务出现异常,就会造成请求阻塞,用户不会得到响应,对应的线程无法释放,当大量的用户请求到来,越来越多的线程会阻塞。

最后甚至把可用连接全都占满了,服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其他服务都不可用,形成雪崩效应。

3、Hystrix如何解决服务雪崩

服务降级

服务熔断

服务隔离

4、服务降级

优先保证核心服务,而非核心服务不可用或弱可用。

这样用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息)

服务降级有两种实现方式,一种是针对单个方法,一个是针对类下全部方法

4.1、指定某个服务降级处理逻辑

    @HystrixCommand(fallbackMethod = "helloHystrix")
    public String helloService() {
        return restTemplate.getForObject("http://SERVICE-CLIENT/hello", String.class);
    }

    public String helloHystrix() {
        return "服务繁忙,稍后再试!";
    }

PS:降级逻辑方法要和正常逻辑具有相同的参数列表和返回值声明

4.2、类统一全局降级逻辑

为该类下所有方法统一处理服务降级,控制器上加上DefaultProperties注解并指定降级处理逻辑的方法:

@DefaultProperties(defaultFallback = "defaultCallBack")
public class HelloService {

    @Autowired
    RestTemplate restTemplate;

    @HystrixCommand
    public String helloService(String name) {
        return restTemplate.getForObject("http://SERVICE-CLIENT/hello?name=" + name, String.class);
    }

	// 注意,这里不能写任何参数
    public String defaultCallBack()  
    {
        return "服务繁忙,稍后再试!";
    }
 }

4.3、设置Hystrix服务降级的超时时间

设置超时时间,有两

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值