日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务架构---服务降级

發布時間:2024/2/28 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务架构---服务降级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 簡介

????????什么是服務降級?當服務器壓力劇增的情況下,根據實際業務情況及流量,對一些服務和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務器資源以保證核心交易正常運作或高效運作。

????????如果還是不理解,那么可以舉個栗子:假如目前有很多人想要給我付錢,但我的服務器除了正在運行支付的服務之外,還有一些其它的服務在運行,比如搜索、定時任務和詳情等等。然而這些不重要的服務就占用了JVM的不少內存與CPU資源,為了能把錢都收下來(錢才是目標),我設計了一個動態開關,把這些不重要的服務直接在最外層拒掉,這樣處理后的后端處理收錢的服務就有更多的資源來收錢了(收錢速度更快了),這就是一個簡單的服務降級的使用場景。

2 使用場景

????????服務降級主要用于什么場景呢?當整個微服務架構整體的負載超出了預設的上限閾值或即將到來的流量預計將會超過預設的閾值時,為了保證重要或基本的服務能正常運行,我們可以將一些?不重要?或?不緊急?的服務或任務進行服務的?延遲使用?或?暫停使用。

3 核心設計

3.1 分布式開關

????????根據上述需求,我們可以設置一個分布式開關,用于實現服務的降級,然后集中式管理開關配置信息即可。具體方案如下:

服務降級-分布式開關

3.2 自動降級

  • 超時降級?—— 主要配置好超時時間和超時重試次數和機制,并使用異步機制探測恢復情況

  • 失敗次數降級?—— 主要是一些不穩定的API,當失敗調用次數達到一定閥值自動降級,同樣要使用異步機制探測回復情況

  • 故障降級?—— 如要調用的遠程服務掛掉了(網絡故障、DNS故障、HTTP服務返回錯誤的狀態碼和RPC服務拋出異常),則可以直接降級

  • 限流降級?—— 當觸發了限流超額時,可以使用暫時屏蔽的方式來進行短暫的屏蔽

????????當我們去秒殺或者搶購一些限購商品時,此時可能會因為訪問量太大而導致系統崩潰,此時開發者會使用限流來進行限制訪問量,當達到限流閥值,后續請求會被降級;降級后的處理方案可以是:排隊頁面(將用戶導流到排隊頁面等一會重試)、無貨(直接告知用戶沒貨了)、錯誤頁(如活動太火爆了,稍后重試)。

3.3 配置中心

????????微服務降級的配置信息是集中式的管理,然后通過可視化界面進行友好型的操作。配置中心和應用之間需要網絡通信,因此可能會因網絡閃斷或網絡重啟等因素,導致配置推送信息丟失、重啟或網絡恢復后不能再接受、變更不及時等等情況,因此服務降級的配置中心需要實現以下幾點特性,從而盡可能的保證配置變更即使達到:

服務降級-配置中心

  • 啟動主動拉取配置?—— 用于初始化配置(減少第一次定時拉取周期)

  • 發布訂閱配置?—— 用于實現配置及時變更(可以解決90%左右的配置變更)

  • 定時拉取配置?—— 用于解決發布訂閱失效或消失丟失的情況(可以解決9%左右的發布訂閱失效的消息變更)

  • 離線文件緩存配置?—— 用于臨時解決重啟后連接不上配置中心的問題

  • 可編輯式配置文檔?—— 用于直接編輯文檔的方式來實現配置的定義

  • 提供Telnet命令變更配置?—— 用于解決配置中心失效而不能變更配置的常見

3.4 處理策略

????????當觸發服務降級后,新的交易再次到達時,我們該如何來處理這些請求呢?從微服務架構全局的視角來看,我們通常有以下是幾種常用的降級處理方案:

  • 頁面降級?—— 可視化界面禁用點擊按鈕、調整靜態頁面

  • 延遲服務?—— 如定時任務延遲處理、消息入MQ后延遲處理

  • 寫降級?—— 直接禁止相關寫操作的服務請求

  • 讀降級?—— 直接禁止相關度的服務請求

  • 緩存降級?—— 使用緩存方式來降級部分讀頻繁的服務接口

