Spring Cloud Alibaba實踐 --Sentinel

sentinel簡介

Sentinel的官方標題是:分布式系統的流量防衛兵。從名字上來看,很容易就能猜到它是用來作服務穩定性保障的。對于服務穩定性保障組件,如果熟悉Spring Cloud的用戶,第一反應應該就是Hystrix。但是比較可惜的是Netflix已經宣布對Hystrix停止更新。那么,在未來我們還有什么更好的選擇呢?除了Spring Cloud官方推薦的resilience4j之外,目前Spring Cloud Alibaba下整合的Sentinel也是用戶可以重點考察和選型的目標。

在這里插入圖片描述

Sentiner與hystrix的區別:
Sentinel的功能和細節比較多,一篇內容很難介紹完整。所以下面我會分多篇來一一介紹Sentinel的重要功能。本文就先從限流入手,說說如何把Sentinel整合到Spring Cloud應用中,以及如何使用Sentinel Dashboard來配置限流規則。通過這個簡單的例子,先將這一套基礎配置搭建起來。
解決雪崩問題的常見方式:

  • 1、超時處理:設定超時時間,請求超過一定的時間沒有響應就返回錯誤信息,不會無休止等待。
  • 2、艙壁模式:限定每個業務能使用的線程數,避免耗盡整個tomcat資源,因此也叫線程隔離。
  • 3、熔斷降級:有斷路器統計業務執行的異常比例,如果超出閾值則會熔斷業務,攔截訪問該業務的一切請求。
  • 4、流量控制:限制業務訪問的QPS,避免服務因流量的突增而故障。

安裝并整合sentinel

Sentinel的使用分為兩部分:

  • sentinel-dashboard:與hystrix-dashboard類似,但是它更為強大一些。除了與hystrix-dashboard一樣提供實時監控之外,還提供了流控規則、熔斷規則的在線維護等功能。
  • 客戶端整合:每個微服務客戶端都需要整合sentinel的客戶端封裝與配置,才能將監控信息上報給dashboard展示以及實時的更改限流或熔斷規則等。

(1)啟動sentinel-dashboard

下載地址:sentinel-dashboard-1.6.0.jar
其他版本:Sentinel/releases

通過命令啟動:

java -jar sentinel-dashboard-1.6.0.jar

默認情況下,sentinel-dashboard以8080端口啟動。由于sentinel-dashboard是一個標準的spring boot應用,所以如果要自定義端口號等內容的話,可以通過在啟動命令中增加參數來調整,比如:

java -jar sentinel-dashboard-1.6.0.jar --server.port=8888

所以可以通過訪問:localhost:8888 來驗證是否已經啟動成功,如果一切順利的話,可以看到登錄頁面(默認用戶名和密碼都是sentinel)。

(2)整合Sentinel

依賴:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>

配置:

spring.application.name=alibaba-sentinel-rate-limiting
server.port=8002# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8888

主類:

package com.example.demospringboot;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@Slf4j
public class DemospringbootApplication {public static void main(String[] args) {SpringApplication.run(DemospringbootApplication.class, args);}@Slf4j@RestControllerstatic class TestController {@GetMapping("/hello")public String hello() {return "Hello World";}}
}

啟動應用,并執行curl命令:
在這里插入圖片描述
此時,在上面啟動的Sentinel Dashboard中就可以當前我們啟動的alibaba-sentinel-rate-limiting這個服務以及接口調用的實時監控了。具體如下圖所示:
在這里插入圖片描述

配置限流規則

在完成了上面的兩節之后,我們在alibaba-sentinel-rate-limiting服務下,點擊簇點鏈路菜單,可以看到如下界面:

在這里插入圖片描述

通過點擊流控按鈕,來為該接口設置限流規則,比如:

在這里插入圖片描述

流控模式:

  • 直接:統計當前資源的請求,觸發閾值時對當前資源直接限流,也是默認模式。
  • 關聯:統計與當前相關的另一個資源,觸發閾值時,對當前資源限流。
  • 鏈路:統計從指定鏈路訪問到本資源的請求,觸發閾值時,對指定鏈路限流,即只限流從指定接口進來的

流控效果:

  • 快速失效:達到閾值后,新的請求會被立即拒絕并拋出FlowException異常。是默認的處理方式。

  • warm up:預熱模式,對超出閾值的請求同樣是拒絕,并拋出異常。但這種模式閾值會動態變化,從一個較小的值逐漸增加到最大值。請求閾值初始值是 threshold/coldFactor(默認值是3),持續指定時長后,逐漸提高到threshould值。例如,我設置QPS的threshold的為10,預熱時間為5秒,那么初始閾值就是10/3,也就是3,然后在5秒后逐漸增長到10.

  • 排隊等待:讓所有請求按照先后次序進入一個隊列中排隊執行,兩個請求的間隔不能小于指定時長。例如:QPS = 5,意味著每200ms處理一個隊列中的請求;timeout =2000,意味著預期等待超過2000ms的請求會被拒絕并拋出異常。

