真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

今天就跟大家聊聊有關(guān)微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、做網(wǎng)站、南華網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、南華網(wǎng)絡(luò)營(yíng)銷、南華企業(yè)策劃、南華品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供南華建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

微服務(wù)架構(gòu)下,穩(wěn)定性和高可用性一個(gè)永恒的話題,在實(shí)際的治理過(guò)程中,我們有可能會(huì)遇到以下場(chǎng)景:

  • 某個(gè)應(yīng)用灰度發(fā)布,先上了幾臺(tái)機(jī)器,由于代碼邏輯寫(xiě)的有問(wèn)題,造成線程池滿,出現(xiàn)運(yùn)行異常。

  • 服務(wù)端集群中,某幾臺(tái)機(jī)器由于磁盤(pán)滿,或者是宿主機(jī)資源爭(zhēng)搶導(dǎo)致 load 過(guò)高,客戶端出現(xiàn)調(diào)用超時(shí)。

  • 服務(wù)端集群中,某幾臺(tái)機(jī)器由于線程池滿,造成 Full Garbage Collection。

在以上 3 種場(chǎng)景中,由于客戶端并不法感知已經(jīng)出現(xiàn)問(wèn)題的那些服務(wù)端,依然會(huì)發(fā)送請(qǐng)求到這些機(jī)器上,造成業(yè)務(wù)調(diào)用報(bào)錯(cuò),上游的機(jī)子將會(huì)被下游的某臺(tái)機(jī)子的短暫故障拖垮,造成應(yīng)用雪崩的風(fēng)險(xiǎn)。

面對(duì)這種場(chǎng)景,如果僅僅為此而進(jìn)行服務(wù)降級(jí),對(duì)應(yīng)用的傷害未免過(guò)大,但如果我們可以檢測(cè)出服務(wù)集群中某些故障機(jī)子,并對(duì)其進(jìn)行短暫隔離,即可有效保障服務(wù)的高可用與系統(tǒng)的穩(wěn)定性,同時(shí)給運(yùn)維人員提供了寶貴的緩沖時(shí)間,用于問(wèn)題定位,排除故障。

下面為大家介紹如何實(shí)現(xiàn)離群實(shí)例摘除。

Microservice Outlier Ejection (微服務(wù)離群實(shí)例摘除)

  • 什么是離群實(shí)例摘除

當(dāng)單點(diǎn)發(fā)生夯機(jī)異常時(shí),consumer 能主動(dòng)判斷,并將對(duì)應(yīng)的 provider 實(shí)例短時(shí)間剔除,不再請(qǐng)求,在一定時(shí)間間隔后再繼續(xù)訪問(wèn)。同時(shí),具有全局異常判斷能力,當(dāng) provider 異常實(shí)例的數(shù)量過(guò)多時(shí),并且超過(guò)一定的控制比例,說(shuō)明此時(shí) provide 整體服務(wù)質(zhì)量低下,該機(jī)制僅保持摘除一定的比例。

  • 離群實(shí)例摘除的功能

從服務(wù)層容錯(cuò)能力上,對(duì)業(yè)務(wù)穩(wěn)定性進(jìn)行增強(qiáng),有效解決單點(diǎn)故障的問(wèn)題。

  • 與熔斷的區(qū)別

熔斷是指當(dāng)服務(wù)的輸入負(fù)載激增時(shí), 避免服務(wù)被迅速壓垮導(dǎo)致雪崩效應(yīng),而對(duì)負(fù)載進(jìn)行斷路的一種方式 。 熔斷一般由熔斷請(qǐng)求判斷算法,熔斷恢復(fù)機(jī)制,熔斷報(bào)警等模塊組成。隔離是指,為了避免在依賴的服務(wù)故障時(shí)候造成的故障擴(kuò)散,而采取的將系統(tǒng)進(jìn)行單元化設(shè)計(jì)的一種架構(gòu)方法。

