Spring Cloud 之前使用的斷路器是 Netfilx 開源的 Hystrix 。被很多微服務(wù)開發(fā)者作為默認(rèn)的斷路器來(lái)使用。2018年11月,當(dāng) Netflix 宣布將這個(gè)項(xiàng)目置于維護(hù)模式時(shí)(不再開發(fā)新特性,只進(jìn)行例行維護(hù)),Spring Cloud 官方也不得不跟進(jìn)了 Netfix ,在 SpringOne 2019中,Spring 宣布將從 Spring Cloud 3.1 版本中刪除 Hystrix 儀表板。要不了多長(zhǎng)時(shí)間 Spring Cloud Netfix 將結(jié)束生命周期。
2. Spring Cloud Circuit Breaker為了填補(bǔ) Spring Cloud Netfix 留下的空白, Spring Cloud Circuit Breaker 項(xiàng)目應(yīng)運(yùn)而生。這并不是一個(gè)實(shí)際的斷路器,而是一個(gè)斷路器的抽象層。它提供了一套規(guī)范API,開發(fā)人員可以根據(jù)實(shí)際選擇符合需求的斷路器實(shí)現(xiàn)。目前提供四種斷路器實(shí)現(xiàn):
Netfix HystrixResilience4JSentinelSpring RetryHystrix 已經(jīng)快成為過(guò)去式了。 而 Spring Retry 我個(gè)人認(rèn)為并不是為了微服務(wù)而生。推薦在新項(xiàng)目中使用 Resilience4J 或者 Sentinel。
2.1 Resilience4JResilience4j 是受 Hystrix 啟發(fā)的輕量級(jí)容錯(cuò)庫(kù),專為 Java 8 和函數(shù)式編程而設(shè)計(jì)。而且該庫(kù)僅僅依賴一個(gè) Java 函數(shù)式編程增強(qiáng)庫(kù) Vavr 而沒(méi)有其它依賴。它提供了高階函數(shù),斷路器,速率限制器,重試或艙壁隔離功能來(lái)對(duì)功能接口進(jìn)行增強(qiáng),另外還有度量標(biāo)準(zhǔn)模塊對(duì)運(yùn)行指標(biāo)進(jìn)行跟蹤。
優(yōu)點(diǎn):功能比較全,相比 Hystrix 支持流量控制,輕量級(jí),而且都是模塊化的,支持函數(shù)式編程。缺點(diǎn):監(jiān)控目前只提供度量API,需要自己整合,但是我覺得這個(gè)不是問(wèn)題,畢竟 micrometer 也非常簡(jiǎn)單。2.2 Sentinel阿里巴巴中間件團(tuán)隊(duì)出品,現(xiàn)在是 Spring Cloud Alibaba 生態(tài)的一部分。功能和 Resilience4J 類似,亮點(diǎn)在于有流量塑形功能,對(duì)隨機(jī)不規(guī)則、不受控的流量進(jìn)行規(guī)則化處理;另外一個(gè)亮點(diǎn)在于有監(jiān)控的 dashboard ,不像 Resilience4j 需要自己開發(fā)。而且 也是 Spring Cloud Alibaba 體系的一部分。
3. 總結(jié)其實(shí)經(jīng)過(guò) Spring Cloud Circuit Breaker 的整合后使用都不會(huì)特別的困難,難點(diǎn)在于自定義,功能上 Sentinel 更加全面一些,但是有時(shí)候業(yè)務(wù)并不是需要什么都有。 Resilience4j 大部分場(chǎng)景都能夠滿足,函數(shù)編程也更加優(yōu)雅。這兩個(gè)選擇沒(méi)有太多的高下之分。多說(shuō)一句 Vavr 函數(shù)庫(kù)非常不錯(cuò),有興趣可以去體驗(yàn)一下。只是 Hystrix 新項(xiàng)目還是不要再用了,雖然是一個(gè)非常好的斷路器組件,但是它的歷史使命差不多已經(jīng)完成了。