- 浏览: 578035 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
一、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的设计原则包括:资源隔离、熔断器、命令模式
二.示例
command有四种获取结果的方式:
1.单一的结果execute
2.异步的结果queue
3.多个结果toObservable/observe(返回observable发射源)
4.相应的fallback也可以设置成异步和同步
Hystrix的主要目标是保护应用线程,而且fallbacks也有可能在调用者线程中,Hystrix需要限制并发的数量,当达到数量时无论多少fallback都不再运行了,就直接返回HystrixRuntimeException。
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。
发表评论
文章已被作者锁定,不允许评论。
-
Spring BeanFactoryPostProcessor和BeanPostProcessor的区别
2018-11-14 15:40 682链接:https://blog.csdn.net/caihai ... -
spring BeanPostProcessor理解
2018-11-14 11:31 296链接:https://blog.csdn.net/ginkgo ... -
Spring 源码解析之Initializer
2018-11-14 11:27 414链接:https://blog.csdn.net/ktlife ... -
spring transaction同一个类不回滚解决方法
2018-10-11 10:59 7401.修改配置文件 <aop:aspectj-autopr ... -
Spring @Transaction学习
2018-10-08 10:36 2671.考虑有下面这么一个类 public class Foo ... -
spring mvc i18n国际化学习(spring:message)
2018-06-09 09:35 610spring.xml文件中配置: <!-- 存储区域 ... -
Spring Boot Oauth2.0授权服务器
2018-05-11 14:19 1617什么是OAuth? OAuth(Open Authoriza ... -
Spring Boot @Import注解(将指定类实例注入到IOC容器中)
2018-05-09 10:20 1572SpringBoot 的 @Import 用于将指定的类实例注 ... -
Spring Boot @Conditional注解
2018-05-09 10:15 1794Spring Boot的强大之处在于使用了Spring 4框架 ... -
Spring Boot自定义starter pom实例(/META-INFO/spring.factory文件)
2018-05-09 09:48 1088自定义starter pom 自己实现一个简单的例子,当某个类 ... -
Spring Boot自动配置原理(@Conditional @Import)
2018-04-26 14:45 1273Springboot的自动配置是SpringBoot的关键,主 ... -
Spring Boot优缺点总结
2018-04-16 10:25 1509优点: 1.去除了大量的xml配置文件 2.简化 ... -
SpringBoot JPA @Transaction 知识学习
2018-03-16 09:09 734一、事务相关概念 1、事务的特点 原子性:事务是一个原子操 ... -
Sprint @Query注解的用法(nativeQuery=true/false)(Spring Data JPA)
2018-03-15 16:33 35881. 一个使用@Query注解的简单例子 @Query(val ... -
Spring Boot JpaRepository知识学习(Spring Data JPA)
2018-03-14 11:17 16241.Spring Data所解决的问题 Spring Dat ... -
SpringCloud @LoadBalanced注解学习
2018-03-13 09:48 2169当时我们说开启负载均衡很简单,只需要在RestTemplate ... -
Spring Boot配置方式(java配置和注解配置)
2018-03-12 15:09 1082Java配置 从Spring 3.x开始,Spring提供了J ... -
java RestTemplate访问restful服务
2018-03-01 15:02 1574REST的基础知识 当谈论REST时,有一种常见的错误就是将其 ... -
SpringCloud | 第七篇: 高可用的服务注册中心
2018-02-26 14:31 447文章 第一篇: 服务的注册与发现(Eureka) 介绍了服务注 ... -
SringCloud | 第六篇: 分布式配置中心(Spring Cloud Config)
2018-02-26 09:13 376一、简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文 ...
相关推荐
spring cloud hystrix通过服务隔离、熔断、降级等手段控制依赖服务的延迟与失败。
springcloud hystrix 断路由 http://knight-black-bob.iteye.com/blog/2356431
springcloud hystrix jar包,java -jar xx.jar,小熊界面
Spring Cloud Netfix Hystrix断路器例子工程。使用Spring Cloud Netflix Hystrix以及Spring RestTemplate或Spring Cloud Netflix Feign实现断路器模式。
spring cloud hystrix &&dashboard源码解读
SpringCloud Hystrix服务熔断
springcloud hystrix+feign
spring cloud hystrix 服务容错保护例子,加上Eureka server就可以直接运行了。如果出现错误,会调用指定的方法
Spring Cloud(Hystrix)使用,通过代码学习Spring Cloud(Hystrix)使用.。
Spring Cloud Hystrix 实现了断路器、线路隔离等一系列服务保护功能(整合例子,包能运行)
spring cloud
主要介绍了Spring Cloud Hystrix异常处理方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
详细讲解了如何在Spring Cloud中使用Hystrix,如何将Hystrix整合到Feign中
主要介绍了Spring Cloud Hystrix 线程池队列配置(踩坑),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring cloud eureka zuul ribbon hystrix feign config 示例代码
feign中包含了hystrix以及ribbon,即feign在不导入hystrix和ribbon的依赖下也能完成他们所能实现的功能,当然,如果想使用hystrix和ribbon自带的注解以及配置,必须导入依赖才可以,feign结合hystrix实现熔断+降级,...
ribbon 就是客户端负载均衡,根据配置的负载均衡策略进行请求,如果同一请求的数量较大时,需要将请求合并,而且每一个请求需要进行线程隔离,也就是我们hystrix 出场了,这是我们按照需求分析的三个组件的作用,...
在启动类上添加@EnableCircuitBreaker来开启Hystrix的断路器功能创建UserHystrixController接口用于调用user-se
10.Spring Cloud中的断路器Hystrix 11.Spring Cloud自定义Hystrix请求命令 12.Spring Cloud中Hystrix的服务降级与异常处理 13.Spring Cloud中Hystrix的请求缓存 14.Spring Cloud中Hystrix的请求合并 15.Spring ...