并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表
文章目錄
- 服務降級與服務熔斷概述
- 服務降級舉例
- 服務熔斷 VS 服務降級
- 服務降級要考慮的問題
- Hystrix
- 數(shù)據(jù)庫切庫分庫分表
- 高可用的一些手段
服務降級與服務熔斷概述
服務熔斷: 一般是指軟件系統(tǒng)中,由于某些原因使得服務出現(xiàn)了過載現(xiàn)象,為防止造成整個系統(tǒng)故障,從而采用的一種保護措施,熔斷也可以稱為過載保護
服務降級: 當服務壓力劇增的時候根據(jù)當前的業(yè)務情況及流量對一些服務和頁面有策略的降級,以此緩解服務器的壓力,以保證核心任務的進行。同時保證部分甚至大部分任務客戶能得到正確的響應。也就是當前的請求處理不了了或者出錯了,給一個默認的返回。
服務降級舉例
-
超時降級:主要配置好超時時間和超時重試次數(shù)和機制,并使用異步機制探測回復情況
-
失敗次數(shù)降級:主要是一些不穩(wěn)定的api,當失敗調(diào)用次數(shù)達到一定閥值自動降級,同樣要使用異步機制探測回復情況
-
故障降級:比如要調(diào)用的遠程服務掛掉了(網(wǎng)絡(luò)故障、DNS故障、http服務返回錯誤的狀態(tài)碼、rpc服務拋出異常),則可以直接降級。降級后的處理方案有:默認值(比如庫存服務掛了,返回默認現(xiàn)貨)、兜底數(shù)據(jù)(比如廣告掛了,返回提前準備好的一些靜態(tài)頁面)、緩存(之前暫存的一些緩存數(shù)據(jù))
-
限流降級: 比如當秒殺或者搶購一些限購商品時,此時可能會因為訪問量太大而導致系統(tǒng)崩潰,此時我們會使用限流來進行限制訪問量,當達到限流閥值,后續(xù)請求會被降級;降級后的處理方案可以是:排隊頁面(將用戶導流到排隊頁面等一會重試)、無貨(直接告知用戶沒貨了)、錯誤頁(如活動太火爆了,稍后重試)等等
服務熔斷 VS 服務降級
兩者其實從某些角度看是有一定的類似性的:
-
目的很一致,都是從可用性可靠性著想,為防止系統(tǒng)的整體緩慢甚至崩潰,采用的技術(shù)手段
-
最終表現(xiàn)類似,對于兩者來說,最終讓用戶體驗到的是某些功能暫時不可達或不可用
-
粒度一般都是服務級別,當然,業(yè)界也有不少更細粒度的做法,比如做到數(shù)據(jù)持久層(允許查詢,不允許增刪改)
-
自治性要求很高,熔斷模式一般都是服務基于策略的自動觸發(fā),降級雖說可人工干預,但在微服務架構(gòu)下,完全靠人顯然不可能,開關(guān)預置、配置中心都是必要手段;
而兩者的區(qū)別也是明顯的:
-
觸發(fā)原因不太一樣,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮
-
管理目標的層次不太一樣,熔斷其實是一個框架級的處理,每個微服務都需要(無層級之分),而降級一般需要對業(yè)務有層級之分(比如降級一般是從最外圍服務開始)
-
實現(xiàn)方式不太一樣
服務降級要考慮的問題
-
核心和非核心服務
-
是否支持降級,降級策略
-
業(yè)務放通的場景,策略
Hystrix
具備擁有回退機制和斷路器功能的線程和信號隔離,請求緩存和請求打包(request collapsing),以及監(jiān)控和配置等功能
如何使用,請參考以前的博文
Spring Cloud【Finchley】-08使用Hystrix實現(xiàn)容錯
Spring Cloud【Finchley】-09Feign使用Hystrix
Spring Cloud【Finchley】-10Hystrix監(jiān)控
Spring Cloud【Finchley】-11Feign項目整合Hystrix監(jiān)控
Spring Cloud【Finchley】-12使用Hystrix Dashboard實現(xiàn)Hystrix數(shù)據(jù)的可視化監(jiān)控
數(shù)據(jù)庫切庫分庫分表
數(shù)據(jù)庫的瓶頸:
-
單個數(shù)據(jù)庫數(shù)據(jù)量太大(1-2T): 對應的策略—>拆分為多個庫
-
單個數(shù)據(jù)庫服務器壓力太大,讀寫瓶頸:對應的策略—>拆分為多個庫
-
單個表數(shù)據(jù)量過大:對應的策略—>分表
切庫的基礎(chǔ):讀寫分離 ( 主庫/從庫)
自定義注解完成數(shù)據(jù)庫切庫:見以前的博文
Spring Boot2.x-09 基于Spring Boot 2.1.2 + Mybatis使用自定義注解實現(xiàn)數(shù)據(jù)庫切換
Spring Boot2.x-10 基于Spring Boot 2.1.2 + Mybatis 2.0.0實現(xiàn)多數(shù)據(jù)源,支持事務
高可用的一些手段
任務調(diào)度系統(tǒng)分布式: elastic-job + zookeeper , 請參考 elastic-job+zookeeper實現(xiàn)分布式定時任務調(diào)度的使用(springboot版本)
主備切換: apache curator + zookeeper 分布式鎖實現(xiàn) ,請參考 ZooKeeper + Curator 實現(xiàn)分布式鎖
總結(jié)
以上是生活随笔為你收集整理的并发编程-26 高并发处理手段之服务降级与服务熔断 + 数据库切库分库分表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发编程-24 高并发处理手段之扩容思路
- 下一篇: Spring Boot2.x-14 使用