若僅僅由于服務(wù)端集群中單點(diǎn)異常問(wèn)題,就采用熔斷降級(jí)方案,將會(huì)對(duì)應(yīng)用的傷害過(guò)大,離群實(shí)例摘除可以有效地解決單點(diǎn)異常問(wèn)題從而保證服務(wù)質(zhì)量。若 provider 整體服務(wù)質(zhì)量低下時(shí),離群摘除效果不再明顯,此時(shí)可以采用熔斷降級(jí)功能。

  • 離群實(shí)例摘除支持的版本

只要您的應(yīng)用版本在列表中,您無(wú)需改動(dòng)一行代碼就可以使用到離群實(shí)例摘除功能。

 目前支持版本開(kāi)發(fā)中版本(即將支持)
Dubbo2.5.0~2.7.3< 2.5.0 dubbox 版本
Spring CloudD、E、F、G、HC

目前已經(jīng)覆蓋了市面上大部分微服務(wù)場(chǎng)景,后續(xù)我們將會(huì)持續(xù)支持開(kāi)源最新的 Dubbo/Spring Cloud 版本。

我們提供了 Dubbo 和 Spring Cloud 兩種場(chǎng)景的離群摘除功能,本文將先介紹一下 Dubbo Microservice Outlier Ejection 的實(shí)踐與效果。

下面將通過(guò)在 EDAS 上通過(guò)演示 Dubbo 離群摘除功能及效果。

企業(yè)級(jí)分布式應(yīng)用服務(wù)EDAS(Enterprise Distributed Application Service)是一個(gè)應(yīng)用托管和微服務(wù)管理的 PaaS 平臺(tái),提供應(yīng)用開(kāi)發(fā)、部署、監(jiān)控、運(yùn)維等全棧式解決方案,同時(shí)支持 Dubbo、Spring Cloud 等微服務(wù)運(yùn)行環(huán)境。

https://www.aliyun.com/product/edas

準(zhǔn)備

接下來(lái)以微服務(wù)Demo為例子示范離群摘除功能,讀者可以從github中下載驗(yàn)證

https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/src

微服務(wù)Demo是一個(gè)簡(jiǎn)單的電商項(xiàng)目,下圖為項(xiàng)目結(jié)構(gòu),cartservice 為 Dubbo 框架的購(gòu)物車服務(wù) provider,productservice 為Spring Cloud提供的商品詳情服務(wù) provider,frontend 為web controller即前端展示頁(yè)面,可以理解為consumer。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除cdn.com/012c8ebbb65144e189f6731a6f021a4dc23468da.png">

我們將以cartservice服務(wù)即Dubbo服務(wù)端為例子,展示離群實(shí)例摘除功能。

EDAS 上部署微服務(wù) Demo

首先 cd cartservice切換到 cartservice 目錄下,再通過(guò) mvn clean install 打包,通過(guò) cd cartservice-provider/target 切換到target目錄下,我們可以看到新生成的 cartservice-provider-1.0.0-SNAPSHOT.jar 包,然后在 EDAS上 創(chuàng)建一個(gè) cartservice 應(yīng)用。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

然后啟動(dòng)應(yīng)用,到目前為止,我們啟動(dòng)了一個(gè) cartservice-provider。點(diǎn)擊按此實(shí)例規(guī)格擴(kuò)容,該服務(wù)我們部署在兩個(gè)實(shí)例上。
lADPDgQ9rWd_0YNLzQLq_746_75_jpg_620x10000q90g

我們?cè)谶@個(gè) provider 的 com.alibabacloud.hipstershop.provider.CartServiceImpl 類中可以看到,這個(gè) provider 是提供了viewCart 和 addItemToCart 的兩個(gè)關(guān)于購(gòu)物車的服務(wù),我們?cè)?viewCart 中加入一些模擬運(yùn)行時(shí)異常的邏輯。

    @Value("${exception.ip}")
    private String exceptionIp;

    @Override
    public List viewCart(String userID) {

        if (exceptionIp != null && exceptionIp.equals(getLocalIp())) {
            throw new RuntimeException("運(yùn)行時(shí)異常");
        }

        return cartStore.getOrDefault(userID, Collections.emptyList());
    }

