因爲網絡緣由或者自身的緣由,服務並不能保證100%可用
,若是單個服務出現問題
,調用這個服務就會出現線程阻塞
,此時如有大量的請求涌入,Servlet容器的線程資源會被消耗完畢,致使服務癱瘓。服務與服務之間的依賴性
,故障會傳播,會對整個微服務系統形成災難性的嚴重後果,這就是服務故障的「雪崩」效應
。
雪崩應對策略:java
Nginx
的高性能, 目前一線互聯網公司大量採用Nginx+Lua
的網關進行流量控制, 由此而來的OpenResty
也愈來愈熱門. 使用OpenResty
,其是由Nginx核心
加不少第三方模塊組成,其最大的亮點是默認集成了Lua開發環境
,使得Nginx
能夠做爲一個Web Server
使用。 藉助於Nginx
的事件驅動模型
和非阻塞IO
,能夠實現高性能的Web應用程序。OpenResty
提供了大量組件如Mysql、Redis、Memcached
等等,使在Nginx
上開發Web應用
更方便更簡單。目前在京東如實時價格、秒殺、動態服務、單品頁、列表頁等都在使用Nginx+Lua
架構,其餘公司如淘寶、去哪兒網等。基於Netflix的開源框架 Hystrix實現的 框架目標在於經過控制那些訪問遠程系統、服務和第三方庫的節點,從而對延遲和故障提供更強大的容錯能力。Hystrix具有了服務降級、服務熔斷、線程隔離、請求緩存、請求合併以及服務監控等強大功能。
git
<!-- hystrix 斷路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
複製代碼
restTempate集成hystrixgithub
@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class RibbonConsumerApplication {
@LoadBalanced
@Bean
RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
}
}
複製代碼
Feign是自帶斷路器的
,若是在Dalston版本
的,默認是沒有打開的,經過配置打開spring
feign:
hystrix:
enabled: true
複製代碼
@HystrixCommand 代表該方法爲hystrix包裹,能夠對依賴服務進行隔離、降級、快速失敗、快速重試等等
sql
fallbackMethod
降級方法commandProperties
普通配置屬性,能夠配置HystrixCommand對應屬性,例如採用線程池仍是信號量隔離、熔斷器熔斷規則等等ignoreExceptions
忽略的異常,默認HystrixBadRequestException不計入失敗groupKey()
組名稱,默認使用類名稱commandKey
命令名稱,默認使用方法名restTemplate配置使用緩存
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "defaultStores")
@GetMapping(value = "/hello")
public String hello() {
return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
}
public String defaultStores() {
return "Ribbon + hystrix ,提供者服務掛了";
}
}
複製代碼
feign配置使用網絡
@EnableHystrix
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class FeignConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignConsumerApplication.class, args);
}
}
複製代碼
@FeignClient(value ="eureka-provider",fallbackFactory = HystrixClientFallbackFactory.class)
public interface HomeClient {
@GetMapping("/")
String consumer();
}
複製代碼
@Component
public class HystrixClientFallbackFactory implements FallbackFactory<HomeClient> {
@Override
public HomeClient create(Throwable throwable) {
return () -> "feign + hystrix ,提供者服務掛了";
}
}
複製代碼
Hystrix Dashboard
是做爲斷路器狀態的一個組件,提供了數據監控和友好的圖形化界面。架構
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
複製代碼
在程序的入口加上@EnableHystrixDashboard
註解,開啓HystrixDashboard
app
在github
上有關於Spring Cloud
完整的部署。
其它相關文章
Spring cloud(1)-簡介以及選擇
Spring cloud(2)-服務發現(Eureka,Consul)
Spring cloud(3)-負載均衡(Feign,Ribbon)
Spring cloud(4)-熔斷(Hystrix)
Spring cloud(5)-路由網關(Zuul)
Spring cloud(6)-配置管理及刷新(Config,Bus)
最後,給個 star 吧~
我的博客~
簡書~負載均衡