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