1. 程式人生 > 其它 >sentinel篇1-官方快速限流指引

sentinel篇1-官方快速限流指引

最近 API 在改造,要開始考慮限流問題了。團隊專案技術棧主為阿里系,自然就是 `sentinel` 了。

前言

  • 最近 API 在改造,要開始考慮限流問題了。團隊專案技術棧主為阿里系,自然就是 sentinel 了。
  • 開始前,一定要檢查官方各開源元件版本對照:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明,找到正確版本能避掉很多坑!
  • 本系列版本和demo可文末參考

快速開始

目的碼塊快速限流

  • pom
<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-core</artifactId>
	<version>${sentinel.version}</version>
</dependency>
  • main方法
public class Demo0 {
	public static void main(String[] args) {
		// 配置規則.
		initFlowRules();

		while (true) {
			// 1.5.0 版本開始可以直接利用 try-with-resources 特性
			try (Entry entry = SphU.entry("HelloWorld")) {
				// 被保護的邏輯
				protectedCodes();
			} catch (BlockException ex) {
				// 處理被流控的邏輯
				System.err.println(DateUtil.formatDateTime(new Date()) + " blocked!");
			}
			
			try {
				Thread.sleep(RandomUtil.randomLong(300L));
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	private static void protectedCodes() {
		System.out.println(DateUtil.formatDateTime(new Date()) + " hello world");
	}

	private static void initFlowRules() {
		List<FlowRule> rules = new ArrayList<>();
		FlowRule rule = new FlowRule();
		rule.setResource("HelloWorld");
		rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
		// Set limit QPS to 20.
		rule.setCount(3);
		rules.add(rule);
		FlowRuleManager.loadRules(rules);
	}
}
  • 控制檯輸出
2021-11-11 15:12:38 hello world
2021-11-11 15:12:38 hello world
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 hello world
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:39 blocked!
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 hello world
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:40 blocked!
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 hello world
2021-11-11 15:12:41 blocked!
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 hello world
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:42 blocked!
2021-11-11 15:12:43 hello world
  • 限流阻斷OK!

sentinel-dashboard

  • 上面快速驗證了限流功能
  • 我們肯定希望對限流效果和限流規則視覺化觀察和動態配置
  • 官方的 sentinel-dashboard 就是這個作用
  • 首先下載官方的 sentinel-dashboard jar包或者下載原始碼本地跑起除錯,建議後者。一定要注意版本!官方下載地址
  • 下載原始碼構建執行後,瀏覽器訪問控制檯即可(預設埠8080,預設登入密碼 sentinel/sentinel)

sentinel“資源”註冊到控制檯

  • 剛剛的demo引入pom依賴
  • Java啟動引數新增-Dcsp.sentinel.dashboard.server=localhost:8080,使本地應用與dashboard能夠通訊。
  • 啟動應用並重新整理 dashboard 檢視實時監控情況
  • 可對註冊的“資源”實時配置流控和降級規則,也可配置全域性的【系統規則】
  • 圖示↓

有效參考