`

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

 
阅读更多
一、Hystrix说明
1.服务雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。

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

2.雪崩原因:
1) 服务提供者不可用

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

b.程序Bug

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

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

2) 重试加大流量

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

3) 服务调用者不可用

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

3.雪崩应对策略:

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

b.用户交互限流

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

c.关闭重试

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

3) 服务自动扩容

a.AWS的auto scaling

4) 服务调用者降级服务

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

b.对依赖服务进行分类

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

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

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

4.解决方案:
1)使用Hystrix预防服务雪崩

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

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

二.示例

@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);
    		}
	}


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

Hystrix的主要目标是保护应用线程,而且fallbacks也有可能在调用者线程中,Hystrix需要限制并发的数量,当达到数量时无论多少fallback都不再运行了,就直接返回HystrixRuntimeException。

















分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    springCloud学习手册.zip

    接下来,Hystrix是SpringCloud中用于实现断路器模式的重要组件,旨在防止服务雪崩效应。当某个服务因故障无法正常工作时,断路器会打开,阻止其他请求继续调用该服务,从而保护整个系统免受故障服务的影响。 Zuul和...

    尚硅谷周阳老师SpringCloud笔记

    Hystrix是SpringCloud中的断路器组件,它防止了服务雪崩效应,通过隔离请求和提供降级策略,确保系统的稳定性和可用性。学习Hystrix意味着要理解断路器模式,配置熔断规则,以及监控断路器状态。 SpringCloud ...

    SpringCloud项目源码下载.docx

    5. **Hystrix**:熔断器,用来防止服务间的依赖导致的雪崩效应,实现服务之间的隔离和容错。 6. **Zuul**:API网关,作为所有请求的入口,负责路由转发和过滤。 7. **Sleuth**:用于收集服务间的调用链路数据,便于...

    Spring Cloud思维导图. Spring Cloud知识点学习思维导图

    5. **断路器**:Hystrix 提供了容错机制,当服务不可用时,能防止雪崩效应,保护系统稳定性。 6. **服务间通信**:Feign 是一个声明式的 HTTP 客户端,简化了服务间的调用。 7. **智能路由**:Spring Cloud ...

    SpringCloud第二季脑图.rar

    3. **Spring Cloud Hystrix**:Hystrix是断路器模式的实现,用于防止服务雪崩效应,通过隔离服务调用和降级策略,确保系统的稳定性和可用性。 4. **Spring Cloud Zuul**:Zuul是边缘服务和动态路由组件,可以作为...

    尚硅谷SpringCloud第二季笔记

    3. **Hystrix**:断路器,用于防止服务雪崩效应。当某个服务因故障无法响应时,断路器打开,后续请求将直接返回失败,避免影响整个系统。 4. **Config Server**:配置中心,集中管理各个微服务的配置,支持动态刷新...

    spring cloud 实战教程

    Hystrix是Spring Cloud中的断路器组件,用于防止服务雪崩效应。通过Hystrix,我们可以监控服务的健康状态,当服务出现故障时,能快速隔离并恢复系统的稳定性。书中会介绍如何使用Hystrix实现熔断、降级和回退策略。 ...

    springcloud学习资料

    5. **断路器**:Hystrix是Netflix的一个断路器库,用于防止服务雪崩效应,当服务不可用或者响应时间过长时,Hystrix会打开断路,避免请求过多地堆积。 6. **数据访问与缓存**:集成MySQL数据库,可以学习如何在...

    SpringCloud学习代码

    Hystrix是SpringCloud中的容错管理工具,用于隔离服务之间的调用,防止因某个服务故障导致整个系统的雪崩效应。它提供了熔断、降级、隔离、监控等多种策略,确保在高并发场景下系统的稳定性和健壮性。 在学习这些...

    spring cloud 教程 pdf

    3. **断路器模式**:Hystrix是Spring Cloud实现断路器模式的主要组件,它能够防止服务雪崩效应,通过隔离请求、降级策略和超时机制来提高系统的容错能力。 4. **配置中心**:Spring Cloud Config提供了集中式的配置...

    SpringCloud周阳脑图

    3. **Hystrix**:Netflix开发的熔断器,用于处理服务间的调用失败,通过隔离请求和故障服务,防止服务雪崩效应,提高系统的整体容错能力。 4. ** Ribbon**:客户端负载均衡器,与Eureka结合使用,可以在客户端选择...

    springcloud培训视频完整版,用于就业培训的视频,由于文件过大,用百度网盘保存,让你快速学习springcloud

    3. **断路器**:Hystrix是Netflix开源的一个断路器库,用于防止服务雪崩效应。当服务调用出现故障时,断路器会打开,避免了故障服务对整个系统的持续影响。 4. **API Gateway**:SpringCloud Gateway是SpringCloud...

    springcloud项目Demo

    Hystrix能够防止服务雪崩效应,通过隔离请求、降级策略和超时控制来提高系统的容错能力。 4. **Ribbon**:客户端负载均衡器。Ribbon是Netflix提供的一个客户端负载均衡器,用于在客户端侧实现服务的负载均衡。 5. ...

    spring cloud系列博客完整源代码

    3. **断路器模式**:Hystrix 或 Resilience4j 如何防止雪崩效应,确保服务的稳定性。 4. **API 网关**:Zuul 或 Gateway 作为统一入口,处理路由、认证、限流等。 5. **配置管理**:Config Server 和 Client 提供...

    springcloud computeservice 服务提供者

    6. **Hystrix 断路器**: Hystrix 是 Netflix 开源的一个库,用于防止服务雪崩效应,通过断路器模式监控服务的健康状态,当服务不可用时,可以快速失败或降级到备用策略。 7. **Spring Cloud Gateway**: Spring ...

    springcloud例子

    Hystrix是一个强大的断路器库,可以防止服务雪崩效应。当某个服务因网络延迟或故障无法响应时,断路器会打开,避免后续请求阻塞,而是快速返回一个默认值或者错误信息,保证系统的整体可用性。 在这些项目中,你还...

    springcloud 视频资源连接(百度网盘提取)

    - **容错与限流**:借助 Hystrix 断路器机制,有效地避免了服务雪崩效应,增强了系统的健壮性。 - **API 网关**:使用 Zuul 作为统一的入口,实现了服务路由、权限控制等功能,降低了客户端与后端服务之间的耦合度。...

    springcloud教程.zip

    5. **断路器模式**:Hystrix是Netflix开源的一个断路器库,用于防止服务雪崩效应,当服务出现故障时,可以快速失败或者降级,保证系统的稳定性。 6. **配置中心**:Spring Cloud Config为微服务提供集中化的外部...

    Spring Cloud 学习示例代码

    Hystrix 是一个强大的断路器库,用于防止服务雪崩效应,保证系统的稳定性。Ribbon 是一个客户端负载均衡器,可以在服务消费者端进行负载均衡。 在学习 Spring Cloud 时,通常会从创建一个简单的 Eureka 服务器开始...

Global site tag (gtag.js) - Google Analytics