国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringCloud學(xué)習(xí)(3)

monw3c / 1058人閱讀

摘要:服務(wù)雪崩效應(yīng)是一種因服務(wù)提供者的不可用導(dǎo)致服務(wù)消費(fèi)者的不可用并將不可用逐漸放大的過程。這種代理能夠記錄最近調(diào)用發(fā)生錯(cuò)誤的次數(shù),然后決定使用允許操作繼續(xù),或者立即返回錯(cuò)誤。這個(gè)自己持有的上下文默認(rèn)實(shí)現(xiàn)類也是。

?????本篇集成Hystrix,繼續(xù)搭建demo。

雪崩效應(yīng):
在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過程。

如果下圖所示:A作為服務(wù)提供者,B為A的服務(wù)消費(fèi)者,C和D是B的服務(wù)消費(fèi)者。A不可用引起了B的不可用,并將不可用像滾雪球一樣放大到C和D時(shí),雪崩效應(yīng)就形成了。

熔斷器:
熔斷器的原理很簡單,如同電力過載保護(hù)器。它可以實(shí)現(xiàn)快速失敗,如果它在一段時(shí)間內(nèi)偵測(cè)到許多類似的錯(cuò)誤,會(huì)強(qiáng)迫其以后的多個(gè)調(diào)用快速失敗,不再訪問遠(yuǎn)程服務(wù)器,從而防止應(yīng)用程序不斷地嘗試執(zhí)行可能會(huì)失敗的操作,使得應(yīng)用程序繼續(xù)執(zhí)行而不用等待修正錯(cuò)誤,或者浪費(fèi)CPU時(shí)間去等到長時(shí)間的超時(shí)產(chǎn)生。熔斷器也可以使應(yīng)用程序能夠診斷錯(cuò)誤是否已經(jīng)修正,如果已經(jīng)修正,應(yīng)用程序會(huì)再次嘗試調(diào)用操作。

熔斷器模式就像是那些容易導(dǎo)致錯(cuò)誤的操作的一種代理。這種代理能夠記錄最近調(diào)用發(fā)生錯(cuò)誤的次數(shù),然后決定使用允許操作繼續(xù),或者立即返回錯(cuò)誤。
熔斷器開關(guān)相互轉(zhuǎn)換的邏輯如下圖:

Hystrix熔斷器:
1.斷路器機(jī)制

斷路器很好理解, 當(dāng)Hystrix Command請(qǐng)求后端服務(wù)失敗數(shù)量超過一定比例(默認(rèn)50%), 斷路器會(huì)切換到開路狀態(tài)(Open). 這時(shí)所有請(qǐng)求會(huì)直接失敗而不會(huì)發(fā)送到后端服務(wù). 斷路器保持在開路狀態(tài)一段時(shí)間后(默認(rèn)5秒), 自動(dòng)切換到半開路狀態(tài)(HALF-OPEN). 這時(shí)會(huì)判斷下一次請(qǐng)求的返回情況, 如果請(qǐng)求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN). Hystrix的斷路器就像我們家庭電路中的保險(xiǎn)絲, 一旦后端服務(wù)不可用, 斷路器會(huì)直接切斷請(qǐng)求鏈, 避免發(fā)送大量無效請(qǐng)求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測(cè)并恢復(fù)的能力.

2.Fallback

Fallback相當(dāng)于是降級(jí)操作. 對(duì)于查詢操作, 我們可以實(shí)現(xiàn)一個(gè)fallback方法, 當(dāng)請(qǐng)求后端服務(wù)出現(xiàn)異常的時(shí)候, 可以使用fallback方法返回的值. fallback方法的返回值一般是設(shè)置的默認(rèn)值或者來自緩存.

3.資源隔離

在Hystrix中, 主要通過線程池來實(shí)現(xiàn)資源隔離. 通常在使用的時(shí)候我們會(huì)根據(jù)調(diào)用的遠(yuǎn)程服務(wù)劃分出多個(gè)線程池. 例如調(diào)用產(chǎn)品服務(wù)的Command放入A線程池, 調(diào)用賬戶服務(wù)的Command放入B線程池. 這樣做的主要優(yōu)點(diǎn)是運(yùn)行環(huán)境被隔離開了. 這樣就算調(diào)用服務(wù)的代碼存在bug或者由于其他原因?qū)е伦约核诰€程池被耗盡時(shí), 不會(huì)對(duì)系統(tǒng)的其他服務(wù)造成影響. 但是帶來的代價(jià)就是維護(hù)多個(gè)線程池會(huì)對(duì)系統(tǒng)帶來額外的性能開銷. 如果是對(duì)性能有嚴(yán)格要求而且確信自己調(diào)用服務(wù)的客戶端代碼不會(huì)出問題的話, 可以使用Hystrix的信號(hào)模式(Semaphores)來隔離資源.




我們?cè)趍ovie微服務(wù)中使用Hystirx,新建文件如下目錄