????????針對后端代碼層面的降級處理策略,則我們通常使用以下幾種處理措施進行降級處理:

  • 拋異常

  • 返回NULL

  • 調用Mock數據

  • 調用Fallback處理邏輯

4 高級特性

????????我們已經為每個服務都做好了一個降級開關,也已經在線上驗證通過了,感覺完全沒問題了。
????????場景一:某一天,運營搞了一次活動,突然跑過來說,現在流量已經快漲到上限了,有沒有批量降級所有不重要服務的方式?開發一臉懵逼的看著,這又不是操作DB,哪里有批量操作呀。
????????場景二:某一天,運營又搞事了,說我們等下要搞一個活動,讓我們趕緊提前把不重要的服務都降級了,開發又是一臉懵逼,我怎么知道要降級哪些服務呀。
????????反思:服務降級的功能雖然是實現了,可是沒有考慮實施時的體驗。服務太多,不知道該降級哪些服務,單個操作降級速度太慢……

4.1 分級降級

????????當微服務架構發生不同程度的情況時,我們可以根據服務的對比而進行選擇式舍棄(即丟車保帥的原則),從而進一步保障核心的服務的正常運作。

????????如果等線上服務即將發生故障時,才去逐個選擇哪些服務該降級、哪些服務不能降級,然而線上有成百上千個服務,則肯定是來不及降級就會被拖垮。同時,在大促或秒殺等活動前才去梳理,也是會有不少的工作量,因此建議在開發期就需要架構師或核心開發人員來提前梳理好,是否能降級的初始評估值,即是否能降級的默認值。

????????為了便于批量操作微服務架構中服務的降級,我們可以從全局的角度來建立服務重要程度的評估模型,如果有條件的話,建議可以使用?層次分析法(The analytic hierarchy process,簡稱AHP)?的數學建模模型(或其它模型)來進行定性和定量的評估(肯定比架構師直接拍腦袋決定是否降級好很多倍,當然難度和復雜度也會高許多,即你需要一個會數學建模人才),而層次分析法的基本思路是人對一個復雜的決策問題的思維和判斷過程大體上是一樣的。

????????以下是個人給出的最終評價模型,可作為服務降級的評價參考模型進行設計:

????????我們利用數學建模的方式或架構師直接拍腦袋的方式,結合服務能否降級的優先原則,并根據臺風預警(都屬于風暴預警)的等級進行參考設計,可將微服務架構的所有服務進行故障風暴等級劃分為以下四種:

評估模型:

  • 藍色風暴?—— 表示需要小規模降級非核心服務

  • 黃色風暴?—— 表示需要中等規模降級非核心服務

  • 橙色風暴?—— 表示需要大規模降級非核心服務

  • 紅色風暴?—— 表示必須降級所有非核心服務

設計說明:

  • 故障嚴重程度為:藍色<黃色<橙色<紅色

  • 建議根據二八原則可以將服務劃分為:80%的非核心服務+20%的核心服務

????????以上模型只是整體微服務架構的服務降級評估模型,具體大促或秒殺活動時,建議以具體主題為中心進行建立(不同主題的活動,因其依賴的服務不同,而使用不同的進行降級更為合理)。當然模型可以使用同一個,但其數據需要有所差異。最好能建立一套模型庫,然后實施時只需要輸入相關服務即可輸出最終降級方案,即輸出本次大促或秒殺時,當發生藍色風暴時需要降級的服務清單、當發生黃色風暴時需要降級的服務清單……

4.2 降級權值

????????微服務架構中有服務權值的概念,主要用于負載時的權重選擇,同樣服務降級權值也是類似,主要用于服務降級選擇時的細粒度優先級抉擇。所有的服務直接使用以上簡單的四級劃分方式進行統一處理,顯然粒度太粗,或者說出于同一級的多個服務需要降級時的?降級順序?該如何?甚至我想要人工智能化的?自動降級,又該如何更細粒度的控制?

????????基于上述的這些AI化的需求,我們可以為每一個服務分配一個降級權值,從而便于更加智能化的實現服務治理。而其評估的數值,同樣也可以使用數學模型的方式進行?定性?與?定量?的評估出來,也可以架構師根據經驗直接拍腦袋來確定。

?

總結

以上是生活随笔為你收集整理的微服务架构---服务降级的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。