第十四节--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文件