在controller中,可以直接使用Hystrix注解,并且自定義fallback函數(shù),當(dāng)請(qǐng)求后端服務(wù)出現(xiàn)異常的時(shí)候, 可以使用fallback方法返回的值.

 @GetMapping("/movie/{id}")
    @HystrixCommand(fallbackMethod = "fallbackMovie",commandProperties = @HystrixProperty(name = "execution.isolation.strategy",value = "semaphore"))
    public User findmovie(@PathVariable int id){

        return userFeignClient.find(id);
    }

    public User fallbackMovie(int id){
        User user=new User();
        user.setId(10);
        return  user;
    }

其中commandProperties = @HystrixProperty(name = "execution.isolation.strategy",value = "semaphore")的value Hystrix默認(rèn)為thread,
默認(rèn)使用線程池里隔離的線程,要想切換到調(diào)用者相同線程使用Spring Security的context,就要設(shè)置隔離策略為semaphore。
?????關(guān)于Spring父子容器context:
1.??首先,對(duì)于一個(gè)web應(yīng)用,其部署在web容器中,web容器提供其一個(gè)全局的上下文環(huán)境,這個(gè)上下文就是ServletContext,其為后面的spring IoC容器提供宿主環(huán)境;

2.??其次,在web.xml中會(huì)提供有contextLoaderListener。在web容器啟動(dòng)時(shí),會(huì)觸發(fā)容器初始化事件,此時(shí)contextLoaderListener會(huì)監(jiān)聽到這個(gè)事件,其contextInitialized方法會(huì)被調(diào)用,在這個(gè)方法中,spring會(huì)初始化一個(gè)啟動(dòng)上下文,這個(gè)上下文被稱為根上下文,即WebApplicationContext,這是一個(gè)接口類,確切的說,其實(shí)際的實(shí)現(xiàn)類是XmlWebApplicationContext。這個(gè)就是spring的IoC容器,其對(duì)應(yīng)的Bean定義的配置由web.xml中的context-param標(biāo)簽指定。在這個(gè)IoC容器初始化完畢后,spring以WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE為屬性Key,將其存儲(chǔ)到ServletContext中,便于獲取;

3.??再次,contextLoaderListener監(jiān)聽器初始化完畢后,開始初始化web.xml中配置的Servlet,這個(gè)servlet可以配置多個(gè),以最常見的DispatcherServlet為例,這個(gè)servlet實(shí)際上是一個(gè)標(biāo)準(zhǔn)的前端控制器,用以轉(zhuǎn)發(fā)、匹配、處理每個(gè)servlet請(qǐng)求。DispatcherServlet上下文在初始化的時(shí)候會(huì)建立自己的IoC上下文,用以持有spring mvc相關(guān)的bean。在建立DispatcherServlet自己的IoC上下文時(shí),會(huì)利用WebApplicationContext.ROOTWEBAPPLICATIONCONTEXTATTRIBUTE先從ServletContext中獲取之前的根上下文(即WebApplicationContext)作為自己上下文的parent上下文。有了這個(gè)parent上下文之后,再初始化自己持有的上下文。這個(gè)DispatcherServlet初始化自己上下文的工作在其initStrategies方法中可以看到,大概的工作就是初始化處理器映射、視圖解析等。這個(gè)servlet自己持有的上下文默認(rèn)實(shí)現(xiàn)類也是mlWebApplicationContext。初始化完畢后,spring以與servlet的名字相關(guān)(此處不是簡單的以servlet名為Key,而是通過一些轉(zhuǎn)換,具體可自行查看源碼)的屬性為屬性Key,也將其存到ServletContext中,以便后續(xù)使用。這樣每個(gè)servlet就持有自己的上下文,即擁有自己獨(dú)立的bean空間,同時(shí)各個(gè)servlet共享相同的bean,即根上下文(第2步中初始化的上下文)定義的那些bean。

feign中使用Hystrix:

feign客戶端

@FeignClient(name="userprovider",configuration = FeignClient.class,fallback = HystrixFallbackClient.class)
public interface UserFeignClient {
    @RequestMapping (value = "/user/{id}",method = RequestMethod.GET)
    public User find(@PathVariable("id") int id);
}

fallback的類HystrixFallbackClient實(shí)現(xiàn)fallback方法

@Component
public class HystrixFallbackClient implements UserFeignClient {


    @Override
    public User find(int id) {
        User user=new User();
        user.setId(1);
        return user;
    }
}

若想禁用某個(gè)feignClient的Hystrix可以更改feignClient的config,在里面返回feign.bulider,默認(rèn)為Hystrix的

FeignConfig:

@Configuration
public class FeignConfig {

    @Bean
    public Contract feignContract(){
         return new feign.Contract.Default();

    }
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder(){

        return  Feign.builder();
    }
}

如果需要訪問回退觸發(fā)的原因,Hystrix也提供fallbackfactory :

改寫UserFeignClient的屬性:

@FeignClient(name="userprovider",configuration = FeignClient.class,fallbackFactory = HystrixFallbackFactory.class)
public interface UserFeignClient {
    @RequestMapping (value = "/user/{id}",method = RequestMethod.GET)
    public User find(@PathVariable("id") int id);
}

