欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix

這篇文章主要講解了“如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix”吧!

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了柳南免費(fèi)建站歡迎大家使用!

一、Hystrix斷路器

1、Hystrix是什么

分布式系統(tǒng)面臨的問(wèn)題

復(fù)雜分布式體系結(jié)構(gòu)中的應(yīng)用程序有數(shù)十個(gè)依賴關(guān)系,每個(gè)依賴關(guān)系在某些時(shí)候?qū)⒉豢杀苊獾厥 ?

服務(wù)雪崩
多個(gè)微服務(wù)之間調(diào)用的時(shí)候,假設(shè)微服務(wù)A調(diào)用微服務(wù)B和微服務(wù)C,微服務(wù)B和微服務(wù)C又調(diào)用其它的微服務(wù),這就是所謂的“扇出”。如果扇出的鏈路上某個(gè)微服務(wù)的調(diào)用響應(yīng)時(shí)間過(guò)長(zhǎng)或者不可用,對(duì)微服務(wù)A的調(diào)用就會(huì)占用越來(lái)越多的系統(tǒng)資源,進(jìn)而引起系統(tǒng)崩潰,所謂的“雪崩效應(yīng)”.
 
對(duì)于高流量的應(yīng)用來(lái)說(shuō),單一的后端依賴可能會(huì)導(dǎo)致所有服務(wù)器上的所有資源都在幾秒鐘內(nèi)飽和。比失敗更糟糕的是,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加,備份隊(duì)列,線程和其他系統(tǒng)資源緊張,導(dǎo)致整個(gè)系統(tǒng)發(fā)生更多的級(jí)聯(lián)故障。這些都表示需要對(duì)故障和延遲進(jìn)行隔離和管理,以便單個(gè)依賴關(guān)系的失敗,不能取消整個(gè)應(yīng)用程序或系統(tǒng)。
 
 
備注:一般情況對(duì)于服務(wù)依賴的保護(hù)主要有3中解決方案:
 
(1)熔斷模式:這種模式主要是參考電路熔斷,如果一條線路電壓過(guò)高,保險(xiǎn)絲會(huì)熔斷,防止火災(zāi)。放到我們的系統(tǒng)中,如果某個(gè)目標(biāo)服務(wù)調(diào)用慢或者有大量超時(shí),此時(shí),熔斷該服務(wù)的調(diào)用,對(duì)于后續(xù)調(diào)用請(qǐng)求,不在繼續(xù)調(diào)用目標(biāo)服務(wù),直接返回,快速釋放資源。如果目標(biāo)服務(wù)情況好轉(zhuǎn)則恢復(fù)調(diào)用。
 
(2)隔離模式:這種模式就像對(duì)系統(tǒng)請(qǐng)求按類型劃分成一個(gè)個(gè)小島的一樣,當(dāng)某個(gè)小島被火少光了,不會(huì)影響到其他的小島。例如可以對(duì)不同類型的請(qǐng)求使用線程池來(lái)資源隔離,每種類型的請(qǐng)求互不影響,如果一種類型的請(qǐng)求線程資源耗盡,則對(duì)后續(xù)的該類型請(qǐng)求直接返回,不再調(diào)用后續(xù)資源。這種模式使用場(chǎng)景非常多,例如將一個(gè)服務(wù)拆開(kāi),對(duì)于重要的服務(wù)使用單獨(dú)服務(wù)器來(lái)部署,再或者公司最近推廣的多中心。
 
(3)限流模式:上述的熔斷模式和隔離模式都屬于出錯(cuò)后的容錯(cuò)處理機(jī)制,而限流模式則可以稱為預(yù)防模式。限流模式主要是提前對(duì)各個(gè)類型的請(qǐng)求設(shè)置最高的QPS閾值,若高于設(shè)置的閾值則對(duì)該請(qǐng)求直接返回,不再調(diào)用后續(xù)資源。這種模式不能解決服務(wù)依賴的問(wèn)題,只能解決系統(tǒng)整體資源分配問(wèn)題,因?yàn)闆](méi)有被限流的請(qǐng)求依然有可能造成雪崩效應(yīng)。
	Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲和容錯(cuò)的開(kāi)源庫(kù),在分布式系統(tǒng)里,許多依賴不可避免的會(huì)調(diào)用失敗,比如超時(shí)、異常等,Hystrix能夠保證在一個(gè)依賴出問(wèn)題的情況下,不會(huì)導(dǎo)致整體服務(wù)失敗,避免級(jí)聯(lián)故障,以提高分布式系統(tǒng)的彈性。
 
	“斷路器”本身是一種開(kāi)關(guān)裝置,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后,通過(guò)斷路器的故障監(jiān)控(類似熔斷保險(xiǎn)絲),向調(diào)用方返回一個(gè)符合預(yù)期的、可處理的備選響應(yīng)(FallBack),而不是長(zhǎng)時(shí)間的等待或者拋出調(diào)用方無(wú)法處理的異常,這樣就保證了服務(wù)調(diào)用方的線程不會(huì)被長(zhǎng)時(shí)間、不必要地占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。

	服務(wù)降級(jí)、服務(wù)熔斷、服務(wù)限流、接近實(shí)時(shí)的監(jiān)控