參考案例

點擊新增按鈕之后,可以看到如下界面:
在這里插入圖片描述

其實就是左側菜單中流控規則的界面,這里可以看到當前設置的所有限流策略。在完成了上面所有內容之后,我們可以嘗試一下快速的調用這個接口,看看是否會觸發限流控制,比如:

在這里插入圖片描述
可以看到,快速的調用/hello接口之后,調用被限流了。
在 sentinel-dashboard界面,也可以看到對應統計:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208125.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三防平板|手持終端PDA|8寸/10寸工業三防平板電腦主板方案定制

近年來&#xff0c;隨著科技的快速發展&#xff0c;三防平板成為了各行各業中不可或缺的工具。三防平板采用IP67級別的防護設計&#xff0c;通過了多項測試標準&#xff0c;如國標和美標&#xff0c;具備防水、防摔、防塵、防撞、防震、防跌落以及防鹽霧等多重防護功能。因此&a…

JavaScript 簡單理解原型和創建實例時 new 操作符的執行操作

function Person(){// 構造函數// 當函數創建&#xff0c;prototype 屬性指向一個原型對象時&#xff0c;在默認情況下&#xff0c;// 這個原型對象將會獲得一個 constructor 屬性&#xff0c;這個屬性是一個指針&#xff0c;指向 prototype 所在的函數對象。 } // 為原型對象添…

HarmonyOS應用開發工具DevEco Studio安裝與使用

語雀知識庫地址&#xff1a;語雀HarmonyOS知識庫 飛書知識庫地址&#xff1a;飛書HarmonyOS知識庫 知識庫內容逐步完善中… 工欲善其事必先利其器&#xff0c;要編寫HarmonyOS應用就需要用到官方提供的IDE工具來編寫相應的代碼。 在鴻蒙開發者官網&#xff0c;其提供了官方的開…

基于Java醫院掛號管理系統

基于Java醫院掛號管理系統 功能需求 1、患者信息管理&#xff1a;系統需要提供患者的基本信息錄入功能&#xff0c;包括姓名、性別、年齡、聯系方式等。此外&#xff0c;系統還應支持對患者信息進行修改、查詢和刪除的操作。 2、掛號管理&#xff1a;系統需要提供掛號功能&a…

高效的多維空間點索引算法——GeoHash

一、Geohash 算法簡介 GeoHash是空間索引的一種方式&#xff0c;其基本原理是將地球理解為一個二維平面&#xff0c;通過把二維的空間經緯度數據編碼為一個字符串&#xff0c;可以把平面遞歸分解成更小的子塊&#xff0c;每個子塊在一定經緯度范圍內擁有相同的編碼。以GeoHash方…

springboot 極簡案例

安裝idea File -> New Project 選擇依賴 創建controller文件 輸入controller類名 輸入代碼 運行項目 訪問 localhost:8080/hello/boot package com.example.demo;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.…

數據庫對象介紹與實踐:視圖、函數、存儲過程、觸發器和物化視圖

文章目錄 一、視圖&#xff08;View&#xff09;1、概念2、基本操作1&#xff09;創建視圖2&#xff09;修改視圖3&#xff09;刪除視圖4&#xff09;使用視圖 3、使用場景4、實踐 二、函數&#xff08;Function&#xff09;1、概念2、基本操作1&#xff09;創建函數2&#xff…

粵能環保亮相迪拜COP28,智能技術鑄就運河城市可持續未來

在全球應對氣候變化的重要會議——迪拜COP28大會上&#xff0c;運河城市面臨的獨特環境挑戰引起了廣泛關注。隨著城市化進程的加快&#xff0c;運河城市在處理固體廢物、減少溫室氣體排放以及維持水資源安全方面面臨著嚴峻考驗。智能垃圾分類作為應對這些挑戰的有效途徑&#x…

一些系統日常運維命令和語句

一、前言 記錄一些日常系統運維的命令和語句 二、linux命令與語句 1、linux查看各目錄使用磁盤情況 du -h /home home為目錄 du -h /home 2.查看內存使用情況 free -h 3、查看進程和CPU使用情況 top top 三、數據庫語句 1、統計mysql數據庫表數量 SELECT COUNT(*) A…

被動副業機賺錢項目教程,Docker一鍵安裝教程

被動副業機賺錢項目教程&#xff0c;Docker一鍵安裝教程 Docker一鍵運行 軟件下載 視頻教程 /opt/wxedge_storage 路徑換成你設備里面的路徑即可&#xff0c;其余參數不用變&#xff0c; 鏡像名為onething1/wxedge 更多安裝說明&#xff0c;可參考官方文檔&#xff1a;容器魔…

【算法每日一練]-結構優化(保姆級教程 篇4 樹狀數組,線段樹,分塊模板篇)