創(chuàng)建HystrixFallbackFactory,和一個(gè)繼承UserFeignClient的接口

HystrixUserFeignClientWithFactory:

public interface HystrixUserFeignClientWithFactory extends UserFeignClient {
}

HystrixFallbackFactory:

@Component
public class HystrixFallbackFactory implements FallbackFactory{

    private static final Logger logger= LoggerFactory.getLogger(HystrixFallbackFactory.class);

    @Override
    public UserFeignClient create(Throwable throwable) {

        this.logger.info("異常原因?yàn)閧}",throwable.getMessage());
        return new HystrixUserFeignClientWithFactory() {

            @Override
            public User find(int id) {
                User user=new User();
                user.setId(0);
                return user;
            }
        };
    }
}

hystrix實(shí)時(shí)監(jiān)控可視化可以使用dashboard
eureka的pom添加
`

        org.springframework.cloud
        spring-cloud-starter-hystrix-dashboard

`

并給application添加注解@EnableHystrixDashboard,啟動(dòng)eureka,movie微服務(wù)(記得改UserFeignClient的fallback為fallbackfactory,刪除fallback屬性以及UserFeignClient實(shí)現(xiàn)類,不然報(bào)錯(cuò))訪問hystrix

先使用movie微服務(wù),hystrix才能打印日志記錄,訪問http://localhost:8088/hystrix...

然后在http://localhost:8761/hystrix,輸入http://localhost:8088/hystrix...地址,成功監(jiān)控

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67701.html

相關(guān)文章

  • java-study-springcloud-網(wǎng)絡(luò)資料-01-微服務(wù)是什么

    摘要:本系列網(wǎng)絡(luò)資料資料來源于網(wǎng)絡(luò),相關(guān)學(xué)習(xí)微服務(wù)與微服務(wù)架構(gòu)定義理解單一應(yīng)用程序劃分為一組小的服務(wù),每個(gè)服務(wù)有自己的進(jìn)程。 本系列(java-study-springcloud-網(wǎng)絡(luò)資料)資料來源于網(wǎng)絡(luò),springcloud相關(guān)學(xué)習(xí) 1、微服務(wù)與微服務(wù)架構(gòu) 定義:https://martinfowler.com/arti... showImg(https://segmentfault.c...

    JerryZou 評(píng)論0 收藏0
  • Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心

    摘要:實(shí)現(xiàn)配置和注冊(cè)中心最近,阿里開源的比較火,可以和和共用,對(duì)升級(jí)到非常的方便。只需要添加依賴,使用配置注冊(cè)中心地址即可。配置不生效,沒有使用注解刷新配置分清注冊(cè)中心和配置中心是兩個(gè)概念,需要配置兩個(gè)地址學(xué)會(huì)看源碼,看維基。 Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心 最近,阿里開源的nacos比較火,可以和springcloud和dubbo共用,對(duì)dubbo升級(jí)到springc...

    whinc 評(píng)論0 收藏0
  • 整理一下學(xué)習(xí)微服務(wù)springboot+springcloud+vue以來用到的好的博客

    摘要:調(diào)用百度實(shí)現(xiàn)圖像識(shí)別使用渲染導(dǎo)出的制作的超級(jí)炫酷的三維模型一個(gè)代碼庫本人本人瀏覽器調(diào)試及所有錯(cuò)誤代碼整合千峰超級(jí)好用的各種開發(fā)自學(xué)文檔這是它對(duì)應(yīng)的學(xué)習(xí)視頻使用教程詳細(xì)虛擬機(jī)安裝系統(tǒng)詳解版網(wǎng)易開源鏡像站在線數(shù)據(jù)互轉(zhuǎn)使 1.Java調(diào)用百度API實(shí)現(xiàn)圖像識(shí)別 2.使用Three.js渲染Sketchup導(dǎo)出的dae 3.three.js制作的超級(jí)炫酷的三維模型 4.three.js - 一...

    gitmilk 評(píng)論0 收藏0
  • 整理一下學(xué)習(xí)微服務(wù)springboot+springcloud+vue以來用到的好的博客

    摘要:調(diào)用百度實(shí)現(xiàn)圖像識(shí)別使用渲染導(dǎo)出的制作的超級(jí)炫酷的三維模型一個(gè)代碼庫本人本人瀏覽器調(diào)試及所有錯(cuò)誤代碼整合千峰超級(jí)好用的各種開發(fā)自學(xué)文檔這是它對(duì)應(yīng)的學(xué)習(xí)視頻使用教程詳細(xì)虛擬機(jī)安裝系統(tǒng)詳解版網(wǎng)易開源鏡像站在線數(shù)據(jù)互轉(zhuǎn)使 1.Java調(diào)用百度API實(shí)現(xiàn)圖像識(shí)別 2.使用Three.js渲染Sketchup導(dǎo)出的dae 3.three.js制作的超級(jí)炫酷的三維模型 4.three.js - 一...

    bluesky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<