第十四节--Hystrix断路器

是什么?
 
目前Hystrix已经停止更新,不推荐使用,但是它的设计比较优秀,后面的断路器都是根据它设计来的
 
resilience4j 国外使用多,虽然是官网推荐( [rɪˈzɪliəns]) ,  sentinel国内使用多( [ˈsentɪnl]) 来替换Hystrix
 

能干嘛?
  服务降级
  服务熔断
  接近实时的监控 等。
 
 

 
Hystrix重要概念
  你说用过Hystrix,用在那里?
    1  服务降级:服务器忙,请稍后再试,不让客户等待并立刻返回一个友好提示,fallback
                        那些情况会出现降级:
                          a: 程序运行异常
                          b: 超时(多人访问并发会超时或查询数据量大等等)
                          c:  服务熔断触发服务降级, d: 线程池/信号量打满也会导致服务降级
    2  服务熔断: 类比保险丝达到最大服务访问后,直接拒绝访问,拉匝限电,然后调用服务降级的方法并返回友好提示(就是保险丝)
    3  服务限流:秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行
 

 
代码开始
 第一步:新建提供者工程cloud-provider-hystrix-payment8001,pom.xml文件,
<!--hystrix-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

第二步:applicaiton.yml文件

server:
  port: 8001


spring:
  application:
    name: cloud-hystrix-payment-service #eureka对外暴露的微服务名字
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/springcloud?useUnicode=true&characterEncoding=utf8
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 30000


mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations:
    - classpath:mybatis/mapper/payment.xml
  type-aliases-package: com.hx.entity #所有entity别名所在的包


eureka:
  instance:
    instance-id: cloud-hystrix-provider-payment8001 #改变客户端在服务端显示的名称
    prefer-ip-address: true #访问路径显示IP地址
  client: #讲客户端注册到服务器
    service-url:
      #defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/,http://eureka7003:7003/eureka/
      defaultZone: http://eureka7001:7001/eureka/,http://eureka7002:7002/eureka/
其它service,controller都和其它提供者provider一致,测试成功之后
 

 
JMeter高并发压测后卡顿?
  JMeter: Java应用而设计的负载测试功能行为和测量性能。它最初是为测试Web应用程序而设计的,但此后已扩展到其他测试功能
 
1 .去官网下载JMeter: 进入bin目录,运行jmeter.bat,开启JMeter,来2万个并非压死8001,20000个请求都去访问/admin/findPaymentList
2 .发送高并发请求之后,再来一个请求访问admin/findPaymentById ,会看见卡顿
    
 
3 .原因:tomcat的默认工作线程数被打满了(默认是10个线程),没有多余的线程来分解压力和处理
  8001提供者自测都通不过,出现卡顿,如果这时80也来访问,那消费者只能干等,最终导致消费端80不满意,服务端8001直接被拖死
 
 

 
如何解决?虽然服务端卡顿,但是让客户端访问服务端时不出现卡顿现象
解决的要求:
    1  .超时导致服务变慢(转圈),超时不再等待
    2  .出错(宕机或程序运行出错),出错要有兜底
 
解决: 服务8001超时了,调用者80不能一直等待,必须有服务降级
           服务8001 down机了,调用者80不能一直卡死等待,必须有服务降级
           服务8001 OK,调用者80自己出现故障或有自我要求(自己的等待时间小于服务提供者),自己处理降级
 
第一步:新建工程cloud-consumer-feign-hystrix-order80 ,pom.xml文件
 
 
 
posted @ 2020-09-16 22:31  hexu_blog  阅读(106)  评论(0编辑  收藏  举报