其中 exceptionIp 為 ACM 配置中心的exception.ip的配置項(xiàng),若該項(xiàng)配置為本機(jī)ip時(shí),該服務(wù)throw RuntimeException,用于模擬業(yè)務(wù)異常的場(chǎng)景。

  • 為什么將 cartservice 擴(kuò)容到兩個(gè)實(shí)例,想必大家也猜到了,運(yùn)行時(shí)通過(guò)配置ACM配置中心指定其中一個(gè)實(shí)例的IP,模擬出一個(gè)實(shí)例異常的場(chǎng)景。

接下來(lái),我們需要部署 frontend / productservice 兩個(gè)服務(wù),方式一樣,分別上傳 frontend/target/frontend-1.0.0-SNAPSHOT.jar 和 productservice/productservice-provider/target/productservice-provider-1.0.0-SNAPSHOT.jar

從下圖可以看到,我們的微服務(wù)Demo在EDAS部署上去了。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

模擬業(yè)務(wù)異常

進(jìn)入到 frontend 應(yīng)用中,我們看到其實(shí)例的公網(wǎng) ip 為 47.99.150.33。
微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

點(diǎn)擊View Cart 訪問(wèn)至 http://47.99.150.33:8080/cart

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

然后繼續(xù)訪問(wèn) http://47.99.150.33:8080/cart ,發(fā)現(xiàn) 50 % 的概率錯(cuò)誤頁(yè)面

11

此時(shí),我們寫(xiě)一個(gè)腳本,定時(shí)大量訪問(wèn) http://47.99.150.33:8080/cart 模擬請(qǐng)求。

while :
do
        result=`curl $1 -s`
        if [[ "$result" == *"500"* ]]; then
                echo `date +%F-%T` $result
        else
                echo `date +%F-%T` "success"
        fi

        sleep 0.1
done

然后 sh curlservice.sh http://47.99.150.33:8080/cart

我們看到不斷重復(fù)的每秒鐘 10 次的 50% 的調(diào)用成功率。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

其實(shí)也可以理解到,下游的服務(wù)質(zhì)量隨著上游的某臺(tái)機(jī)子的異常而急劇下降,甚至可能導(dǎo)致下游服務(wù)被上游某些機(jī)子的(系統(tǒng)、業(yè)務(wù))異常給拖垮。

開(kāi)啟離群摘除策略

下面我將演示離群摘除的策略的開(kāi)啟及其效果的展示。

創(chuàng)建

我們進(jìn)入到 EDAS 左側(cè)列表的 [微服務(wù)管理] 下的 [離群實(shí)例摘除] 界面中,并選擇創(chuàng)建離群實(shí)例摘除策略。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

如上圖可以選擇命名空間、填寫(xiě)策略名稱、選擇該策略支持的框架類型(Dubbo/Spring Cloud)。

選擇生效應(yīng)用

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

這些參數(shù)都提供了默認(rèn)值,需要根據(jù)自己應(yīng)用的具體情況調(diào)整最合適的值,由于需要保護(hù)的 RuntimeException 屬于業(yè)務(wù)異常于是選上 網(wǎng)絡(luò)異常+業(yè)務(wù)異常。(需要注意的是即使摘除實(shí)例比例上限配得特別低,向下取整數(shù)小于1,當(dāng)集群中實(shí)例數(shù)目大于1,且某一實(shí)例異常,我們也會(huì)摘除一實(shí)例)。

創(chuàng)建完成

可以看到策略的信息則創(chuàng)建完成。

策略

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

看到了我們創(chuàng)建的離群摘除策略,且是針對(duì)Dubbo框架,并且針對(duì)的是 網(wǎng)絡(luò)異常+業(yè)務(wù)異常 的異常類型。

驗(yàn)證離群摘除效果

這時(shí),我們看到,再感知到異常后,離群摘除功能生效,請(qǐng)求調(diào)用一陣子后,均返回正確結(jié)果。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

客戶端感知到某臺(tái)服務(wù)端機(jī)子異常后,主動(dòng)摘除。僅僅調(diào)用業(yè)務(wù)正常的 Provider 實(shí)例,同時(shí)我們也可以通 ARMS(EDAS監(jiān)控系統(tǒng)) 監(jiān)控看到服務(wù)質(zhì)量的上升,以及流量從異常 Provider 中摘除。

