91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微服務治理實踐中如何對單點異常進行自動摘除

發布時間:2021-12-21 14:28:15 來源:億速云 閱讀:140 作者:柒染 欄目:云計算

今天就跟大家聊聊有關微服務治理實踐中如何對單點異常進行自動摘除,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

微服務架構下,穩定性和高可用性一個永恒的話題,在實際的治理過程中,我們有可能會遇到以下場景:

  • 某個應用灰度發布,先上了幾臺機器,由于代碼邏輯寫的有問題,造成線程池滿,出現運行異常。

  • 服務端集群中,某幾臺機器由于磁盤滿,或者是宿主機資源爭搶導致 load 過高,客戶端出現調用超時。

  • 服務端集群中,某幾臺機器由于線程池滿,造成 Full Garbage Collection。

在以上 3 種場景中,由于客戶端并不法感知已經出現問題的那些服務端,依然會發送請求到這些機器上,造成業務調用報錯,上游的機子將會被下游的某臺機子的短暫故障拖垮,造成應用雪崩的風險。

面對這種場景,如果僅僅為此而進行服務降級,對應用的傷害未免過大,但如果我們可以檢測出服務集群中某些故障機子,并對其進行短暫隔離,即可有效保障服務的高可用與系統的穩定性,同時給運維人員提供了寶貴的緩沖時間,用于問題定位,排除故障。

下面為大家介紹如何實現離群實例摘除。

Microservice Outlier Ejection (微服務離群實例摘除)

  • 什么是離群實例摘除

當單點發生夯機異常時,consumer 能主動判斷,并將對應的 provider 實例短時間剔除,不再請求,在一定時間間隔后再繼續訪問。同時,具有全局異常判斷能力,當 provider 異常實例的數量過多時,并且超過一定的控制比例,說明此時 provide 整體服務質量低下,該機制僅保持摘除一定的比例。

  • 離群實例摘除的功能

從服務層容錯能力上,對業務穩定性進行增強,有效解決單點故障的問題。

  • 與熔斷的區別

熔斷是指當服務的輸入負載激增時, 避免服務被迅速壓垮導致雪崩效應,而對負載進行斷路的一種方式 。 熔斷一般由熔斷請求判斷算法,熔斷恢復機制,熔斷報警等模塊組成。隔離是指,為了避免在依賴的服務故障時候造成的故障擴散,而采取的將系統進行單元化設計的一種架構方法。

若僅僅由于服務端集群中單點異常問題,就采用熔斷降級方案,將會對應用的傷害過大,離群實例摘除可以有效地解決單點異常問題從而保證服務質量。若 provider 整體服務質量低下時,離群摘除效果不再明顯,此時可以采用熔斷降級功能。

  • 離群實例摘除支持的版本

只要您的應用版本在列表中,您無需改動一行代碼就可以使用到離群實例摘除功能。

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

目前已經覆蓋了市面上大部分微服務場景,后續我們將會持續支持開源最新的 Dubbo/Spring Cloud 版本。

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

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

企業級分布式應用服務EDAS(Enterprise Distributed Application Service)是一個應用托管和微服務管理的 PaaS 平臺,提供應用開發、部署、監控、運維等全棧式解決方案,同時支持 Dubbo、Spring Cloud 等微服務運行環境。

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

準備

接下來以微服務Demo為例子示范離群摘除功能,讀者可以從github中下載驗證

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

微服務Demo是一個簡單的電商項目,下圖為項目結構,cartservice 為 Dubbo 框架的購物車服務 provider,productservice 為Spring Cloud提供的商品詳情服務 provider,frontend 為web controller即前端展示頁面,可以理解為consumer。

微服務治理實踐中如何對單點異常進行自動摘除cdn.com/012c8ebbb65144e189f6731a6f021a4dc23468da.png">

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

EDAS 上部署微服務 Demo

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

微服務治理實踐中如何對單點異常進行自動摘除

然后啟動應用,到目前為止,我們啟動了一個 cartservice-provider。點擊按此實例規格擴容,該服務我們部署在兩個實例上。
lADPDgQ9rWd_0YNLzQLq_746_75_jpg_620x10000q90g

