摘要:有沒有那么一個框架能夠把熔斷跟限流都給做了,以前沒有,但是現在有了,我這屬于自問自答哈這個框架就是阿里最新開源的。后來我才發現我錯了,大錯特錯,這是一個新的框架,潛力實力阿里開源。
前言
在 Spring Cloud 體系中,熔斷降級我們會使用 Hystrix 框架,限流通常會在 Zuul 中進行處理,Zuul 中沒有自帶限流的功能,我們可以自己做限流或者集成第三方開源的限流框架。最新一代的網關 Spring Cloud Gateway 則自帶了限流的功能。
有沒有那么一個框架能夠把熔斷跟限流都給做了,以前沒有,但是現在有了,我這屬于自問自答哈!這個框架就是阿里最新開源的 Sentinel。
第一眼見到 Sentinel 有一種很熟悉的感覺,似曾相識啊!Redis 里面集群的那個哨兵模式不就是 Sentinel 嘛。后來我才發現我錯了,大錯特錯,這是一個新的框架,潛力 + 實力 = 阿里開源。
Sentinel 是什么?本段介紹來源于Sentinel Github主頁介紹
隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
Sentinel 具有以下特征:
豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應用等。
完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制臺中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集群的匯總運行情況。
廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴并進行簡單的配置即可快速地接入 Sentinel。
完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定制邏輯。例如定制規則管理、適配動態數據源等。
Sentinel 的主要特性:
Sentinel 的開源生態:
初次見面的我們先來簡單的體驗下 Sentinel 吧,在你的Maven項目中增加 Sentinel 的依賴:
com.alibaba.csp sentinel-core 1.4.1
Sentinel中需要限流的稱之為資源,對資源進行處理,下面來看最簡單的一段代碼:
public static void main(String[] args) { initFlowRules(); while (true) { Entry entry = null; try { entry = SphU.entry("HelloWorld"); /*您的業務邏輯 - 開始*/ System.out.println("hello world"); /*您的業務邏輯 - 結束*/ } catch (BlockException e1) { /*流控邏輯處理 - 開始*/ System.out.println("block!"); /*流控邏輯處理 - 結束*/ } finally { if (entry != null) { entry.exit(); } } } } private static void initFlowRules(){ Listrules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("HelloWorld"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // Set limit QPS to 20. rule.setCount(20); rules.add(rule); FlowRuleManager.loadRules(rules); }
第一行中初始化限流的規則,創建了一個資源叫 HelloWorld,設置了這個資源的QPS 為 20。
在業務開始前使用SphU.entry();方法標識開始,結束使用entry.exit();,如果觸發了流控邏輯就會拋出BlockException異常讓用戶自行處理。
代碼運行之后,我們可以在日志 ~/logs/csp/${appName}-metrics.log.xxx 里看到下面的輸出:
|--timestamp-|------date time----|-resource-|p |block|s |e|rt 1529998904000|2018-06-26 15:41:44|HelloWorld|20|0 |20|0|0 1529998905000|2018-06-26 15:41:45|HelloWorld|20|5579 |20|0|728 1529998906000|2018-06-26 15:41:46|HelloWorld|20|15698|20|0|0 1529998907000|2018-06-26 15:41:47|HelloWorld|20|19262|20|0|0 1529998908000|2018-06-26 15:41:48|HelloWorld|20|19502|20|0|0 1529998909000|2018-06-26 15:41:49|HelloWorld|20|18386|20|0|0
p:通過的請求,
block:被阻止的請求
s:成功執行完成的請求個數
e:用戶自定義的異常
rt:平均響應時長。
我是Mac系統,日志是在這個目錄下,Windows我沒試過,應該也在用戶的主目錄下
上面這個列子是官方的示列,如果你覺得沒有看到你想要的效果,因為一直在循環,也不知道有沒有限流成功,我們可以稍微改動一下進行測試就知道了。
將while循環改成for循環, 次數為10000次,只輸出一句話,不做任何限制,執行完成的時間大概在40毫秒左右。
long startTime = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { System.out.println("hello world"); } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime);
下面加上限流的邏輯,執行完成的時間基本上就超過100毫秒了,可見限流起了作用。
for (int i = 0; i < 10000; i++) { Entry entry = null; try { entry = SphU.entry("HelloWorld"); // 資源中的邏輯. System.out.println("hello world"); } catch (BlockException e1) { System.out.println("blocked!"); } finally { if (entry != null) { entry.exit(); } } } long endTime = System.currentTimeMillis(); System.out.println(endTime - startTime);歡迎加入我的知識星球,一起交流技術,免費學習猿天地的課程(http://cxytiandi.com/course) PS:目前星球中正在星主的帶領下組隊學習Sentinel,等你哦!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73518.html
摘要:以流量為切入點,從流量控制熔斷降級系統負載保護等多個維度保護服務的穩定性分布式系統的流量防衛兵。歡迎關注我們獲得更多的好玩實踐 之前分享過 一篇 《Spring Cloud Gateway 原生的接口限流該怎么玩》, 核心是依賴Spring Cloud Gateway 默認提供的限流過濾器來實現 原生RequestRateLimiter 的不足 配置方式 spring: clou...
摘要:以流量為切入點,從流量控制熔斷降級系統負載保護等多個維度保護服務的穩定性分布式系統的流量防衛兵。歡迎關注我們獲得更多的好玩實踐 之前分享過 一篇 《Spring Cloud Gateway 原生的接口限流該怎么玩》, 核心是依賴Spring Cloud Gateway 默認提供的限流過濾器來實現 原生RequestRateLimiter 的不足 配置方式 spring: clou...
摘要:但是比較可惜的是已經宣布對停止更新。客戶端整合每個微服務客戶端都需要整合的客戶端封裝與配置,才能將監控信息上報給展示以及實時的更改限流或熔斷規則等。下面我們就分兩部分來看看,如何使用來實現接口限流。 最近管點閑事浪費了不少時間,感謝網友libinwalan的留言提醒。及時糾正路線,繼續跟大家一起學習Spring Cloud Alibaba。 Nacos作為注冊中心和配置中心的基礎教程,...
摘要:現狀分布式場景中。因此要對在原服務不可用時進行熔斷降級處理。分析熔斷降級可以服務端限流網關限流客戶端限流。它提供兩種資源隔離的模式信號量隔離和線程池隔離。支持流控熔斷降級系統保護等。它支持并發數的流量控制也支持熔斷降級。 現狀 分布式場景中。若服務不穩定,會導致調用方服務也不可用,從而造成雪崩效應。因此要對在原服務不可用時進行熔斷降級處理。 分析 熔斷降級可以服務端限流、網關限流、客戶...
閱讀 3204·2021-11-25 09:43
閱讀 3415·2021-11-11 16:54
閱讀 842·2021-11-02 14:42
閱讀 3760·2021-09-30 09:58
閱讀 3670·2021-09-29 09:44
閱讀 1287·2019-08-30 15:56
閱讀 2105·2019-08-30 15:54
閱讀 2993·2019-08-30 15:43