2、服務(wù)熔斷

服務(wù)熔斷
 熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。
 當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長(zhǎng)時(shí),會(huì)進(jìn)行服務(wù)的降級(jí),進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用,快速返回"錯(cuò)誤"的響應(yīng)信息。當(dāng)檢測(cè)到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后恢復(fù)調(diào)用鏈路。在SpringCloud框架里熔斷機(jī)制通過(guò)Hystrix實(shí)現(xiàn)。Hystrix會(huì)監(jiān)控微服務(wù)間調(diào)用的狀況,當(dāng)失敗的調(diào)用到一定閾值,缺省是5秒內(nèi)20次調(diào)用失敗就會(huì)啟動(dòng)熔斷機(jī)制。熔斷機(jī)制的注解是@HystrixCommand。

=====處理異常業(yè)務(wù)邏輯=====provider client處理====

2.1>、參考cloud-provider-dept-8001新建cloud-provider-dept-8001-hystrix

2.2>、POM新增

<!--  hystrix 客戶端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

2.3>、YML修改

eureka:
  instance:
    instance-id: cloud-dept8001-hystirx   #eureka服務(wù)列表中顯示的名稱--hystix
    prefer-ip-address: true  #訪問(wèn)路徑可以顯示IP地址

2.4>、修改DeptController

	一旦調(diào)用服務(wù)方法失敗并排除了錯(cuò)誤信息后,會(huì)自動(dòng)調(diào)用@HystrixCommand標(biāo)注好的fallbackMethod調(diào)用類中的指定方法。

	@HystrixCommand(fallbackMethod = "getHystrixCommand")
    @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
    public Dept get(@PathVariable("id") Long id)
    {
        if(id>200){
            throw new RuntimeException();
        }
        return service.get(id);
    }

	//參數(shù)必須一樣
    public Dept getHystrixCommand(@PathVariable("id") Long id){
        return new Dept().setDname("這是一個(gè)null部門.");
    }

2.5>、修改主啟動(dòng)類APP

package com.lee.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableCircuitBreaker//對(duì)hystrixR熔斷機(jī)制的支持
@EnableEurekaClient //本服務(wù)啟動(dòng)后會(huì)自動(dòng)注冊(cè)進(jìn)eureka服務(wù)中
@SpringBootApplication
public class DeptProvider8001_APP_hystrix {

    public static void main(String[] args) {
        SpringApplication.run(DeptProvider8001_APP_hystrix.class,args);
    }
}

測(cè)試:

1>、啟動(dòng)3個(gè)Eureka服務(wù)
2>、啟動(dòng)cloud-provider-dept-8001-hystrix
3>、啟動(dòng)cloud-consumer-dept-80
4>、訪問(wèn)http://localhost:80/consumer/dept/get/9999
結(jié)果:
{"deptno":null,"dname":"這是一個(gè)null部門.","db_source":null}

思考:
服務(wù)熔斷,容易造成方法膨脹,如何解決呢?

3、服務(wù)降級(jí)

服務(wù)降級(jí)處理是在客戶端實(shí)現(xiàn)完成的,與服務(wù)端沒(méi)有關(guān)系

整體資源快不夠了,忍痛將某些服務(wù)先關(guān)掉,待渡過(guò)難關(guān),再開(kāi)啟回來(lái)。

===關(guān)閉不重要的服務(wù)===consumer client處理=====

3.1>、修改cloud-consumer-dept-80項(xiàng)目中個(gè)的service接口

根據(jù)已有的DeptFeignService接口,新建一個(gè)實(shí)現(xiàn)了FallbackFactory接口的類DeptFeignServiceFallbackFactory

package com.lee.cloud.feign.service;

import com.lee.cloud.entity.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class DeptFeignServiceFallbackFactory implements FallbackFactory<DeptFeignService> {

    @Override
    public DeptFeignService create(Throwable throwable) {
        return new DeptFeignService() {
            @Override
            public Dept get(long id) {
                return new Dept().setDname("服務(wù)已經(jīng)降級(jí)。。").setDb_source("服務(wù)降級(jí)  沒(méi)有找到  database.");
            }

            @Override
            public List<Dept> list() {
                return null;
            }

            @Override
            public boolean add(Dept dept) {
                return false;
            }
        };
    }

}

3.2>、DeptFeignService接口在注解@FeignClient中添加fallbackFactory屬性值