我們在這個 provider 的 com.alibabacloud.hipstershop.provider.CartServiceImpl 類中可以看到,這個 provider 是提供了viewCart 和 addItemToCart 的兩個關于購物車的服務,我們在 viewCart 中加入一些模擬運行時異常的邏輯。

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

    @Override
    public List<CartItem> viewCart(String userID) {

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

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

其中 exceptionIp 為 ACM 配置中心的exception.ip的配置項,若該項配置為本機ip時,該服務throw RuntimeException,用于模擬業務異常的場景。

  • 為什么將 cartservice 擴容到兩個實例,想必大家也猜到了,運行時通過配置ACM配置中心指定其中一個實例的IP,模擬出一個實例異常的場景。

接下來,我們需要部署 frontend / productservice 兩個服務,方式一樣,分別上傳 frontend/target/frontend-1.0.0-SNAPSHOT.jar 和 productservice/productservice-provider/target/productservice-provider-1.0.0-SNAPSHOT.jar

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

微服務治理實踐中如何對單點異常進行自動摘除

模擬業務異常

進入到 frontend 應用中,我們看到其實例的公網 ip 為 47.99.150.33。
微服務治理實踐中如何對單點異常進行自動摘除

點擊View Cart 訪問至 http://47.99.150.33:8080/cart

微服務治理實踐中如何對單點異常進行自動摘除

然后繼續訪問 http://47.99.150.33:8080/cart ,發現 50 % 的概率錯誤頁面

11

此時,我們寫一個腳本,定時大量訪問 http://47.99.150.33:8080/cart 模擬請求。

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

我們看到不斷重復的每秒鐘 10 次的 50% 的調用成功率。

微服務治理實踐中如何對單點異常進行自動摘除

其實也可以理解到,下游的服務質量隨著上游的某臺機子的異常而急劇下降,甚至可能導致下游服務被上游某些機子的(系統、業務)異常給拖垮。

開啟離群摘除策略

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

創建

我們進入到 EDAS 左側列表的 [微服務管理] 下的 [離群實例摘除] 界面中,并選擇創建離群實例摘除策略。

微服務治理實踐中如何對單點異常進行自動摘除

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

選擇生效應用

微服務治理實踐中如何對單點異常進行自動摘除

這些參數都提供了默認值,需要根據自己應用的具體情況調整最合適的值,由于需要保護的 RuntimeException 屬于業務異常于是選上 網絡異常+業務異常。(需要注意的是即使摘除實例比例上限配得特別低,向下取整數小于1,當集群中實例數目大于1,且某一實例異常,我們也會摘除一實例)。

創建完成

可以看到策略的信息則創建完成。

策略

微服務治理實踐中如何對單點異常進行自動摘除

看到了我們創建的離群摘除策略,且是針對Dubbo框架,并且針對的是 網絡異常+業務異常 的異常類型。

驗證離群摘除效果

這時,我們看到,再感知到異常后,離群摘除功能生效,請求調用一陣子后,均返回正確結果。

微服務治理實踐中如何對單點異常進行自動摘除

客戶端感知到某臺服務端機子異常后,主動摘除。僅僅調用業務正常的 Provider 實例,同時我們也可以通 ARMS(EDAS監控系統) 監控看到服務質量的上升,以及流量從異常 Provider 中摘除。

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

修改/關閉離群摘除策略

對于EDAS的應用我們支持通過控制臺動態修改和刪除離群摘除策略。

  • 對應策略規則的修改

點擊 修改生效應用 或者 編輯策略。

微服務治理實踐中如何對單點異常進行自動摘除

控制臺的操作,對應用中的配置都是實時生效的,若刪除策略后,默認關閉相關策略。

若我們打開ARMS監控觀察具體的調用情況。

ARMS監控

若我們開啟監控,將會直觀看到流量與請求錯誤等信息。

開啟離群摘除前

如下圖方式開啟,然后跳轉至ARMS(EDAS監控系統)應用監控頁面,我們需要把三個應用都開啟高級監控。
微服務治理實踐中如何對單點異常進行自動摘除

從以下拓撲圖中我們看到,流量不斷地訪問到cartservice服務上。

微服務治理實踐中如何對單點異常進行自動摘除

可以看到,在開啟了離群摘除的那個點只后,錯誤率從50%明顯下降。

微服務治理實踐中如何對單點異常進行自動摘除

Dubbo Agent 方案技術架構

對于用戶來說,無需改動一行代碼,一行配置,即可享受到穩定性增強的能力。

離群實例摘除技術

Outlier Detection 離群檢測

均是基于時間窗口的數據統計。

兩種實現
1、Dubbo 2.7 版本通過向鏈路中嵌入一個MetricsFilter,對于鏈路的每個request/response做打點處理,統計rt、調用成功與否、異常類型,并且已endpoint(ip+port)為key存儲

2、在 Agent 底座中統計經過的http請求,通過url、rt、狀態碼、異常類型等數據結果,統計最近時間窗口的數據(目前寫死 10 秒,暫時不透出)

實時統計前N秒的調用信息,作為離群實例摘除動作的依據。

Outlier Ejection 離群摘除

Dubbo 基于 Dubbo Router 實現,對于調用的上游服務對應的所有 invokers 中,拉黑掉“不健康”的節點,同時記錄拉黑的信息。

Dubbo-Router控制邏輯
每次請求過來僅僅check一下并標記狀態,后臺有專門兩個線程將標記的流量進行判斷是否進入隔離列表或從中剔除,修改拉黑信息等耗時操作,最大程度上保證請求的實時性。

Spring Cloud 基于 擴展 LoadBalace 實現,原理相似。

看完上述內容,你們對微服務治理實踐中如何對單點異常進行自動摘除有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田林县| 安塞县| 张北县| 虎林市| 磐石市| 大田县| 毕节市| 贵阳市| 巴南区| 大足县| 五华县| 资兴市| 宁武县| 工布江达县| 绥化市| 仁寿县| 任丘市| 胶州市| 洪江市| 延长县| 普洱| 万州区| 西充县| 乡城县| 保山市| 马边| 沙河市| 灵石县| 广河县| 景谷| 汉中市| 广安市| 大悟县| 什邡市| 蓬溪县| 浦东新区| 沙雅县| 岑巩县| 芦溪县| 彩票| 临潭县|