1. 程式人生 > >Spring Cloud Alibaba遷移指南(一):一行程式碼從 Hystrix 遷移到 Sentinel

Spring Cloud Alibaba遷移指南(一):一行程式碼從 Hystrix 遷移到 Sentinel

自 Spring Cloud 官方宣佈 Spring Cloud Netflix 進入維護狀態後,我們開始製作《Spring Cloud Alibaba遷移指南》系列文章,向開發者提供更多的技術選型方案,並降低遷移過程中的技術難度。

第一篇,我們對Hystrix、Resilience4j 和 Sentinel 三個開源專案進行對比,並探討如何使用一行程式碼這種極簡的方式,將Hystrix遷移到Sentinel。

Hystrix 自從前段時間 宣佈停止維護之後,社群推薦了 resilience4j。這 3 款產品各有優劣勢,具體的功能差異參考下表(該表來源 Sentinel Wiki

):

  Sentinel Hystrix resilience4j
隔離策略 訊號量隔離(併發執行緒數限流) 執行緒池隔離/訊號量隔離 訊號量隔離
熔斷降級策略 基於響應時間、異常比率、異常數 基於異常比率 基於異常比率、響應時間
實時統計實現 滑動視窗(LeapArray) 滑動視窗(基於 RxJava) Ring Bit Buffer
動態規則配置 支援多種資料來源 支援多種資料來源 有限支援
擴充套件性 多個擴充套件點 外掛的形式 介面的形式
基於註解的支援 支援 支援 支援
限流 基於 QPS,支援基於呼叫關係的限流 有限的支援 Rate Limiter
流量整形 支援預熱模式、勻速器模式、預熱排隊模式 不支援 簡單的 Rate Limiter 模式
系統自適應保護 支援 不支援 不支援
控制檯 提供開箱即用的控制檯,可配置規則、檢視秒級監控、機器發現等 簡單的監控檢視 不提供控制檯,可對接其它監控系統

目前 Sentinel 在 Spring Cloud Alibaba 專案中已經適配了 Spring Cloud 體系,可以用來完全替代 Hystrix 的功能了。

Spring Cloud Alibaba Sentinel 功能介紹

Spring Cloud Alibaba Sentinel 主要是為了整合 Sentinel 和 Spring Boot/Cloud 技術棧。目前完成了如下功能:

  1. 自動適配 Servlet 容器。只需要配置 url-pattern(預設攔截所有請求),即可對攔截的這些 url 進行限流降級操作
  2. 整合了 RestTemplate,使用 RestTemplate 進行操作的時候會被限流降級
  3. 整合了 Feign,相容了原先的 Hystrix 支援 Feign 的程式設計模型
  4. 資料來源可配置化,只需在配置檔案中配置資料來源資訊,即可動態載入規則
  5. Endpoint 暴露各種元資料,比如配置資訊,規則資料
  6. HealthIndicator 檢查 Sentinel 健康狀態 (整合中)
  7. 支援 Spring Cloud Gateway 和 Zuul (整合中)

Spring Cloud Alibaba Sentinel 代替 Hystrix

想要使用 Spring Cloud Alibaba Sentinel,需要加上依賴資訊:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel</artifactId>
    <version>0.2.1.RELEASE</version>
</dependency>

0程式碼修改相容 Feign

加上 Feign 的依賴:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
  <version>${latest.version}</version>
</dependency>

把 hystrix 的配置改成 sentinel 的即可使用 Sentinel 的限流降級功能:

# feign.hystrix.enabled: true
feign.sentinel.enabled: true
@FeignClient(name = "service-provider")
public interface EchoService {
    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable("str") String str);
  
      @RequestMapping(value = "/echo/save", method = RequestMethod.POST)
    String save(Foo foo);
}

對於這個 EchoService,echo 方法對應的資源名是 GET:http://service-provider/echo/{str}, save 方法對應的資源名是 POST:http://service-provider/echo/save

只需配置這些規則,限流降級操作即可立即生效。

一行程式碼支援 RestTemplate

Sentinel 還跟 Spring 生態的 RestTemplate 做了整合,可以對 RestTemplate 請求過程進行限流和降級操作,只需要在構造 RestTemplate 的時候加上 @SentinelRestTemplate 註解即可:

@Bean
@SentinelRestTemplate
public RestTemplate restTemplate() {
    return new RestTemplate();
}

@SentinelRestTemplate 註解還暴露出了對應的屬性可進行限流降級後的自定義錯誤,預設的行為是返回 "RestTemplate request block by sentinel" 資訊。關於 @SentinelRestTemplate 的詳細資訊可以參考 Wiki

相關推薦

Spring Cloud Alibaba遷移指南程式碼替換 Eureka

自 Spring Cloud 官方宣佈 Spring Cloud Netflix

Spring Cloud Eureka原理分析註冊過程-服務端

Eureka的官方文件和Spring Cloud Eureka文件都有很多含糊的地方,其他資料也不多,只有讀讀原始碼維持生活這樣子…… 本文將不會詳細介紹每個細節,而是講述一些關鍵的地方,便於查閱。 一些好的參考資料 對讓人一臉懵逼的region和zone的解釋 攜程對Eureka機制的剖析

Spring-Cloud-Ribbon學習筆記入門

