SpringCloud Hystrix知识学习(防止雪崩效应)

[size=large][b]一、Hystrix说明[/b][/size]
1.服务雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。

[color=red][b]1.A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的不可用,引起B的不可用,并将不可用逐渐放大C和D时, 服务雪崩就形成了。[/b][/color]

[size=medium][color=red][b]2.雪崩原因:[/b][/color][/size]
[b]1) 服务提供者不可用[/b]

a.硬件故障
a1.硬件损坏造成的服务器主机宕机
a2.网络硬件故障造成的服务提供者的不可访问

b.程序Bug

c.缓存击穿:缓存应用重启, 所有缓存被清空时,以及短时间内大量缓存失效时. 大量的缓存不命中, 使请求直击后端,造成服务提供者超负荷运行,引起服务不可用

d.用户大量请求:在秒杀和大促开始前,如果准备不充分,用户发起大量请求造成服务提供者的不可用

[b]2) 重试加大流量[/b]

a.用户重试:用户由于忍受不了界面上长时间的等待,而不断刷新页面甚至提交表单
b.代码逻辑重试:服务调用端的会存在大量服务异常后的重试逻辑

[b]3) 服务调用者不可用[/b]

a.同步等待造成的资源耗尽:使用同步调用时,会产生大量的等待线程占用系统资源. 一旦线程资源被耗尽,服务调用者提供的服务也将处于不可用状态, 造成服务雪崩效应产生

[size=medium][color=red][b]3.雪崩应对策略:[/b][/color][/size]

[b]1) 流量控制[/b]
a.网关限流
因为Nginx的高性能, 目前一线互联网公司大量采用Nginx+Lua的网关进行流量控制, 由此而来的OpenResty也越来越热门.

b.用户交互限流

具体措施:
a21. 采用加载动画,提高用户的忍耐等待时间.
a22. 提交按钮添加强制等待时间机制.

c.关闭重试

[b]2) 改进缓存模式[/b]
a.缓存预加载
b.同步改为异步刷新

3) 服务自动扩容

a.AWS的auto scaling

4) 服务调用者降级服务

a.资源隔离:主要是对调用服务的线程池进行隔离.

b.对依赖服务进行分类

依赖服务分为: 强依赖和若依赖. 强依赖服务不可用会导致当前业务中止,而弱依赖服务的不可用不会导致当前业务的中止.

c.不可用服务的调用快速失败

一般通过 超时机制, 熔断器 和熔断后的 降级方法 来实现

[size=medium][color=red][b]4.解决方案:[/b][/color][/size]
[b]1)使用Hystrix预防服务雪崩[/b]

2)Netflix的 Hystrix是一个帮助解决分布式系统交互时超时处理和容错的类库,
它同样拥有保护系统的能力

3)Hystrix的设计原则包括:资源隔离、熔断器、命令模式

[size=large][b]二.示例[/b][/size]


@HystrixCommand(fallbackMethod = "findOrderFallback", commandProperties = {
//timeoutInMilliseconds 使用线程隔离时,调用超时时间
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
})
public String findOrder(Long userId,String orderNo) throws InterruptedException {
Random random = new Random();
sleepRandom = random.nextInt(2000);
System.out.println("sleepRandom="+sleepRandom);
Thread.sleep(sleepRandom);
ConsumerBeehiveUser user = findById(userId);
if (user != null) {
return user.getUsername() + " 的订单" + orderNo + " 找到啦!sleepRandom="+sleepRandom;
}
return "用户不存在!sleepRandom="+sleepRandom;
}

public String findOrderFallback(Long userId, String orderNo) {
return "订单查找失败!sleepRandom="+sleepRandom;
}



@SpringBootApplication
@EnableDiscoveryClient //开启eureka服务
@EnableFeignClients //开启feigin注解
@EnableCircuitBreaker //开启Hystrix @EnableCircuitBreaker或@EnableHystrix
@EnableHystrixDashboard //开启dashboard图形监控
public class ConsumerBeehiveApplication {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
//用于调用"提供者"的方法
return new RestTemplate();
}

