成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Hystrix使用

harryhappy / 3114人閱讀

1. Hystrix是誰(shuí)?

Hystrix源于Netflix API團(tuán)隊(duì)在2011年啟動(dòng)的彈性工程工作,而目前它在Netflix每天處理著數(shù)百億的隔離線程以及數(shù)千億的隔離信號(hào)調(diào)用。該庫(kù)旨在通過控制那些訪問遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫(kù)的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。Hystrix具備擁有回退機(jī)制和斷路器功能的線程和信號(hào)隔離,請(qǐng)求緩存和請(qǐng)求打包,以及監(jiān)控和配置等功能。
目前托管在github上。

2. 為什么需要Hystrix?

在大中型分布式系統(tǒng)中,通常系統(tǒng)很多依賴(HTTP,Dubbo等),如果一個(gè)應(yīng)用不能對(duì)來(lái)自依賴的故障進(jìn)行有效處理,那該應(yīng)用本身就處在被拖垮的風(fēng)險(xiǎn)中。在一個(gè)高流量的網(wǎng)站中,某個(gè)單一的后端一旦發(fā)生延遲,將會(huì)在數(shù)秒內(nèi)導(dǎo)致所有應(yīng)用資源被耗盡。

例如:一個(gè)依賴30個(gè)服務(wù)的系統(tǒng),每個(gè)服務(wù)99.99%可用。
此系統(tǒng)的失敗率為1-99.99%的30次方 ≈ 0.3%
意味著一億次請(qǐng)求 會(huì)有 3,000,00次失敗
隨著服務(wù)依賴數(shù)量的變多,服務(wù)不穩(wěn)定的概率會(huì)成指數(shù)性提高.

Hystrix把服務(wù)調(diào)用統(tǒng)稱為依賴調(diào)用, Hystrix通過命令模式封裝依賴調(diào)用,每一個(gè)依賴調(diào)用封裝在HystrixCommand中,每個(gè)命令在Hystrix的線程池中運(yùn)行。另外可以對(duì)其配置分組名、線程組,使得不同的依賴可以分類在不同的線程組,隔離不同模塊的依賴,也可根據(jù)負(fù)載情況,配置不同組的線程數(shù)。Hystrix還提供一種熔斷器(CircuitBreaker)的機(jī)制,Hystrix可以通過設(shè)定的條件判斷該封裝的依賴調(diào)用是否可以正確調(diào)用,如果在一定時(shí)間內(nèi)調(diào)用失敗次數(shù)過多,則會(huì)熔斷自身,使得相同的調(diào)用無(wú)法執(zhí)行,待冷卻之后重新再試。

3. 如何使用?

1.pom.xml中加入依賴

  
     com.netflix.hystrix  
     hystrix-core  
     ${hystrix.version}  
  

2.繼承HystrixCommand,在run()方法中完成對(duì)依賴的調(diào)用:

public class CustomeCommand extends HystrixCommand {  
  
    protected CustomeCommand(String input) {  
    //設(shè)置HystrixCommand的屬性
        super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("CustomeGroup"))  
                .andCommandKey(HystrixCommandKey.Factory.asKey("CustomeKey"))  
                .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("CustomeThreadPool"))  
                .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()  
                        .withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.THREAD))  
                .andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter()  
                        .withCoreSize(10))  
        );  
   
    }  
  
    @Override  
    protected String run() throws Exception {
    //訪問真正的服務(wù)  
        return "hello World!";  
    }    
    //服務(wù)降級(jí)
    @Override  
    protected String getFallback() {  
        return "exeucute Falled";  
    }  
    //請(qǐng)求緩存  
    @Override  
    protected String getCacheKey() {  
        //  
    }  
}  
HystxixCommand支持如下的配置:

