外部服務的隔離及降級

    本文的來源是以前的一次生產事故,當時因爲某家醫院的機房網絡故障,形成整個某項業務的所有中止服務,也就是說其它醫院雖然說與平臺的網絡暢通,可是因爲平臺的資源所有被消耗,其它醫院也不能再提供給患者提供任何服務。下圖是用戶、平臺及醫院的調用關係圖:java

    我最近找了一些公共的開源框架,包擴大概的看了看apache commons和google guava工具包,都沒有找到合適的工具,便花了兩個晚上的時間,本身實現了一個簡單的版本,源碼可見於git

https://github.com/mantuliu/distributed/tree/master/src/main/java/com/mantu/common/utilgithub

其中BusinessLimiter是具體的限流類,核心代碼就是tryAcquire() 和release()操做apache

BusinessLimiterUtil是工具類,能夠經過它和調用方的properties文件結合使用,建立多個BusinessLimiter的實例,例如結合上面的業務場景,能夠在配置文件中配置每家醫院的限流值,當醫院一的接口出現故障時,因爲對每家醫院都使用的限流,所以醫院一超出閥值調用被自動丟棄,保證其它醫院支付服務的正常進行,從而實現了外部服務的隔離和降級。網絡

使用demo可見於:框架

https://github.com/mantuliu/distributed/tree/master/src/main/java/com/mantu/common/sample工具

這個版本的實現仍是很是簡單的,後續會支持更復雜的狀況,對於「壞服務」實現自動降級和摘除節點。ui

相關文章
相關標籤/搜索