企业做网站怎么做,高校档案室网站建设,正规的网页制作,怎建网站一、介绍#xff1a;
1、雪崩#xff1a; 多个微服务之间调用的时候#xff0c;假如微服务A调用微服务B和微服务C#xff0c;微服务B和微服务C又调用其他的微服务#xff0c;这就是所谓的扇出。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用
1、雪崩 多个微服务之间调用的时候假如微服务A调用微服务B和微服务C微服务B和微服务C又调用其他的微服务这就是所谓的扇出。如果扇出的链路上某个微服务的调用响应的时间过长或者不可用对微服A的调用就会占用越来越多的系统资源进而引起系统崩溃即雪崩效应。对于高流量的应用来说单一的后端依赖可能会导致所有的服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是这些应用程序还可能导致服务之间的延迟增加备份队列线程和其他系统资源紧张导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理以便单个依赖关系的失败不能取消整个应用程序或系统。所以通常当一个模块下的某个实例失败后这时候这个模块依然还会接收流量然后这个有问题的模块还调用了其他的模块这样就会发生级联故障或者叫雪崩。
2、hystrix概念
①Hystrix是一个用于处理分布式系统的延迟和容错的开源库可以保证一个服务出现故障时不会导致整个系统出现雪崩效应以提高分布式系统弹性
②作为“断路器”在一个服务出现故障时可以通过短路器监控返回一个可以处理的响应结果保证服务调用线程不会长时间被占用避免故障蔓延。
3、作用
1服务降级
服务出现故障时给故障服务降级到事先准备好的故障处理结果将此结果返回给服务消费者如客户端访问服务1服务1调用服务2服务2出现故障Hystrix服务降级返回一个可以处理的结果给服务1服务1再以友好的错误界面返回给客户端。
主要通过HystriCommand注解方法实现其中有两个关键参数 fallbackMethod指定服务降级后调用方法降级方法出参入参一定要和controller方法一致 commandProperties相关参数。
2服务熔断参数设置
①circuitBreaker.enabled是否开启熔断②circuitBreaker.requestVolumeThreshold当前服务失败几次后开启断路默认20次③circuitBreaker.sleepWindowInMilliseconds设置断路时间过了该时间后会尝试恢复在断路时间内即使请求正确也会走降级方法 熔断类型 ①熔断打开 打开后在此时间内不会对该服务进行调用而是直接访问降级方法。通过设置熔断时间当达到该时间后会尝试恢复该服务。
②熔断关闭 熔断关闭代表服务正常不会干扰正常服务调用。
③熔断半开 熔断半开时请求可以访问服务若请求正常访问则熔断会关闭若请请求不正常继续熔断调用降级方法。 4、使用介绍
1pom依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId/dependency
2EnableCircuitBreaker类注解项目启动类加上此注解表示开启Hystrix。
二、服务降级demo服务提供者、服务消费者都可以进行自身降级。在之前的基础上
1、myspringcloud-eureka-client服务提供者组件降级
1加上pom依赖
2加上EnableCircuitBreaker注解
SpringBootApplication
EnableEurekaClient
MapperScan(com.demo.cloud.dao)
EnableCircuitBreaker
public class MyEurekaClientApplication {public static void main(String args[]){SpringApplication.run(MyEurekaClientApplication.class,args);}
}
3 接口降级
package com.demo.cloud.controller;RequestMapping(/test)
RestController
public class TestApiController {Value(${server.port})private String currPort;HystrixCommand(fallbackMethod TimeoutHandler, commandProperties {//2秒钟以内就是正常的业务逻辑HystrixProperty(name execution.isolation.thread.timeoutInMilliseconds, value 2000)})GetMapping(timeout)public String timeout() {try {//睡眠3秒TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}return 服务提供者正常返回;}//降级后方法上面方法出问题,我来处理返回一个出错信息public String TimeoutHandler() {return 我是服务提供者当前不可用请稍后再试;}
}此时访问localhost:2222/myService/test/timeout 2、服务消费者myspringcloud-eureka-ribbon组件降级步骤和上面差不多不重复了看接口降级 RequestMapping(/findByUserName)HystrixCommand(fallbackMethod TimeoutHandler, commandProperties {//2秒钟以内就是正常的业务逻辑HystrixProperty(name execution.isolation.thread.timeoutInMilliseconds, value 2000)})public UserDTO findByUserName(String username){try {//睡眠3秒TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {e.printStackTrace();}HashMapString,String paramMap new HashMap();paramMap.put(username,username);UserDTO userDTO restTemplate.getForObject(REST_URL_PREFIX/user/findByUserName?username{username},UserDTO.class,paramMap);return userDTO;}//降级后方法上面方法出问题,我来处理返回一个出错信息public UserDTO TimeoutHandler(String username) {System.out.println(我是服务消费者当前不可用请稍后再试);return null;} 可以看到返回为空成功调用了降级方法。
三、服务熔断