GroupKey:該命令屬于哪一個(gè)組,可以幫助我們更好的組織命令。
CommandKey:該命令的名稱
ThreadPoolKey:該命令所屬線程池的名稱,同樣配置的命令會(huì)共享同一線程池,若不配置,會(huì)默認(rèn)使用GroupKey作為線程池名稱。
CommandProperties:該命令的一些設(shè)置,包括斷路器的配置,隔離策略,降級(jí)設(shè)置,以及一些監(jiān)控指標(biāo)等。
ThreadPoolProerties:關(guān)于線程池的配置,包括線程池大小,排隊(duì)隊(duì)列的大小等。

3.調(diào)用HystrixCommand

        CustomeCommand command = new CustomeCommand();  
        String result = command.execute();  
HystrixCommand提供了3種執(zhí)行方式:

同步執(zhí)行:即一旦開始執(zhí)行該命令,當(dāng)前線程就得阻塞著直到該命令返回結(jié)果,然后才能繼續(xù)執(zhí)行下面的邏輯。當(dāng)調(diào)用命令的execute()方法即為同步執(zhí)行(內(nèi)部使用queue().get() )。
異步執(zhí)行:命令開始執(zhí)行會(huì)返回一個(gè)Future的對(duì)象,不阻塞后面的邏輯,開發(fā)者自己根據(jù)需要去獲取結(jié)果。當(dāng)調(diào)用HystrixCommand的queue()方法即為異步執(zhí)行。

        CustomeCommand command = new CustomeCommand();  
        Future result = command.queue();  
        while (!result.isDone()){  
            System.out.println("Do other things ..."); 
            } 

響應(yīng)式執(zhí)行:命令開始執(zhí)行會(huì)返回一個(gè)Observable 對(duì)象,開發(fā)者可以給給Obeservable對(duì)象注冊(cè)上Observer或者Action1對(duì)象,響應(yīng)式地處理命令執(zhí)行過程中的不同階段。當(dāng)調(diào)用HystrixCommand的observe()方法,或使用Observable的工廠方法(just(),from())即為響應(yīng)式執(zhí)行,這個(gè)功能的實(shí)現(xiàn)是基于Netflix的另一個(gè)開源項(xiàng)目RxJava

        CustomeCommand command = new CustomeCommand();  
        Observable result = command.observe();
        result.subscribe(new Action1() {
            @Override
            public void call(String str) {
                logger.info("Command called. Result is:{}", str);
            }
        });

        CustomeCommand command = new CustomeCommand();
        Observable result = command.observe();
        result.subscribe(new Observer() {
            @Override
            public void onCompleted() {
                logger.info("Command Completed");
            }

            @Override
            public void onError(Throwable e) {
                logger.error("Command failed", e);
            }

            @Override
            public void onNext(String args) {
                logger.info("Command finish,result is {}", args);
            }
        });
    }
4. Hystrix監(jiān)控

Hystrix還提供給我們一個(gè)監(jiān)控功能Hystrix-dashboard,可以直接使用其開源項(xiàng)目進(jìn)行配置,就能實(shí)時(shí)的觀察我們的服務(wù)調(diào)用情況。

1.構(gòu)建dashboard項(xiàng)目
Shell代碼 收藏代碼
$ git clone https://github.com/Netflix/Hy...
$ cd Hystrix/hystrix-dashboard
$ ../gradlew jettyRun

打開路徑:http://localhost:7979/hystrix...

2.配置服務(wù)狀態(tài)上報(bào)

    
  HystrixMetricsStreamServlet    
  HystrixMetricsStreamServlet    
  com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet  
  
      
  HystrixMetricsStreamServlet    
  /hystrix.stream  
  

3.添加stream
在hystrix-dashboard中按照說(shuō)明添加自己的 http://hystrix-app:port/hystr... ,然后監(jiān)視
4.如果是集群,通過turbine進(jìn)行監(jiān)視

5. 參考資料

https://github.com/Netflix/Hy...
http://ningandjiao.iteye.com/...
http://fobject.iteye.com/blog...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70329.html