Dubbo框架可以從 /home/admin/.opt/ArmsAgent/logs 目錄下的日志中,搜索日志中的 “OutlierRouter” 關(guān)鍵字可以看到一系列離群實(shí)例摘除的事件日志。

修改/關(guān)閉離群摘除策略

對(duì)于EDAS的應(yīng)用我們支持通過(guò)控制臺(tái)動(dòng)態(tài)修改和刪除離群摘除策略。

  • 對(duì)應(yīng)策略規(guī)則的修改

點(diǎn)擊 修改生效應(yīng)用 或者 編輯策略。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

控制臺(tái)的操作,對(duì)應(yīng)用中的配置都是實(shí)時(shí)生效的,若刪除策略后,默認(rèn)關(guān)閉相關(guān)策略。

若我們打開(kāi)ARMS監(jiān)控觀察具體的調(diào)用情況。

ARMS監(jiān)控

若我們開(kāi)啟監(jiān)控,將會(huì)直觀看到流量與請(qǐng)求錯(cuò)誤等信息。

開(kāi)啟離群摘除前

如下圖方式開(kāi)啟,然后跳轉(zhuǎn)至ARMS(EDAS監(jiān)控系統(tǒng))應(yīng)用監(jiān)控頁(yè)面,我們需要把三個(gè)應(yīng)用都開(kāi)啟高級(jí)監(jiān)控。
微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

從以下拓?fù)鋱D中我們看到,流量不斷地訪問(wèn)到cartservice服務(wù)上。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

可以看到,在開(kāi)啟了離群摘除的那個(gè)點(diǎn)只后,錯(cuò)誤率從50%明顯下降。

微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除

Dubbo Agent 方案技術(shù)架構(gòu)

對(duì)于用戶來(lái)說(shuō),無(wú)需改動(dòng)一行代碼,一行配置,即可享受到穩(wěn)定性增強(qiáng)的能力。

離群實(shí)例摘除技術(shù)

Outlier Detection 離群檢測(cè)

均是基于時(shí)間窗口的數(shù)據(jù)統(tǒng)計(jì)。

兩種實(shí)現(xiàn)
1、Dubbo 2.7 版本通過(guò)向鏈路中嵌入一個(gè)MetricsFilter,對(duì)于鏈路的每個(gè)request/response做打點(diǎn)處理,統(tǒng)計(jì)rt、調(diào)用成功與否、異常類型,并且已endpoint(ip+port)為key存儲(chǔ)

2、在 Agent 底座中統(tǒng)計(jì)經(jīng)過(guò)的http請(qǐng)求,通過(guò)url、rt、狀態(tài)碼、異常類型等數(shù)據(jù)結(jié)果,統(tǒng)計(jì)最近時(shí)間窗口的數(shù)據(jù)(目前寫(xiě)死 10 秒,暫時(shí)不透出)

實(shí)時(shí)統(tǒng)計(jì)前N秒的調(diào)用信息,作為離群實(shí)例摘除動(dòng)作的依據(jù)。

Outlier Ejection 離群摘除

Dubbo 基于 Dubbo Router 實(shí)現(xiàn),對(duì)于調(diào)用的上游服務(wù)對(duì)應(yīng)的所有 invokers 中,拉黑掉“不健康”的節(jié)點(diǎn),同時(shí)記錄拉黑的信息。

Dubbo-Router控制邏輯
每次請(qǐng)求過(guò)來(lái)僅僅check一下并標(biāo)記狀態(tài),后臺(tái)有專門兩個(gè)線程將標(biāo)記的流量進(jìn)行判斷是否進(jìn)入隔離列表或從中剔除,修改拉黑信息等耗時(shí)操作,最大程度上保證請(qǐng)求的實(shí)時(shí)性。

Spring Cloud 基于 擴(kuò)展 LoadBalace 實(shí)現(xiàn),原理相似。

看完上述內(nèi)容,你們對(duì)微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


文章題目:微服務(wù)治理實(shí)踐中如何對(duì)單點(diǎn)異常進(jìn)行自動(dòng)摘除
分享路徑:http://weahome.cn/article/pidogg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部