目錄 分塊 分塊算法步驟&#xff1a; 樹狀數組 樹狀數組步驟&#xff1a; 線段樹點更新 點更新步驟&#xff1a; 線段樹區間更新 區間更新步驟&#xff1a; 不同于倍增和前綴和與差分序列。 前綴和處理不更新的區間和 差分處理離線的區間更新問題 倍增處理離線的區間…

C++的繼承語法

在面向對象編程中&#xff0c;繼承是一種強大的機制&#xff0c;允許一個類&#xff08;子類&#xff09;從另一個類&#xff08;父類&#xff09;繼承屬性和方法。C是一種支持面向對象編程的編程語言&#xff0c;通過其靈活而強大的繼承語法&#xff0c;開發者可以構建更加模塊…

維普論文查重率高【詳細說明】

大家好&#xff0c;今天來聊聊維普論文查重率高&#xff0c;希望能給大家提供一點參考。 以下是針對論文重復率高的情況&#xff0c;提供一些修改建議和技巧&#xff1a; 維普論文查重率高&#xff1a;原因分析與降重技巧 背景介紹 在學術領域&#xff0c;論文的重復率是衡量其…

老電腦重置后能連上WIFI但是打開360網頁老是提示該網址不是私密連接

看了一下可以忽略這次提示&#xff0c;能夠上網&#xff0c;但是每次打開新網頁都會有“該網址不是私密連接”提示&#xff0c;這個提示非常大&#xff0c;嚴重影響上網。 強行下載了谷歌瀏覽器并打開后&#xff0c;提示“您的時鐘慢了”&#xff0c;然后看了一下電腦右下角日期…

CLion手把手教你創建Windows項目

作為一個Jetbrains迷的我&#xff0c;下載了Jetbrains全家桶&#xff0c;我就想用CLion 編寫 Windows 項目 前提&#xff1a;必須安裝 Visual Studio 2022 New Project 選擇 C Executable&#xff0c;取好項目名&#xff0c; 點擊 Create 在 CMakeList.txt 中添加以下內容&…

系列八、SpringBoot中自定義SpringMVC配置

一、概述 作為Spring家族的明星產品&#xff0c;SpringBoot極大地簡化了程序員的日常開發&#xff0c;提高了開發效率。我們很容易得借助于SpringBoot就可以快速開發業務代碼。一般情況下&#xff0c;公司的日常開發都是基于web服務的&#xff0c;我們在使用idea等工具初始化一…

Zabbix補充

Zabbix的自動發現機制&#xff1a; Zabbix客戶端主動和服務端聯系&#xff0c;將自己的地址和端口發送服務端&#xff0c;來實現自動添加主機 客戶端是自動的一方 缺點&#xff1a;自定義的網段的主機數量太多&#xff0c;登記耗時會很久&#xff0c;而且這個自動發現機制不是…

P1075 [NOIP2012 普及組] 質因數分解題解

題目 已知正整數 n 是兩個不同的質數的乘積&#xff0c;試求出兩者中較大的那個質數 輸入輸出格式 輸入格式 輸入一個正整數n 輸出格式 輸出一個正整數p&#xff0c;即較大的那個質數 輸入輸出樣例 輸入 21 輸出 7 代碼 //對于一個質因數&#xff0c;從小到大開始…

Ubuntu 22.04源碼安裝yasm 1.3.0

sudo lsb_release -r看到操作系統的版本是22.04&#xff0c;sudo uname -r可以看到內核版本是5.15.0-86-generic&#xff0c;sudo gcc --version可以看到版本是11.2.0&#xff0c;sudo make --version可以看到版本是GNU Make 4.3。 下載yasm http://yasm.tortall.net/Downlo…

扁平的MutableList元素每隔若干元素一組裝入新MutableList,Kotlin

扁平的MutableList元素每隔若干元素一組裝入新MutableList&#xff0c;Kotlin fun main(args: Array<String>) {val array arrayOf("a", "b", "c", "d", "e", "f", "g", "h", "i…