雪崩效應java
在微服務架構中一般會有多個服務層調用,大量的微服務經過網絡進行通訊,從而支撐起整個系統。各個微服務之間也不免存在大量的依賴關係。然而任何服務都不是100%可用的,網絡每每也是脆弱的,因此不免有些請求會失敗。基礎服務的故障致使級聯故障,進而形成了整個系統的不可用,這種現象被稱爲服務雪崩效應。服務雪崩效應描述的是一種因服務提供者的不可用致使服務消費者的不可用,並將不可用逐漸放大的過程。git
Netflix Hystrix斷路器github
Netflix的Hystrix類庫實現了斷路器模式,在微服務架構中有多個層的服務調用。一個低水平的服務羣中一個服務掛掉會給用戶致使級聯失效。調用一個特定的服務達到必定閾值(在Hystrix裏默認是5秒內20個失敗),斷路由開啓而且調用沒有成功的。開發人員可以提供錯誤緣由和開啓一個斷路由回調。spring
斷路器簡介網絡
Netflix has created a library called Hystrix that implements the circuit breaker pattern. In a microservice architecture it is common to have multiple layers of service calls.架構
—-摘自官網app
Netflix已經建立了一個名爲Hystrix的庫來實現斷路器模式。 在微服務架構中,多層服務調用是很是常見的。ide
較底層的服務若是出現故障,會致使連鎖故障。當對特定的服務的調用達到一個閥值(hystric 是5秒20次) 斷路器將會被打開。微服務
斷路打開後,可用避免連鎖故障,fallback方法能夠直接返回一個固定值。ui
使用Hystrix
第一步:
POM添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
Application入口main方法上增長@EnableCircuitBreaker註解
第二步:
基於RestTemplate的調用方式集成:
在方法上加上@HystrixCommand,並指定fallbackMethod方法。
@Service public class HelloService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "hiError") public String hiService(String name) { return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class); } public String hiError(String name) { return "hi,"+name+",sorry,error!"; } }
基於Feign的方式:
在SchedualServiceHi接口的註解中加上fallback的指定類就好了:
@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class) public interface SchedualServiceHi { @RequestMapping(value = "/hi",method = RequestMethod.GET) String sayHiFromClientOne(@RequestParam(value = "name") String name); }
SchedualServiceHiHystric類:
@Component public class SchedualServiceHiHystric implements SchedualServiceHi { @Override public String sayHiFromClientOne(String name) { return "sorry "+name; } }
果使用feign不想用斷路器的話,能夠在配置文件中關閉它,配置以下:
feign.hystrix.enabled=false
第三步:
一些通用配置:
參考官網:https://github.com/Netflix/Hystrix/wiki/Configuration
Maven示例:
https://github.com/easonjim/spring-cloud-demo/tree/master/ZooKeeper
參考:
https://zhuanlan.zhihu.com/p/26426835(以上內容部份內容轉自此篇文章)
http://blog.csdn.net/w_x_z_/article/details/53444199(以上內容部份內容轉自此篇文章)