public static void main(String[] args) {
SpringApplication.run(ConsumerBeehiveApplication.class, args);
}
}


[size=medium][b]command有四种获取结果的方式:[/b][/size]
1.单一的结果execute
2.异步的结果queue
3.多个结果toObservable/observe(返回observable发射源)
[b]4.相应的fallback也可以设置成异步和同步[/b]

[color=red][b]Hystrix的主要目标是保护应用线程,而且fallbacks也有可能在调用者线程中,[/b][/color]Hystrix需要限制并发的数量,当达到数量时无论多少fallback都不再运行了,就直接返回HystrixRuntimeException。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Hystrix是一个用于处理分布式系统的延迟和容错的库。它通过隔离服务之间的访问点,防止级联故障,并提供了一个备用方案,以便在出现故障时继续运行。Hystrix通过实现断路器模式来实现这些功能,这意味着它可以在服务之间建立一个断路器,以便在服务出现故障时自动切换到备用方案。 ### 回答2: Spring Cloud Hystrix是基于Netflix Hystrix的容错框架,为微服务提供了服务降级、服务熔断、服务限流等容错机制,以确保微服务在面临异常情况时,能够保持高可用性和稳定性。 在微服务架构中,服务之间的调用很容易受到网络波动、服务不可用、资源限制等影响,这时候如果不进行容错处理,就可能会导致整个系统崩溃。Spring Cloud Hystrix通过引入断路器的概念,可以提供一种优雅的容错处理方式。当某个服务出现故障或延迟时,断路器会立刻打开,停止对该服务的调用,降低对该服务的压力,保持系统的稳定性。 除了断路器外,Spring Cloud Hystrix还提供了线程池隔离、信号量隔离、缓存预处理等机制,以更好地保护系统。如果采用线程隔离,可以让请求在独立的线程中执行,从而防止请求的问题影响到其他请求。信号量隔离通过限制并发数,达到在负载高峰期或请求过多时,自我调节的目的。 在使用方面,Spring Cloud Hystrix也非常简单。只需在服务调用处添加@HystrixCommand注解,指定服务降级方法,就可以完成调用端的服务降级处理。对于其他Hystrix特性,也可以通过在配置文件中进行配置。 总而言之,Spring Cloud Hystrix为微服务架构提供了一种高效可靠的容错机制,可以在服务出现问题时,从容松手,保证系统的鲁棒性和扩展性。 ### 回答3: Spring Cloud Hystrix是一种开源的断路器模式实现,可用于构建分布式系统和微服务。它可以防止由于一个服务故障或超时导致整个系统崩溃。 在分布式系统中,一个服务的故障可能会导致整个系统的连锁反应。这就是为什么需要HystrixHystrix可以监视服务调用的结果,如果服务出现故障,它会强制断路器并替代其他服务并返回一个错误响应。 服务故障可能不仅仅是由于服务器故障,还包括超时,网络故障等原因。Hystrix 可以配置降级策略,当服务出现故障时,可以返回一些默认值或者备用数据,使得服务的调用方不至于完全失败。如果这些降级策略的执行时间过长,超出了阈值,那么Hystrix会自动熔断该服务,以免该服务继续产生故障影响到整个系统。 Hystrix可以同时监控多个服务,以避免整个系统受到单个服务故障的影响。如果某个服务出现问题,Hystrix会自动将该服务的请求转向其他可用的服务,以确保业务服务的高可用性。 在开发过程中,Hystrix虽然具有强大的监控能力,但同时也需要注意它会增加系统的负担,因此需要根据需求进行合理的配置。使用Hystrix需要在Spring Cloud应用中增加相应的依赖,同时在应用代码中使用@HystrixCommand注解对需要监控的服务进行定义。对服务的降级策略可以通过@Service注解中的fallback属性来定义。 总之,Hystrix提供了一种有力的方式来保证服务调用的稳定性,并确保系统的高可用性。它使得微服务架构更加健壮和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值