@FeignClient(value = "CLOUD-DEPT",fallbackFactory = DeptFeignServiceFallbackFactory.class)

3.3>、cloud-consumer-dept-80-feign工程修改yml

添加
feign:
	hystrix:
		enabled: true

測(cè)試:

1》、啟動(dòng)3個(gè)eureka服務(wù)
2》、啟動(dòng)服務(wù)提供者cloud-provider-dept-8001服務(wù),注意不是cloud-provider-dept-8001-hystrix
3》、啟動(dòng)cloud-consumer-dept-80-feign
4》、正常訪問(wèn)測(cè)試 http://localhost:80/consumer/dept/get/1
5》、故意關(guān)閉cloud-provider-dept-8001
6》、客戶端自己調(diào)用提示
結(jié)果:
{"deptno":null,"dname":"服務(wù)已經(jīng)降級(jí)。。","db_source":"服務(wù)降級(jí)  沒(méi)有找到  database."}
思考:
服務(wù)熔斷 和  服務(wù)降級(jí)   有什么區(qū)別?

【服務(wù)熔斷】
一般是某個(gè)服務(wù)故障或者異常引起,類似現(xiàn)實(shí)世界中的"保險(xiǎn)絲",當(dāng)某個(gè)異常條件被處罰,直接熔斷整個(gè)服務(wù),而不是一直等到此服務(wù)超時(shí)。

【服務(wù)降級(jí)】
所謂降級(jí),一般是從整體負(fù)荷考慮,就是當(dāng)某個(gè)服務(wù)熔斷之后,服務(wù)器將不再被調(diào)用。
此時(shí)客戶端可以自己準(zhǔn)備一個(gè)本地的fallback回調(diào),返回一個(gè)缺省值。
這樣做,雖然服務(wù)水平下降,但好歹可用,比直接掛掉要強(qiáng)。

4、服務(wù)監(jiān)控HystrixDashboard

	除了隔離依賴服務(wù)的調(diào)用以外,Hystrix還提供了準(zhǔn)實(shí)時(shí)的調(diào)用監(jiān)控(Hystrix Dashboard),Hystrix會(huì)持續(xù)地記錄所有通過(guò)Hystrix發(fā)起的請(qǐng)求的執(zhí)行信息,并以統(tǒng)計(jì)報(bào)表和圖形的形式展示給用戶,包括每秒執(zhí)行多少請(qǐng)求多少成功,多少失敗等。Netflix通過(guò)hystrix-metrics-event-stream項(xiàng)目實(shí)現(xiàn)了對(duì)以上指標(biāo)的監(jiān)控。Spring Cloud也提供了Hystrix Dashboard的整合,對(duì)監(jiān)控內(nèi)容轉(zhuǎn)化成可視化界面。

4.1>、新建module,cloud-consumer-dept-9001-hystirx-dashboard

4.2>、POM文件

<dependencies>
   <!-- 自己定義的api -->
   <dependency>
       <groupId>com.lee</groupId>
       <artifactId>cloud-api</artifactId>
       <version>${project.version}</version>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <!-- 修改后立即生效,熱部署 -->
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>springloaded</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
   </dependency>
   <!-- Ribbon相關(guān) -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-eureka</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-ribbon</artifactId>
   </dependency>
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-config</artifactId>
   </dependency>
   <!-- feign相關(guān) -->
   <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-feign</artifactId>
   </dependency>
   <!-- hystrix和 hystrix-dashboard相關(guān)-->
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-hystrix</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
   </dependency> 
  </dependencies>

4.3>、YML文件

server:
  port: 9001

4.4>、主啟動(dòng)類

package com.lee.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@EnableHystrixDashboard
@SpringBootApplication
public class DeptConsumer_DashBoard_9001_App {

    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_DashBoard_9001_App.class,args);
    }
}

4.5>、所有provider微服務(wù)提供者都需要添加監(jiān)控依賴

<!-- actuator監(jiān)控信息完善 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

測(cè)試:

1、啟動(dòng)cloud-consumer-dept-9001-hystrix-dashboard
訪問(wèn):http://localhost:9001/hystrix
2、啟動(dòng)3個(gè)eureka集群
3、啟動(dòng)cloud-provider-dept-8001-hystrix
	訪問(wèn):http://localhost8001/dept/list
4、http://localhost:8001/hystrix.stream
	delay:2000ms  title: demo1

如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix

如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix

感謝各位的閱讀,以上就是“如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

分享題目:如何理解SpringCloud中服務(wù)熔斷和降級(jí)Hystrix
網(wǎng)站鏈接:http://chinadenli.net/article24/jhjdje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站自適應(yīng)網(wǎng)站網(wǎng)站營(yíng)銷面包屑導(dǎo)航企業(yè)網(wǎng)站制作定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管