相關(guān)文章

  • Hystrix基礎(chǔ)入門和特性講解

    摘要:斷路器本身是一種開關(guān)裝置,用于在電路上保護(hù)線路過載,當(dāng)線路中有電器發(fā)生短路時(shí),斷路器能夠及時(shí)的切斷故障電路,防止發(fā)生過載發(fā)熱甚至起火等嚴(yán)重后果。具備擁有回退機(jī)制和斷路器功能的線程和信號(hào)隔離,請(qǐng)求緩存和請(qǐng)求打包,以及監(jiān)控和配置等功能。 轉(zhuǎn)載請(qǐng)注明出處 http://www.paraller.com 代碼機(jī)制:熔斷 & Fallback & 資源隔離 熔斷 概念: 在微服務(wù)架構(gòu)中,我們將系...

    dkzwm 評(píng)論0 收藏0
  • Spring Cloud 參考文檔(斷路器:Hystrix客戶端)

    摘要:以下示例顯示了具有斷路器的最小服務(wù)器由名為的庫(kù)提供,在連接到斷路器的代理中自動(dòng)包裝帶有該注解的,斷路器計(jì)算何時(shí)打開和關(guān)閉電路以及在發(fā)生故障時(shí)應(yīng)采取的措施。上一篇服務(wù)發(fā)現(xiàn)下一篇超時(shí)和客戶端 斷路器:Hystrix客戶端 Netflix創(chuàng)建了一個(gè)名為Hystrix的庫(kù),用于實(shí)現(xiàn)斷路器模式,在微服務(wù)架構(gòu)中,通常有多層服務(wù)調(diào)用,如以下示例所示: 較低級(jí)別的服務(wù)中的服務(wù)故障可能導(dǎo)致級(jí)聯(lián)故障一直到...

    novo 評(píng)論0 收藏0
  • SpringCloud(第 015 篇)電影Ribbon微服務(wù)集成Hystrix增加隔離策略控制指標(biāo)

    摘要:傳播安全上下文或使用,通過增加的屬性,來(lái)增加相關(guān)的配置來(lái)達(dá)到執(zhí)行隔離策略,控制線程數(shù)或者控制并發(fā)請(qǐng)求數(shù)來(lái)達(dá)到熔斷降級(jí)的作用。 SpringCloud(第 015 篇)電影Ribbon微服務(wù)集成Hystrix增加隔離策略控制線程數(shù)或請(qǐng)求數(shù)來(lái)達(dá)到熔斷降級(jí)的作用 - 一、大致介紹 1、本章節(jié)介紹關(guān)于Hystrix的2種隔離方式(Thread Pool 和 Semaphores); 2、Thr...

    RobinQu 評(píng)論0 收藏0
  • Spring Cloud 參考文檔(Hystrix超時(shí)和Ribbon客戶端)

    摘要:要運(yùn)行儀表板,請(qǐng)使用注解主類,然后訪問并將儀表板指向客戶端應(yīng)用程序中的單個(gè)實(shí)例的端點(diǎn)。連接到使用的端點(diǎn)時(shí),必須信任服務(wù)器使用的證書,如果證書不受信任,則必須將證書導(dǎo)入,以便儀表板成功連接到流端點(diǎn)。 Hystrix超時(shí)和Ribbon客戶端 使用包裝Ribbon客戶端的Hystrix命令時(shí),要確保將Hystrix超時(shí)配置為長(zhǎng)于配置的Ribbon超時(shí),包括可能進(jìn)行的任何可能的重試,例如,如果...

    pf_miles 評(píng)論0 收藏0
  • Hystrix 停止開發(fā)。。。Spring Cloud 何去何從?

    摘要:棧長(zhǎng)得到消息,停止開發(fā)了。。。是一個(gè)輕量級(jí)的容錯(cuò)組件,其靈感來(lái)自于,主要為和函數(shù)式編程設(shè)計(jì)的看到這里,棧長(zhǎng)表示學(xué)不動(dòng)了。。。上面說(shuō)了,官方推薦替代的開源組件,這個(gè)棧長(zhǎng)也沒有用過,查了下,資料也比較稀少。 showImg(https://segmentfault.com/img/remote/1460000017201104?w=1600&h=1066); 棧長(zhǎng)得到消息,Hystrix ...

    陸斌 評(píng)論0 收藏0

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

0條評(píng)論

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