本發(fā)明涉及服務(wù)故障處理技術(shù)領(lǐng)域,尤其涉及一種服務(wù)熔斷隔離系統(tǒng)和方法。
背景技術(shù):
在大型的軟件系統(tǒng)中,如果調(diào)用的遠程服務(wù)或者資源由于某種原因無法使用時,如果沒有過載保護,就會導致請求的資源阻塞在服務(wù)器上等待從而耗盡系統(tǒng)或者服務(wù)器資源。很多時候剛開始可能只是系統(tǒng)出現(xiàn)了局部的、小規(guī)模的故障,然而由于種種原因,故障影響的范圍越來越大,最終導致業(yè)務(wù)系統(tǒng)的全線崩潰。又稱:雪崩效應。
目前,通常采用艙壁模式解決這種現(xiàn)象:即把資源請求進行分類,劃分成一個個的艙壁。如果有一個船艙破了進水,只影響一個船艙。例如可以對不同類型的請求使用線程池來資源隔離,每種類型的請求互不影響,如果一種類型的請求線程資源耗盡,則對后續(xù)的該類型請求直接返回,不再調(diào)用后續(xù)資源。
艙壁模式存在以下缺點:
1)每個線程池的大小無法快速的估算出一個合理的大小。
2)由于大量使用線程池,每類請求執(zhí)行涉及到排隊、調(diào)度和上下文切換。造成cpu資源的浪費。
3)由于按類別劃分使用不同的線程池,劃分粒度還是有點大。例如:劃分的一個線程池的請求由于某一個調(diào)用的異常,造成線程池耗盡。劃分到這個線程池的其他請求由于線程池的耗盡也不能正常的提供服務(wù),同樣會出現(xiàn)小范圍的雪崩效應。
4)由于粒度劃分問題、報警策略不好設(shè)定且收到報警后不好定位到時線程池中那個具體的請求異常。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種服務(wù)熔斷隔離系統(tǒng)和方法,從而解決現(xiàn)有技術(shù)中存在的前述問題。
為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
一種服務(wù)熔斷隔離系統(tǒng),包括:
配置模塊,用于熔斷參數(shù)動態(tài)配置;
熔斷請求判斷模塊,用于判斷外部請求的服務(wù)是否處于熔斷狀態(tài);
熔斷恢復模塊,用于異步探測熔斷服務(wù)是否達到熔斷請求的健康閥值,如果是,則對所述熔斷服務(wù)進行健康恢復;
熔斷報警模塊,用于發(fā)生服務(wù)熔斷告警提示,并修改內(nèi)存中的該服務(wù)的熔斷狀態(tài);
熔斷健康統(tǒng)計模塊,用于根據(jù)配置的熔斷策略判斷是否達到熔斷閥值及服務(wù)狀態(tài)報表展示,所述服務(wù)狀態(tài)包括:吞吐、異常比和/或監(jiān)控狀態(tài)。
優(yōu)選地,所述熔斷請求判斷模塊,用于判斷所述請求的服務(wù)是否處于熔斷狀態(tài),具體為,用無鎖Map保存統(tǒng)計數(shù)據(jù),所述統(tǒng)計數(shù)據(jù)以所述請求的URLPath作為key,以原子類類型的錯誤請求次數(shù)、總請求次數(shù)、開始時間、是否離線為屬性的統(tǒng)計類作為value,在所述統(tǒng)計數(shù)據(jù)中,若固定時間內(nèi)的錯誤請求比率或錯誤請求次數(shù)達到預設(shè)的閥值,則判定所述請求的服務(wù)處于熔斷狀態(tài)。
一種服務(wù)熔斷隔離方法,包括如下步驟:
S1,服務(wù)啟動,配置服務(wù)加載熔斷策略參數(shù),默認為使用本地配置;
S2,外部請求經(jīng)過網(wǎng)關(guān)聚合層到達熔斷請求判斷模塊;
S3,所述熔斷請求判斷模塊判斷所述請求的服務(wù)是否處于熔斷狀態(tài),如果是,則執(zhí)行S4-S5,否則,執(zhí)行S6-S7;
S4,調(diào)用熔斷回調(diào)函數(shù),并返回回調(diào)結(jié)果;
S5,異步探測熔斷服務(wù)是否達到熔斷請求的健康閥值,如果是,則對所述熔斷服務(wù)進行健康恢復并跳至S6,否則,跳至S4;
S6,調(diào)用業(yè)務(wù)方的業(yè)務(wù)接口返回調(diào)用結(jié)果;
S7,異步調(diào)用熔斷健康統(tǒng)計模塊,對系統(tǒng)狀態(tài)進行實時健康統(tǒng)計,并根據(jù)配置的熔斷策略和統(tǒng)計結(jié)果判斷所述請求是否達到熔斷閥值,如果是,則發(fā)生服務(wù)熔斷告警提示,并修改內(nèi)存中的該服務(wù)的熔斷狀態(tài),否則,跳至S6。
優(yōu)選地,S3中,所述熔斷請求判斷模塊判斷所述請求的服務(wù)是否處于熔斷狀態(tài),具體為,用無鎖Map保存統(tǒng)計數(shù)據(jù),所述統(tǒng)計數(shù)據(jù)以所述請求的URLPath作為key,以原子類類型的錯誤請求次數(shù)、總請求次數(shù)、開始時間、是否離線為屬性的統(tǒng)計類作為value,在所述統(tǒng)計數(shù)據(jù)中,若固定時間內(nèi)的錯誤請求比率或錯誤請求次數(shù)達到預設(shè)的閥值,則判定所述請求的服務(wù)處于熔斷狀態(tài)。
優(yōu)選地,S4中,所述回調(diào)結(jié)果包括:調(diào)用熔斷回調(diào)函數(shù)成功,則返回預設(shè)回調(diào)結(jié)果,否則,發(fā)生回調(diào)異常告警提示。
優(yōu)選地,S5中,所述健康閥值根據(jù)統(tǒng)計的歷史報表數(shù)據(jù)進行設(shè)置,并進行動態(tài)配置。
優(yōu)選地,S7中,所述熔斷閥值根據(jù)統(tǒng)計的歷史報表數(shù)據(jù)進行設(shè)置,并進行動態(tài)配置。
本發(fā)明的有益效果是:本發(fā)明實施例提供的一種服務(wù)熔斷隔離系統(tǒng)和方法,通過實時統(tǒng)計系統(tǒng)監(jiān)控狀況,根據(jù)不同的降級策略對服務(wù)進行保護,同時通過熔斷后異步探測服務(wù)健康狀況、對服務(wù)進行自動健康恢復,以及熔斷后返回預設(shè)回調(diào)結(jié)果,提高用戶體驗;解決了系統(tǒng)對不可控風險的依賴,提高了系統(tǒng)的容錯能力和穩(wěn)定性,實時發(fā)現(xiàn)依賴系統(tǒng)異常、方便問題的定位,加速異常解決。
附圖說明
圖1是本發(fā)明實施例提供的服務(wù)熔斷隔離方法流程示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
實施例一
本發(fā)明實施例提供了一種服務(wù)熔斷隔離系統(tǒng),包括:
配置模塊,用于熔斷參數(shù)動態(tài)配置;
熔斷請求判斷模塊,用于判斷外部請求的服務(wù)是否處于熔斷狀態(tài);
熔斷恢復模塊,用于異步探測熔斷服務(wù)是否達到熔斷請求的健康閥值,如果是,則對所述熔斷服務(wù)進行健康恢復;
熔斷報警模塊,用于發(fā)生服務(wù)熔斷告警提示,并修改內(nèi)存中的該服務(wù)的熔斷狀態(tài);
熔斷健康統(tǒng)計模塊,用于根據(jù)配置的熔斷策略判斷是否達到熔斷閥值及服務(wù)狀態(tài)報表展示,所述服務(wù)狀態(tài)包括:吞吐、異常比和/或監(jiān)控狀態(tài)。
該系統(tǒng)的工作過程可以包括如下步驟:
S1,服務(wù)啟動,配置服務(wù)加載熔斷策略參數(shù),默認為使用本地配置;
S2,外部請求經(jīng)過網(wǎng)關(guān)聚合層到達熔斷請求判斷模塊;
S3,所述熔斷請求判斷模塊判斷所述請求的服務(wù)是否處于熔斷狀態(tài),如果是,則執(zhí)行S4-S5,否則,執(zhí)行S6-S7;
S4,調(diào)用熔斷回調(diào)函數(shù),并返回回調(diào)結(jié)果;
S5,異步探測熔斷服務(wù)是否達到熔斷請求的健康閥值,如果是,則對所述熔斷服務(wù)進行健康恢復并跳至S6,否則,跳至S4;
S6,調(diào)用業(yè)務(wù)方的業(yè)務(wù)接口返回調(diào)用結(jié)果;
S7,異步調(diào)用熔斷健康統(tǒng)計模塊,對系統(tǒng)狀態(tài)進行實時健康統(tǒng)計,并根據(jù)配置的熔斷策略和統(tǒng)計結(jié)果判斷所述請求是否達到熔斷閥值,如果是,則發(fā)生服務(wù)熔斷告警提示,并修改內(nèi)存中的該服務(wù)的熔斷狀態(tài),否則,跳至S6。
所以,采用上述系統(tǒng),通過實時統(tǒng)計系統(tǒng)監(jiān)控狀況,根據(jù)不同的降級策略對服務(wù)進行保護,同時通過熔斷后異步探測服務(wù)健康狀況、對服務(wù)進行自動健康恢復,以及熔斷后返回預設(shè)回調(diào)結(jié)果,提高用戶體驗;解決了系統(tǒng)對不可控風險的依賴,提高了系統(tǒng)的容錯能力和穩(wěn)定性,實時發(fā)現(xiàn)依賴系統(tǒng)異常、方便問題的定位,加速異常解決。
其中,所述熔斷請求判斷模塊,用于判斷所述請求的服務(wù)是否處于熔斷狀態(tài),具體為,用無鎖Map保存統(tǒng)計數(shù)據(jù),所述統(tǒng)計數(shù)據(jù)以所述請求的URLPath作為key,以原子類類型的錯誤請求次數(shù)、總請求次數(shù)、開始時間、是否離線為屬性的統(tǒng)計類作為value,在所述統(tǒng)計數(shù)據(jù)中,若固定時間內(nèi)的錯誤請求比率或錯誤請求次數(shù)達到預設(shè)的閥值,則判定所述請求的服務(wù)處于熔斷狀態(tài)。
實施例二
如圖1所示,本發(fā)明實施例提供了一種服務(wù)熔斷隔離方法,包括如下步驟:
S1,服務(wù)啟動,配置服務(wù)加載熔斷策略參數(shù),默認為使用本地配置;
S2,外部請求經(jīng)過網(wǎng)關(guān)聚合層到達熔斷請求判斷模塊;
S3,所述熔斷請求判斷模塊判斷所述請求的服務(wù)是否處于熔斷狀態(tài),如果是,則執(zhí)行S4-S5,否則,執(zhí)行S6-S7;
S4,調(diào)用熔斷回調(diào)函數(shù),并返回回調(diào)結(jié)果;
S5,異步探測熔斷服務(wù)是否達到熔斷請求的健康閥值,如果是,則對所述熔斷服務(wù)進行健康恢復并跳至S6,否則,跳至S4;
S6,調(diào)用業(yè)務(wù)方的業(yè)務(wù)接口返回調(diào)用結(jié)果;
S7,異步調(diào)用熔斷健康統(tǒng)計模塊,對系統(tǒng)狀態(tài)進行實時健康統(tǒng)計,并根據(jù)配置的熔斷策略和統(tǒng)計結(jié)果判斷所述請求是否達到熔斷閥值,如果是,則發(fā)生服務(wù)熔斷告警提示,并修改內(nèi)存中的該服務(wù)的熔斷狀態(tài),否則,跳至S6。
本實施例中,S5的實際使用過程可以為:對于被熔斷的請求,默認每隔2s多服務(wù)探測一次,若連續(xù)請求預設(shè)的閥值數(shù)都正常,則對請求健康恢復。
本實施例中,對于熔斷的請求打日志,異常請求超過某些設(shè)定則報警。
上述方法中,通過實時統(tǒng)計系統(tǒng)監(jiān)控狀況,根據(jù)不同的降級策略對服務(wù)進行保護,同時通過熔斷后異步探測服務(wù)健康狀況、對服務(wù)進行自動健康恢復,以及熔斷后返回預設(shè)回調(diào)結(jié)果,提高用戶體驗;解決了系統(tǒng)對不可控風險的依賴,提高了系統(tǒng)的容錯能力和穩(wěn)定性,實時發(fā)現(xiàn)依賴系統(tǒng)異常、方便問題的定位,加速異常解決。
其中,S3中,所述熔斷請求判斷模塊判斷所述請求的服務(wù)是否處于熔斷狀態(tài),具體為,用無鎖Map保存統(tǒng)計數(shù)據(jù),所述統(tǒng)計數(shù)據(jù)以所述請求的URLPath作為key,以原子類類型的錯誤請求次數(shù)、總請求次數(shù)、開始時間、是否離線為屬性的統(tǒng)計類作為value,在所述統(tǒng)計數(shù)據(jù)中,若固定時間內(nèi)的錯誤請求比率或錯誤請求次數(shù)達到預設(shè)的閥值,則判定所述請求的服務(wù)處于熔斷狀態(tài)。
S4中,所述回調(diào)結(jié)果包括:調(diào)用熔斷回調(diào)函數(shù)成功,則返回預設(shè)回調(diào)結(jié)果,否則,發(fā)生回調(diào)異常告警提示。
S5中,所述健康閥值根據(jù)統(tǒng)計的歷史報表數(shù)據(jù)進行設(shè)置,并進行動態(tài)配置。
S7中,所述熔斷閥值根據(jù)統(tǒng)計的歷史報表數(shù)據(jù)進行設(shè)置,并進行動態(tài)配置。
本發(fā)明實施例中,由于各個業(yè)務(wù)方的SLA不同,各個業(yè)務(wù)配置的健康閥值和熔斷閥值可以由統(tǒng)計模塊的歷史報表數(shù)據(jù)進行設(shè)置,同時可以在配置模塊中進行動態(tài)配置。
通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:本發(fā)明實施例提供的一種服務(wù)熔斷隔離系統(tǒng)和方法,通過實時統(tǒng)計系統(tǒng)監(jiān)控狀況,根據(jù)不同的降級策略對服務(wù)進行保護,同時通過熔斷后異步探測服務(wù)健康狀況、對服務(wù)進行自動健康恢復,以及熔斷后返回預設(shè)回調(diào)結(jié)果,提高用戶體驗;解決了系統(tǒng)對不可控風險的依賴,提高了系統(tǒng)的容錯能力和穩(wěn)定性,實時發(fā)現(xiàn)依賴系統(tǒng)異常、方便問題的定位,加速異常解決。
本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本領(lǐng)域人員應該理解的是,上述實施例提供的方法步驟的時序可根據(jù)實際情況進行適應性調(diào)整,也可根據(jù)實際情況并發(fā)進行。
上述實施例涉及的方法中的全部或部分步驟可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于計算機設(shè)備可讀取的存儲介質(zhì)中,用于執(zhí)行上述各實施例方法所述的全部或部分步驟。所述計算機設(shè)備,例如:個人計算機、服務(wù)器、網(wǎng)絡(luò)設(shè)備、智能移動終端、智能家居設(shè)備、穿戴式智能設(shè)備、車載智能設(shè)備等;所述的存儲介質(zhì),例如:RAM、ROM、磁碟、磁帶、光盤、閃存、U盤、移動硬盤、存儲卡、記憶棒、網(wǎng)絡(luò)服務(wù)器存儲、網(wǎng)絡(luò)云存儲等。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視本發(fā)明的保護范圍。