instance pub auto pom.xml forname 註冊 yml 中心 有一個 簡介 Spring Cloud Ribbon是一個基於Http和TCP的客戶端負載均衡工具,它是基於Netflix Ribbon實現的。它不像服務註冊中心、配置中心、API網關那

Spring Cloud Alibaba遷移指南2一行程式碼Hystrix遷移Sentinel

開發十年,就只剩下這套架構體系了! >>>   

Spring Cloud Alibaba遷移指南零代碼替換 Eureka

關於 lis maven lee work 啟動 默認 hystrix alibaba 自 Spring Cloud 官方宣布 Spring Cloud Netflix 進入維護狀態後,我們開始制作《Spring Cloud Alibaba遷移指南》系列文章,向開發者提供更

Spring Cloud Alibaba遷移指南極簡的 Config

自 Spring Cloud 官方宣佈 Spring Cloud Netflix

spring cloud實戰與思考 spring config全局配置方案設計

功能 IE 基於 比較 此外 fig eureka 搜索 地址 “spring cloud”的配置中心工具“spring cloud config”提供了分布式系統配置文件集中管理解決方案。該工具功能強大,實現也很簡單。網上可以搜索到很多開發教程和用例。本文並不是分享“

Spring Cloud 微服務框架

坑二:訪問localhost:8764/hello?name=jcz時報錯:Whitelabel Error Page。這是由於沒在pom.xml中新增spring-cloud-starter-eureka (adsbygoogle = window.adsbygoogle ||

spring cloud config 配置中心

微服務的基礎服務之一,可以使用Apollo 代替,後續補充,也可以自己搭建 https://github.com/ctr

Spring Cloud Alibaba學習筆記3 - Ribbon

1.手寫一個客戶端負載均衡器   在瞭解什麼是Ribbon之前,首先通過程式碼的方式手寫一個負載均衡器 RestTemplate restTemplate = new RestTemplate(); // 獲取請求示例 List<ServiceInstance> instances = dis

Spring Cloud Alibaba學習筆記23 - 呼叫鏈監控工具Spring Cloud Sleuth + Zipkin

隨著業務發展,系統拆分導致系統呼叫鏈路愈發複雜一個前端請求可能最終需要呼叫很多次後端服務才能完成,當整個請求陷入效能瓶頸或不可用時,我們是無法得知該請求是由某個或某些後端服務引起的,這時就需要解決如何快讀定位服務故障點,以對症下藥。於是就有了分散式系統呼叫跟蹤的誕生。 Spring Cloud Sleuth

SpringBoot踩坑指南超連結--不能不經過請求直接跳轉到新的html及a標籤傳值

本篇博文轉自:https://blog.csdn.net/qq_36688143/article/details/79499959 html連結傳值及在新html取值和顯示上一步操作封裝的屬性資訊(顯示剛才建立的資料夾、發表的文章等)點選開啟連結  a標籤遍歷list傳值、傳請求:

Spring Cloud Eureka原理分析續租、下線、自我保護機制和自動清理服務端

續租、下線等操作比較直觀,實際上也不復雜。讓我們自己想想它們大概會在服務端有什麼操作。 renew: 更新Lease的lastUpdateTimestamp, 更新一下InstanceInfo的最新狀態。然後呼叫其他同伴節點的renew介面。 cancel:把lease從registry中移除,設

Axon框架使用指南簡介

 隨著時間的推移,對軟體專案的需求迅速增加。公司希望他們的(網路)應用程式與他們的業務一起發展。這意味著不僅專案和程式碼庫變得更加複雜,而且意味著不斷新增,更改和功能被刪除。發現一個看起來很容易實現的功能可能要求開發團隊拆分整個應用程式可能令人沮喪。此外,今天的Web應用

Ubuntu Gnome 酷炫完整指南小工具篇[blogger映象]

本部落格是我的Blogger部落格映象,以方便牆內讀者訪問。圖片是從Blogger轉過來的,牆內可能看圖片有些困難。 想看更多內容,去我的Blogger主站https://the0demiurge.blogspot.jp/看看吧 小工具篇 我的各種配置全都放在https

LeetCode 刷題指南為什麼要刷題

雖然刷題一直飽受詬病,不過不可否認刷題確實能鍛鍊我們的程式設計能力,相信每個認真刷題的人都會有體會。現在提供線上程式設計評測的平臺有很多,比較有名的有 hihocoder,LintCode,以及這裡我們關注的 LeetCode。 程式碼提交曲線 LeetCode

Spring Boot 實踐折騰記快速,Hello World例子

規劃人生旅程是你自己責無旁貸的責任,沒有其他人可以替你規劃。即便是你的老闆,也沒有這個義務。要實現自我發展,必須同時做好兩件事:精益求精和嘗試新鮮。——《非營利性組織的管理》 開始前… 最近閒下來,看了些Spring Boot和Docker的相關資料

dotConnect for Oracle入門指南安裝

【下載dotConnect for Oracle最新版本】 dotConnect for Oracle(原名OraDirect.NET)建立在ADO.NET技術上,為基於Oracle資料庫的應用程式提供完整的解決方案。它為設計應用程式結構帶來了新的方法,提高工作效率,使資料庫應用程式的開發更簡便。 d

Spring中的設計模式工廠模式

一、工廠模式 場景:以牛奶為例,有蒙牛、伊利、愛慕希等品牌。 public interface Milk { /** * 獲得一種牛奶產品 * @return */ String getName(); } 產品實現介面: